diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 035826d1384..9f276aeb63f 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -1,30 +1,47 @@ /obj/item/inflatable + name = "inflatable" + w_class = 2 + icon = 'icons/obj/inflatable.dmi' + var/deploy_path = null + +/obj/item/inflatable/attack_self(mob/user) + if(!deploy_path) + return + playsound(loc, 'sound/items/zip.ogg', 75, 1) + user << "You inflate \the [src]." + var/obj/structure/inflatable/R = new deploy_path(user.loc) + src.transfer_fingerprints_to(R) + R.add_fingerprint(user) + qdel(src) + + +/obj/item/inflatable/wall name = "inflatable wall" desc = "A folded membrane which rapidly expands into a large cubical shape on activation." - icon = 'icons/obj/inflatable.dmi' icon_state = "folded_wall" - w_class = 3 + deploy_path = /obj/structure/inflatable/wall - attack_self(mob/user) - playsound(loc, 'sound/items/zip.ogg', 75, 1) - user << "You inflate [src]." - var/obj/structure/inflatable/R = new /obj/structure/inflatable(user.loc) - src.transfer_fingerprints_to(R) - R.add_fingerprint(user) - qdel(src) +/obj/item/inflatable/door/ + name = "inflatable door" + desc = "A folded membrane which rapidly expands into a simple door on activation." + icon_state = "folded_door" + deploy_path = /obj/structure/inflatable/door /obj/structure/inflatable - name = "inflatable wall" + name = "inflatable" desc = "An inflated membrane. Do not puncture." density = 1 anchored = 1 opacity = 0 - icon = 'icons/obj/inflatable.dmi' icon_state = "wall" + var/undeploy_path = null var/health = 50.0 +/obj/structure/inflatable/wall + name = "inflatable wall" + undeploy_path = /obj/item/inflatable/wall /obj/structure/inflatable/New(location) ..() @@ -61,11 +78,11 @@ return /obj/structure/inflatable/attack_hand(mob/user as mob) - add_fingerprint(user) - return + add_fingerprint(user) + return /obj/structure/inflatable/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(!istype(W)) return + if(!istype(W) || istype(W, /obj/item/weapon/inflatable_dispenser)) return if (can_puncture(W)) visible_message("[user] pierces [src] with [W]!") @@ -93,10 +110,11 @@ src.transfer_fingerprints_to(R) qdel(src) else - //user << "You slowly deflate the inflatable wall." - visible_message("[src] slowly deflates.") + if(!undeploy_path) + return + visible_message("\The [src] slowly deflates.") spawn(50) - var/obj/item/inflatable/R = new /obj/item/inflatable(loc) + var/obj/item/inflatable/R = new undeploy_path(src.loc) src.transfer_fingerprints_to(R) qdel(src) @@ -121,28 +139,14 @@ user.visible_message("[user] [attack_verb] at [src]!") return 1 -/obj/item/inflatable/door/ - name = "inflatable door" - desc = "A folded membrane which rapidly expands into a simple door on activation." - icon = 'icons/obj/inflatable.dmi' - icon_state = "folded_door" - - attack_self(mob/user) - playsound(loc, 'sound/items/zip.ogg', 75, 1) - user << "You inflate [src]." - var/obj/structure/inflatable/door/R = new /obj/structure/inflatable/door(user.loc) - src.transfer_fingerprints_to(R) - R.add_fingerprint(user) - qdel(src) - /obj/structure/inflatable/door //Based on mineral door code name = "inflatable door" density = 1 anchored = 1 opacity = 0 - icon = 'icons/obj/inflatable.dmi' icon_state = "door_closed" + undeploy_path = /obj/item/inflatable/door var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 @@ -168,7 +172,6 @@ if(isSwitchingStates) return if(ismob(user)) var/mob/M = user - if(world.time - user.last_bumped <= 60) return //NOTE do we really need that? if(M.client) if(iscarbon(M)) var/mob/living/carbon/C = M @@ -251,6 +254,7 @@ desc = "Contains inflatable walls and doors." icon_state = "inf_box" item_state = "syringe_kit" + w_class = 3 max_storage_space = 28 can_hold = list(/obj/item/inflatable) @@ -259,7 +263,7 @@ new /obj/item/inflatable/door(src) new /obj/item/inflatable/door(src) new /obj/item/inflatable/door(src) - new /obj/item/inflatable(src) - new /obj/item/inflatable(src) - new /obj/item/inflatable(src) - new /obj/item/inflatable(src) + new /obj/item/inflatable/wall(src) + new /obj/item/inflatable/wall(src) + new /obj/item/inflatable/wall(src) + new /obj/item/inflatable/wall(src) diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 2d591f4c36b..0e5c787f1d3 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -310,4 +310,98 @@ name = "mobility module" desc = "By retracting limbs and tucking in its head, a combat android can roll at high speeds." icon = 'icons/obj/decals.dmi' - icon_state = "shock" \ No newline at end of file + icon_state = "shock" + +/obj/item/weapon/inflatable_dispenser + name = "inflatables dispenser" + desc = "Small device which allows rapid deployment and removal of inflatables." + icon = 'icons/obj/storage.dmi' + icon_state = "inf_deployer" + w_class = 3 + + // By default stores up to 10 walls and 5 doors. May be changed. + var/stored_walls = 10 + var/stored_doors = 5 + var/max_walls = 10 + var/max_doors = 5 + var/mode = 0 // 0 - Walls 1 - Doors + +/obj/item/weapon/inflatable_dispenser/examine(var/mob/user) + if(!..(user)) + return + user << "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored." + user << "It is set to deploy [mode ? "doors" : "walls"]" + +/obj/item/weapon/inflatable_dispenser/attack_self() + mode = !mode + usr << "You set \the [src] to deploy [mode ? "doors" : "walls"]." + +/obj/item/weapon/inflatable_dispenser/afterattack(var/atom/A, var/mob/user) + ..(A, user) + if(!user) + return + if(!user.Adjacent(A)) + user << "You can't reach!" + return + if(istype(A, /turf)) + try_deploy_inflatable(A, user) + if(istype(A, /obj/item/inflatable) || istype(A, /obj/structure/inflatable)) + pick_up(A, user) + +/obj/item/weapon/inflatable_dispenser/proc/try_deploy_inflatable(var/turf/T, var/mob/living/user) + if(mode) // Door deployment + if(!stored_doors) + user << "\The [src] is out of doors!" + return + + if(T && istype(T)) + new /obj/structure/inflatable/door(T) + stored_doors-- + + else // Wall deployment + if(!stored_walls) + user << "\The [src] is out of walls!" + return + + if(T && istype(T)) + new /obj/structure/inflatable/wall(T) + stored_walls-- + + playsound(T, 'sound/items/zip.ogg', 75, 1) + user << "You deploy the inflatable [mode ? "door" : "wall"]!" + +/obj/item/weapon/inflatable_dispenser/proc/pick_up(var/obj/A, var/mob/living/user) + if(istype(A, /obj/structure/inflatable)) + if(istype(A, /obj/structure/inflatable/wall)) + if(stored_walls >= max_walls) + user << "\The [src] is full." + return + stored_walls++ + qdel(A) + else + if(stored_doors >= max_doors) + user << "\The [src] is full." + return + stored_doors++ + qdel(A) + playsound(loc, 'sound/machines/hiss.ogg', 75, 1) + visible_message("\The [user] deflates \the [A] with \the [src]!") + return + if(istype(A, /obj/item/inflatable)) + if(istype(A, /obj/item/inflatable/wall)) + if(stored_walls >= max_walls) + user << "\The [src] is full." + return + stored_walls++ + qdel(A) + else + if(stored_doors >= max_doors) + usr << "\The [src] is full!" + return + stored_doors++ + qdel(A) + visible_message("\The [user] picks up \the [A] with \the [src]!") + return + + user << "You fail to pick up \the [A] with \the [src]" + return diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 33699cf6df8..cea3ca4ca14 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -254,6 +254,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) src.modules += new /obj/item/weapon/reagent_containers/syringe(src) src.modules += new /obj/item/weapon/extinguisher/mini(src) + src.modules += new /obj/item/weapon/inflatable_dispenser(src) // Allows usage of inflatables. Since they are basically robotic alternative to EMTs, they should probably have them. src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("pacid", 250) src.emag.name = "Polyacid spray" @@ -321,6 +322,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/weapon/inflatable_dispenser(src) var/datum/matter_synth/metal = new /datum/matter_synth/metal() var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() @@ -362,6 +364,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/taperoll/engineering(src) src.modules += new /obj/item/weapon/gripper(src) src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/weapon/inflatable_dispenser(src) src.emag = new /obj/item/borg/stun(src) var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000) diff --git a/html/changelogs/Atlantis-PR-9274.yml b/html/changelogs/Atlantis-PR-9274.yml new file mode 100644 index 00000000000..9aba32e619c --- /dev/null +++ b/html/changelogs/Atlantis-PR-9274.yml @@ -0,0 +1,9 @@ +author: Atlantis + +delete-after: True + +changes: + - rscadd: "Added Inflatables Dispenser(ID), an item that allows rapid deployment, transport and removal of inflatables." + - rscadd: "Engineering, Construction and Crisis modules are now outfitted with ID." + - rscadd: "Three boxes in engineering have been replaced by three IDs." + - tweak: "w_classes of inflatables readjusted. Boxes and IDs can be carried in backpack now. Individual inflatables are small enough to fit in pocket." diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index e754acbc1d1..553916928bc 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index ff8893e80bd..30598909580 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -5696,6 +5696,7 @@ "cfB" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room) "cfC" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access = list(10)},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "cfD" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/construction) +"cfE" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -22},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/steel_reinforced,/obj/item/weapon/inflatable_dispenser{pixel_x = 2; pixel_y = 2},/obj/item/weapon/inflatable_dispenser,/obj/item/weapon/inflatable_dispenser{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "cfF" = (/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/engineering/engine_eva) "cfG" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/construction) "cfH" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/atmos_control) @@ -5902,7 +5903,6 @@ "cjL" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/construction) "cjM" = (/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel,/area/maintenance/atmos_control) "cjN" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/atmos_control) -"cjO" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -22},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3; pixel_y = 0},/obj/structure/table/steel_reinforced,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "cjP" = (/obj/machinery/suit_cycler/engineering,/obj/machinery/camera/network/engineering{c_tag = "Engineering EVA"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "cjQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/red,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "cjR" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/machinery/door/window/northright{name = "Atmospherics Hardsuits"; req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/engine_eva) @@ -7479,7 +7479,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejbPebOSbLWcfDcfGcejcfJcfHcfFcfKcfMcfLcfNcfNcgAcfOcfOcfPcfQcbFbYVbYUbYXcfRcaicfTcfWcfVcfZcfXcgabSUceLceLcaqcgbcaqbTFcbIcgccgdcgdcgdcgecbIcfYcggcgfcfYcghcgkcgicglcaEcgncdscgpcaIcgrcgqcgtbZycgxcgwbZycgybYfcgzcgCcgBcgDbYfccjccicgGcgFcgHcclcclcclccmcdLcgJcgIcgIcgKcgScgLcgOcgMciicgQcgTcgTcgTcgWcgYcgXchacgZchachbchccdScgNbPycgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafchdbKEbKEbKGbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaaaaacimcgUcgUcgUchfchgcejchichhchkchjchmchlchochnchqchpchschrchuchtchxchvchzchybSUbSUbSUbSUbSUbSUbSUbSUchCchAcaqchDcaqbTFcbIcbIctpctqctrcbIcbIchEchHchFcfYcaEcaEcaEcaEcaEcaIchIchJcaIchwchKchwbZychMchLbZybYfbYfbVibVicgBchNbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchPchOchOchQchSchRchUchTchXchVchYchYchYchYcidcicchYciechYcigcihcdSchZbPWchGcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEcijcikcijcgEcilcincilcgEciocipciocgEaaaaaacjlcgUcgUchfchfcircejbQecischWciuciwcivciycixciIciHciHciJciHcbFbYVciKbYXciLcjrciMciOciNciOciPciQciqciqciAciAciAciAbTFciGciRciSciSciVciTciXciWciZciYcjbcjacjdcjccjccjeciUcaIcaIcaIcjhcjgcjibZybZybZybZybQtbpvbVicjkcjjcjmbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjocjncjqcjpbSabPwcjvbVKcbMcjycjAcjycjycjBcjDcjCcjFcjEcjFcjGcjHcdScmpbQucjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEcijcjIcijcgEcilcjJcilcgEciocjKciocgEaaaaaacjlcgUchfchfchfcjLcmmcjNcjMchWcjOcjQcjPcjScjRcmocjTcjVcjUcjWcbFbYVcjXchzcjYckacjZckbckbckbckcckeckdckfcmRckhckgciAbTFciGckiciSckjcklckkcubckmckockncngckpckrckqcjccksciUbQDcnwcnuckvcfickwcnEcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckyckxckAckzckEcdOckBcdOckGckCckFckDckDckFckIckHckDckJckDckLckNcdSckPckOckQcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEcijcjIcijcgEcilcjJcilcgEciocjKciocgEaaaaaacjlcgUchfchfchfcjLcmmcjNcjMchWcfEcjQcjPcjScjRcmocjTcjVcjUcjWcbFbYVcjXchzcjYckacjZckbckbckbckcckeckdckfcmRckhckgciAbTFciGckiciSckjcklckkcubckmckockncngckpckrckqcjccksciUbQDcnwcnuckvcfickwcnEcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLckyckxckAckzckEcdOckBcdOckGckCckFckDckDckFckIckHckDckJckDckLckNcdSckPckOckQcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEckRckTckScgEckUckWckVcgEckYclackZcgEaaaaafcjlbQHcgUchfchfchfcejckMckKchWchWclcchWchWchWchWcldciHcleclfcbFclhclgcljcliclmclkclnclnclnclpclrclrcluciAcllclvclwbQSciGclyciSclzclBclAclDclCclFclEclHclGclJclIcjcclKciUcnVcnXclNclPclOclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIcfjbYfaaaaaaaaaaaaaaaaaaaaacdLclYclVcfnclZcdOcmbcmdcmccdScmecmfcmfcmfcmgcmicmhcmlcmkcmfcmfcmncdScmzcobcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgEclXcmDcmjcgEcmtcmDcEgcgEcmtcmDcEgcgEaaaaafcmQcgUcgUchfchfcmscejcmvcmucmxbRqcmAcmycmBcmBcmEcmCcmBcmFcIycbFcmIcmHcmKcmJcjrcmLcmLcmMclrcmNcmPcmOcmOciAcibcmScoybRRciGcmUciScmVcmXcmWciGcmYcnacmZciUcnbcndcnccjccneciUclLclMclNcnlcnfcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnhcnjcnicdScdScnHcntcnNcdScdScdScdScoucntcnNcdScdScnvcnocnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbOaafaafaafaaaaafcnxaafcnxaafcKAaafcpfaafcKAaafcpfaafaafaaacejcnqcnpchfchfcnrcnDcowcovcnycnmcnscnzcnzcnAcnzcnGcnBcoxcnGcnJcnFcnCcnIcnMcnOcnOcnOcnOcnLcnKcnRcnRcnRcgscgscgscgsbSgciGcnQcnScmVcnUcnTciGcmYcnacnWciUcnYcnZcnccoccoaciUclLclMclNcoecodcofclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcogcojcohcwlcokconcolcomcoocoqcopcdOaapaafaafaafaafaaaaaaaaabSYaaaaaaaaaaafcoscqscosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa