diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm
index 2731714e96e..ae417e2bea1 100644
--- a/_maps/RandomZLevels/centcomAway.dmm
+++ b/_maps/RandomZLevels/centcomAway.dmm
@@ -169,7 +169,7 @@
"dm" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 4; icon_state = "right"; name = "Security Desk"; req_access_txt = "103"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/awaymission/centcomAway/hangar)
"dn" = (/obj/structure/closet/crate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/awaymission/centcomAway/hangar)
"do" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/awaymission/centcomAway/hangar)
-"dp" = (/obj/structure/largecrate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/awaymission/centcomAway/hangar)
+"dp" = (/obj/structure/closet/crate/large,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/awaymission/centcomAway/hangar)
"dq" = (/obj/structure/dresser,/turf/simulated/floor/carpet,/area/awaymission/centcomAway/cafe)
"dr" = (/obj/structure/table/reinforced,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/awaymission/centcomAway/general)
"ds" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal/bin,/turf/simulated/floor/plating,/area/awaymission/centcomAway/cafe)
@@ -192,7 +192,7 @@
"dJ" = (/turf/simulated/floor/plasteel{icon_state = "blackcorner"; dir = 4},/area/awaymission/centcomAway/general)
"dK" = (/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/awaymission/centcomAway/general)
"dL" = (/obj/machinery/door/airlock/hatch{name = "Rest Room"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/awaymission/centcomAway/hangar)
-"dM" = (/obj/structure/largecrate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/awaymission/centcomAway/hangar)
+"dM" = (/obj/structure/closet/crate/large,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/awaymission/centcomAway/hangar)
"dN" = (/obj/structure/closet/crate,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/centcomAway/hangar)
"dO" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/awaymission/centcomAway/hangar)
"dP" = (/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/awaymission/centcomAway/general)
@@ -486,7 +486,7 @@
"jr" = (/obj/structure/table,/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/centcomAway/hangar)
"js" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/obj/item/device/assembly/flash/handheld,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/centcomAway/hangar)
"jt" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/centcomAway/hangar)
-"ju" = (/obj/structure/table,/obj/item/device/mmi/radio_enabled,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/centcomAway/hangar)
+"ju" = (/obj/structure/table,/obj/item/device/mmi,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/centcomAway/hangar)
"jv" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/awaymission/centcomAway/hangar)
"jw" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "101"},/turf/simulated/floor/plating,/area/awaymission/centcomAway/general)
"jx" = (/obj/machinery/door/window,/obj/machinery/door/window/northright,/turf/simulated/floor/plasteel{icon_state = "floor"},/area/awaymission/centcomAway/general)
diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm
index a26038404da..b282455054a 100644
--- a/_maps/RandomZLevels/spacebattle.dmm
+++ b/_maps/RandomZLevels/spacebattle.dmm
@@ -376,7 +376,7 @@
"hm" = (/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate7)
"hn" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/spacebattle/syndicate7)
"ho" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 8},/turf/space,/area/awaymission/spacebattle/syndicate7)
-"hp" = (/obj/structure/largecrate,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
+"hp" = (/obj/structure/closet/crate/large,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"hq" = (/obj/structure/closet/crate/secure/plasma,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"hr" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"hs" = (/obj/structure/rack,/obj/item/clothing/suit/space/hardsuit,/obj/item/clothing/head/helmet/space/hardsuit,/turf/simulated/floor/plasteel,/area/awaymission/spacebattle/cruiser)
@@ -385,7 +385,7 @@
"hv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/awaymission/spacebattle/cruiser)
"hw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/spacebattle/syndicate7)
"hx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/awaymission/spacebattle/syndicate7)
-"hy" = (/obj/structure/largecrate,/mob/living/simple_animal/pet/dog/corgi/puppy,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
+"hy" = (/obj/structure/closet/crate/large,/mob/living/simple_animal/pet/dog/corgi/puppy,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"hz" = (/obj/structure/closet/crate,/obj/item/weapon/paint/anycolor,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"hA" = (/obj/structure/closet/crate,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
"hB" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plating,/area/awaymission/spacebattle/cruiser)
diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm
index 91d013263d7..36d5dc8dad5 100644
--- a/_maps/RandomZLevels/wildwest.dmm
+++ b/_maps/RandomZLevels/wildwest.dmm
@@ -54,7 +54,7 @@
"be" = (/obj/item/ammo_box/c10mm,/turf/simulated/floor/plating/ironsand{icon_state = "ironsand1"},/area/awaymission/wwmines)
"bf" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plating/ironsand{icon_state = "ironsand1"},/area/awaymission/wwmines)
"bg" = (/turf/simulated/wall/mineral/sandstone,/area/space)
-"bh" = (/obj/structure/largecrate,/turf/simulated/floor/plating,/area/awaymission/wwrefine)
+"bh" = (/obj/structure/closet/crate/large,/turf/simulated/floor/plating,/area/awaymission/wwrefine)
"bi" = (/obj/effect/landmark/corpse/miner/rig,/obj/effect/mine/sound/bwoink,/turf/simulated/floor/plating/ironsand{icon_state = "ironsand1"},/area/awaymission/wwmines)
"bj" = (/turf/simulated/floor/wood,/area/awaymission/wwmines)
"bk" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/wood,/area/awaymission/wwmines)
@@ -181,7 +181,7 @@
"dB" = (/obj/structure/toilet,/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/wwgov)
"dC" = (/turf/simulated/floor/plating/ironsand{icon_state = "ironsand9"},/area/awaymission/wwgov)
"dD" = (/obj/structure/mineral_door/wood{icon_state = "wood"},/turf/simulated/floor/plating/ironsand{icon_state = "ironsand1"},/area/awaymission/wwgov)
-"dE" = (/obj/structure/largecrate,/turf/simulated/floor/wood,/area/awaymission/wwmines)
+"dE" = (/obj/structure/closet/crate/large,/turf/simulated/floor/wood,/area/awaymission/wwmines)
"dF" = (/turf/simulated/floor/plating/ironsand{icon_state = "ironsand7"},/area/awaymission/wwgov)
"dG" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/awaymission/wwmines)
"dH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor/wood,/area/awaymission/wwmines)
diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm
index 654f570eaf9..0f8a0549a9f 100644
--- a/_maps/map_files/BirdStation/BirdStation.dmm
+++ b/_maps/map_files/BirdStation/BirdStation.dmm
@@ -2374,7 +2374,7 @@
"aTJ" = (/obj/structure/bed,/obj/item/clothing/suit/apron/chef,/obj/item/clothing/suit/apron/chef,/turf/simulated/floor/plasteel/white,/area/maintenance/asmaint2)
"aTK" = (/turf/simulated/wall,/area/hallway/primary/aft{name = "\improper South Hallway"})
"aTL" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/crew_quarters/sleep)
-"aTM" = (/obj/structure/closet/crate/hydroponics/prespawned,/obj/item/weapon/shovel/spade,/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/wirecutters,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/twohanded/required/chainsaw,/turf/simulated/floor/plasteel/whitegreen/side{icon_state = "whitegreen"; dir = 9},/area/hydroponics)
+"aTM" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/wirecutters,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/twohanded/required/chainsaw,/turf/simulated/floor/plasteel/whitegreen/side{icon_state = "whitegreen"; dir = 9},/area/hydroponics)
"aTN" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"aTO" = (/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
"aTP" = (/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab)
@@ -2653,7 +2653,7 @@
"aZc" = (/obj/machinery/biogenerator,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
"aZd" = (/obj/machinery/seed_extractor,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
"aZe" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
-"aZf" = (/obj/structure/closet/crate/secure/hydrosec{req_access_txt = "35"},/obj/item/seeds/kudzuseed{potency = 0; production = 8},/obj/item/seeds/chilighost,/obj/item/seeds/deathberryseed,/obj/item/device/gps,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
+"aZf" = (/obj/structure/closet/crate/secure/hydroponics{req_access_txt = "35"},/obj/item/seeds/kudzuseed{potency = 0; production = 8},/obj/item/seeds/chilighost,/obj/item/seeds/deathberryseed,/obj/item/device/gps,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"})
"aZg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/camera/autoname{icon_state = "camera"; dir = 5},/turf/simulated/floor/wood,/area/security/brig)
"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera/detective,/turf/simulated/floor/wood,/area/security/brig)
"aZi" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/security/brig)
diff --git a/_maps/map_files/MiniStation/cargopacks.dm b/_maps/map_files/MiniStation/cargopacks.dm
new file mode 100644
index 00000000000..a6a1db75df3
--- /dev/null
+++ b/_maps/map_files/MiniStation/cargopacks.dm
@@ -0,0 +1,37 @@
+/datum/supply_pack/engineering/oxygen
+ name = "Oxygen Canister"
+ cost = 15
+ contains = list(/obj/machinery/portable_atmospherics/canister/oxygen)
+ crate_name = "oxygen canister crate"
+ crate_type = /obj/structure/closet/crate/large
+
+/datum/supply_pack/engineering/toxins
+ name = "Plasma Canister"
+ cost = 30
+ contains = list(/obj/machinery/portable_atmospherics/canister/toxins)
+ crate_name = "plasma canister crate"
+ crate_type = /obj/structure/closet/crate/large
+
+/datum/supply_pack/engineering/nitrogen
+ name = "Nitrogen Canister"
+ cost = 20
+ contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen)
+ crate_name = "nitrogen canister crate"
+ crate_type = /obj/structure/closet/crate/large
+
+/datum/supply_pack/engineering/carbon_dio
+ name = "Carbon Dioxide Canister"
+ cost = 35
+ contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
+ crate_name = "carbon dioxide canister crate"
+ crate_type = /obj/structure/closet/crate/large
+
+/obj/machinery/hydroponics/constructable/unattached
+ anchored = 0
+
+/datum/supply_pack/organic/hydroponics/hydro_tray
+ name = "Hydroponics Tray Kit"
+ contains = list(/obj/machinery/hydroponics/constructable/unattached)
+ cost = 10
+ crate_name = "hydroponics kit"
+ crate_type = /obj/structure/closet/crate/large
\ No newline at end of file
diff --git a/_maps/map_files/MiniStation/supplypacks.dm b/_maps/map_files/MiniStation/supplypacks.dm
deleted file mode 100644
index 330322a0d6f..00000000000
--- a/_maps/map_files/MiniStation/supplypacks.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/datum/supply_packs/engineering/oxygen
- name = "Oxygen Canister"
- contains = list(/obj/machinery/portable_atmospherics/canister/oxygen)
- cost = 15
- containertype = /obj/structure/largecrate
- containername = "oxygen canister crate"
-
-/datum/supply_packs/engineering/toxins
- name = "Toxins Canister"
- contains = list(/obj/machinery/portable_atmospherics/canister/toxins)
- cost = 30
- containertype = /obj/structure/largecrate
- containername = "toxins canister crate"
-
-/datum/supply_packs/engineering/nitrogen
- name = "Nitrogen Canister"
- contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen)
- cost = 20
- containertype = /obj/structure/largecrate
- containername = "nitrogen canister crate"
-
-/datum/supply_packs/engineering/carbon_dio
- name = "Carbon Dioxide Canister"
- contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
- cost = 35
- containertype = /obj/structure/largecrate
- containername = "carbon dioxide canister crate"
-
-
-/obj/machinery/hydroponics/constructable/unattached
- anchored = 0
-
-/datum/supply_packs/organic/hydroponics/hydro_tray
- name = "Hydroponics Tray Kit"
- contains = list(/obj/machinery/hydroponics/constructable/unattached)
- cost = 10
- containertype = /obj/structure/largecrate
- containername = "hydroponics kit"
\ No newline at end of file
diff --git a/_maps/map_files/generic/z6.dmm b/_maps/map_files/generic/z6.dmm
index c6861e94afd..7563f9b83c9 100644
--- a/_maps/map_files/generic/z6.dmm
+++ b/_maps/map_files/generic/z6.dmm
@@ -55,7 +55,7 @@
"bc" = (/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft)
"bd" = (/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft)
"be" = (/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft)
-"bf" = (/obj/structure/largecrate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/awaymission/BMPship/Aft)
+"bf" = (/obj/structure/closet/crate/large,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/awaymission/BMPship/Aft)
"bg" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Fore)
"bh" = (/obj/structure/table/wood,/obj/item/stack/spacecash/c500,/obj/item/stack/spacecash/c100,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor/wood,/area/awaymission/BMPship/Fore)
"bi" = (/obj/structure/bed,/obj/item/weapon/bedsheet/yellow,/turf/simulated/floor/wood,/area/awaymission/BMPship/Fore)
@@ -112,7 +112,7 @@
"ch" = (/turf/simulated/wall/shuttle{icon_state = "swall13"},/area/awaymission/BMPship/Midship)
"ci" = (/turf/simulated/wall/shuttle{icon_state = "swall15"},/area/awaymission/BMPship/Aft)
"cj" = (/obj/machinery/door/poddoor/shutters{id = "packerMed"},/turf/simulated/floor/plating/airless,/area/awaymission/BMPship/Aft)
-"ck" = (/obj/structure/largecrate,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/awaymission/BMPship/Aft)
+"ck" = (/obj/structure/closet/crate/large,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/awaymission/BMPship/Aft)
"cl" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/BMPship/Aft)
"cm" = (/obj/machinery/light/small,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/BMPship/Aft)
"cn" = (/obj/structure/kitchenspike,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/BMPship/Aft)
@@ -433,8 +433,8 @@
"iq" = (/turf/simulated/floor/plating,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Fore)
"ir" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore)
"is" = (/turf/simulated/mineral/diamond,/area/awaymission)
-"it" = (/turf/simulated/mineral/clown,/area/awaymission)
-"iu" = (/turf/simulated/mineral,/area/mine/unexplored)
+"it" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/awaymission)
+"iu" = (/turf/simulated/mineral,/area/awaymission)
"iv" = (/turf/simulated/wall/r_wall,/area/awaymission/listeningpost)
"iw" = (/turf/simulated/floor/plating,/area/awaymission/listeningpost)
"ix" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/turf/simulated/floor/plating,/area/awaymission/listeningpost)
@@ -451,27 +451,26 @@
"iI" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iJ" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/mask/gas,/obj/item/clothing/head/helmet/space/syndicate,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iK" = (/obj/machinery/door/airlock,/obj/structure/safe/floor,/obj/item/weapon/paper{info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilised your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear it's ugly head again. -Donk Co. Operative #451"; name = "odd report"},/obj/item/weapon/gun/projectile/automatic/pistol,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
-"iL" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/mineral,/area/mine/unexplored)
-"iM" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/mineral,/area/mine/unexplored)
+"iL" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/mineral,/area/awaymission)
+"iM" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/mineral,/area/awaymission)
"iN" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
"iO" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iP" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iQ" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
-"iR" = (/obj/structure/disposalpipe/segment,/turf/simulated/mineral,/area/mine/unexplored)
+"iR" = (/obj/structure/disposalpipe/segment,/turf/simulated/mineral,/area/awaymission)
"iS" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iT" = (/obj/structure/closet,/obj/item/clothing/gloves/boxing,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iU" = (/obj/structure/filingcabinet,/obj/item/weapon/paper{info = "A good start to the operation: intercepted Nanotrasen military communications. A convoy is scheduled to transfer nuclear warheads to a new military base. This is as good a chance as any to get our hands on some heavy weaponry, I suggest we take it."; name = "april report"},/obj/item/weapon/paper{info = "Nothing of real interest to report this month. I have intercepted faint transmissions from what appears to be some sort of pirate radio station. They do not appear to be relevant to my assignment."; name = "may report"},/obj/item/weapon/paper{info = "Nanotrasen communications have been noticably less frequent recently. The pirate radio station I found last month has been transmitting pro-Nanotrasen propaganda. I will continue to monitor it."; name = "june report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "july report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "august report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "september report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "october report"},/obj/item/weapon/paper{info = "1 x Stechtkin pistol - $600
1 x silencer - $200
shipping charge - $4360
total - $5160"; name = "receipt"},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iV" = (/obj/structure/table,/obj/item/weapon/paper{info = "Mission Details: You have been assigned to a newly constructed listening post constructed within an asteroid in Nanotrasen space to monitor their plasma mining operations. Accurate intel is crucial to the success of our operatives onboard, do not fail us."; name = "mission briefing"},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iW" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"iX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/listeningpost)
-"iY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/mineral,/area/mine/unexplored)
+"iY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/mineral,/area/awaymission)
"iZ" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost)
"ja" = (/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/listeningpost)
"jb" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/listeningpost)
"jc" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/awaymission/listeningpost)
-"jd" = (/turf/simulated/mineral/clown,/area/mine/unexplored)
-"je" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/mine/explored)
-"jf" = (/turf/simulated/floor/plasteel/airless{icon_state = "gcircuit"},/area/mine/explored)
+"jd" = (/turf/simulated/mineral/clown,/area/awaymission)
+"je" = (/turf/simulated/floor/plasteel/airless{icon_state = "gcircuit"},/area/awaymission)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -566,8 +565,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacacgQgQisgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacacgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacacgQgQgQgQgQgQitgQgQgQgQgQgQgQgQgQgQgQacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacacgQgQgQitgQgQitgQgQgQgQgQgQgQgQgQacacacacgQgQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacacgQgQgQgQgQgQjdgQgQgQgQgQgQgQgQgQgQgQacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQgQacacacgQgQgQjdgQgQjdgQgQgQgQgQgQgQgQgQacacacacgQgQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQgQgQacacacacgQgQgQgQgQgQgQgQgQgQgQgQgQgQgQacacgQgQgQgQgQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQgQacacacacacacgQgQgQgQgQgQgQgQgQgQgQgQacacacacgQgQgQgQgQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacgQgQgQgQgQgQgQgQacacacacaaaaaagQgQgQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -621,10 +620,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviwixiviuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviviviyizivivivivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviviAiBiCiCiDiwiwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviFiGiHiCiCiDiwiwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuaaiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviviIiBiCiCivivivivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiEiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviCiCiCiJiviuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviviviviKiziziziviuiLiMiMiNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviFiGiHiCiCiDiwiwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuaaaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviviIiBiCiCivivivivaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuacaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviCiCiCiJiviuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviviviviKiziziziviuiLiMiMiNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviOiPiziCiCiCiQiviuiRiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviCiCiyiCiCiCiSiviuiRiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiviTiUiziViCiWiXiXiMiYiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -639,12 +638,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiEiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuiEiEaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdiuiujdiuiuiuiEiEiEaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiujdiuiuiuiuiuiuiuiuiuiuiuiuiEaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuiuiuiuiuiEaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuiuiuiuiuiEaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuacacaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuacacaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdiuiujdiuiuiuacacacaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiujdiuiuiuiuiuiuiuiuiuiuiuiuacaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuiuiuiuiuacaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuiuiuiuiuacaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdiuiuiuiuiuiuaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -653,24 +652,24 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujdjdiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiEiEiEiEiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEaaaaaaaaiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiEiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuacacacacaciuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuacaaaaaaaaiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuacaciuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujejejejejejejeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEjfjfjfjfjfjeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujfjfjfjfjfjeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujfjfjfjfjeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiuiuiuiuiuiuiuiuiuiuiuiuiuiujfjfjfjfjfjeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiEiuiuiuiuiuiuiuiuiuiuiuiuiuiEjfjfjfjfjeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaiEiuiuiuiuiuiuiuiuiuiuiuiuiEiEjejejejejeiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuitititititititiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuacjejejejejeitiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujejejejejeitiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiujejejejeitiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiuiuiuiuiuiuiuiuiuiuiuiuiuiujejejejejeitiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiEiEiuiuiuiuiuiuiuiuiuiuiuiuiuacjejejejeitiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaiEiuiuiuiuiuiuiuiuiuiuiuiuacacitititititiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiEiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuaaiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuaaaaiEiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuacaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuaaaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuaaaaaciuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/ministation.dm b/_maps/ministation.dm
index eb39ecc4ed0..70a1a381242 100644
--- a/_maps/ministation.dm
+++ b/_maps/ministation.dm
@@ -67,7 +67,7 @@ Changes to the uplinks were made to discourage murderboning, the rest is the sam
#if !defined(MAP_OVERRIDE_FILES)
#define MAP_OVERRIDE_FILES
#include "map_files\MiniStation\misc.dm"
- #include "map_files\MiniStation\supplypacks.dm"
+ #include "map_files\MiniStation\cargopacks.dm"
#include "map_files\MiniStation\telecomms.dm"
#include "map_files\MiniStation\uplink_item.dm"
#include "map_files\MiniStation\job\jobs.dm"
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 29d58d3d448..9e94460dcbd 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -120,9 +120,11 @@
//some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 //Used to trigger removal from a processing list
-#define MANIFEST_ERROR_NAME 1
-#define MANIFEST_ERROR_COUNT 2
-#define MANIFEST_ERROR_ITEM 4
+// Cargo-related stuff.
+#define MANIFEST_ERROR_CHANCE 5
+#define MANIFEST_ERROR_NAME 1
+#define MANIFEST_ERROR_CONTENTS 2
+#define MANIFEST_ERROR_ITEM 4
#define TRANSITIONEDGE 7 //Distance from edge to move to another z-level
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index ddaf73e00ea..ac392a72090 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -420,3 +420,8 @@ var/list/binary = list("0","1")
t = replacetext(t, "\[/list\]", "")
return t
+
+/proc/char_split(t)
+ . = list()
+ for(var/x in 1 to length(t))
+ . += copytext(t,x,x+1)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 5dfc704757e..f3c3e4ae279 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1213,3 +1213,37 @@ proc/shift_proximity(atom/checker, atom/A, range, atom/B, newrange)
var/turf/F = E
F.proximity_checkers |= checker
return 1
+
+/proc/get_closest_atom(type, list, source)
+ var/closest_atom
+ var/closest_distance
+ for(var/A in list)
+ if(!istype(A, type))
+ continue
+ var/distance = get_dist(source, A)
+ if(!closest_distance)
+ closest_distance = distance
+ closest_atom = A
+ else
+ if(closest_distance > distance)
+ closest_distance = distance
+ closest_atom = A
+ return closest_atom
+
+proc/pick_closest_path(value)
+ var/list/matches = get_fancy_list_of_types()
+ if (!isnull(value) && value!="")
+ matches = filter_fancy_list(matches, value)
+
+ if(matches.len==0)
+ return
+
+ var/chosen
+ if(matches.len==1)
+ chosen = matches[1]
+ else
+ chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches
+ if(!chosen)
+ return
+ chosen = matches[chosen]
+ return chosen
\ No newline at end of file
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 719f7718977..e354fbbe2d4 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -10,9 +10,9 @@
Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner.
*/
/mob/living/silicon/ai/DblClickOn(var/atom/A, params)
- if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
- build_click(src, client.buildmode, params, A)
- return
+ if(client.click_intercept)
+ if(call(client.click_intercept, "ClickOn")(src, params, A))
+ return
if(control_disabled || stat) return
@@ -27,9 +27,9 @@
return
next_click = world.time + 1
- if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
- build_click(src, client.buildmode, params, A)
- return
+ if(client.click_intercept)
+ if(call(client.click_intercept, "ClickOn")(src, params, A))
+ return
if(control_disabled || stat)
return
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index e8297662c85..d500428a29f 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -52,9 +52,10 @@
if(world.time <= next_click)
return
next_click = world.time + 1
- if(client.buildmode)
- build_click(src, client.buildmode, params, A)
- return
+
+ if(client.click_intercept)
+ if(call(client.click_intercept, "ClickOn")(src, params, A))
+ return
var/list/modifiers = params2list(params)
if(modifiers["shift"] && modifiers["ctrl"])
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 4cb6a641ba8..3d32ee284cb 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -11,9 +11,9 @@
return
next_click = world.time + 1
- if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
- build_click(src, client.buildmode, params, A)
- return
+ if(client.click_intercept)
+ if(call(client.click_intercept,"ClickOn")(src,params,A))
+ return
if(stat || lockcharge || weakened || stunned || paralysis)
return
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index 3bf0600e96c..84a49083a9d 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -30,9 +30,8 @@
return
Remove(owner)
owner = T
- owner.actions.Add(src)
- owner.update_action_buttons()
- return
+ T.actions += src
+ T.update_action_buttons()
/datum/action/proc/Remove(mob/living/T)
if(button)
@@ -40,10 +39,9 @@
T.client.screen -= button
qdel(button)
button = null
- T.actions.Remove(src)
+ T.actions -= src
T.update_action_buttons()
owner = null
- return
/datum/action/proc/Trigger()
if(!Checks())
@@ -86,7 +84,7 @@
current_button.overlays.Cut()
if(button_icon && button_icon_state)
var/image/img
- img = image(button_icon,current_button,button_icon_state)
+ img = image(button_icon, current_button, button_icon_state)
img.pixel_x = 0
img.pixel_y = 0
current_button.overlays += img
@@ -151,7 +149,7 @@
/obj/screen/movable/action_button/hide_toggle/UpdateIcon()
overlays.Cut()
- var/image/img = image(icon,src,hidden?"show":"hide")
+ var/image/img = image(icon, src, hidden ? "show" : "hide")
overlays += img
return
@@ -171,11 +169,11 @@
#define AB_MAX_COLUMNS 10
/datum/hud/proc/ButtonNumberToScreenCoords(number) // TODO : Make this zero-indexed for readabilty
- var/row = round((number-1)/AB_MAX_COLUMNS)
+ var/row = round((number - 1)/AB_MAX_COLUMNS)
var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1
var/coord_col = "+[col-1]"
- var/coord_col_offset = 4+2*col
+ var/coord_col_offset = 4 + 2 * col
var/coord_row = "[row ? -row : "+0"]"
@@ -289,7 +287,7 @@
/datum/action/innate/proc/Deactivate()
return
-//Preset for action that call specific procs (consider innate)
+//Preset for action that call specific procs (consider innate).
/datum/action/generic
check_flags = 0
var/procname
@@ -298,7 +296,7 @@
if(!..())
return 0
if(target && procname)
- call(target,procname)(usr)
+ call(target, procname)(usr)
return 1
@@ -312,12 +310,12 @@
/datum/action/innate/scan_mode/Activate()
active = 1
owner.research_scanner = 1
- owner << " Research analyzer is now active."
+ owner << "Research analyzer is now active."
/datum/action/innate/scan_mode/Deactivate()
active = 0
owner.research_scanner = 0
- owner << " Research analyzer deactivated."
+ owner << "Research analyzer deactivated."
/datum/action/innate/scan_mode/Grant(mob/living/T)
..(T)
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index 411f562888b..ba3c1c05783 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -1,7 +1,8 @@
/mob/dead/observer/DblClickOn(var/atom/A, var/params)
- if(client.buildmode)
- build_click(src, client.buildmode, params, A)
- return
+ if(client.click_intercept)
+ if(call(client.click_intercept,"ClickOn")(src,params,A))
+ return
+
if(can_reenter_corpse && mind && mind.current)
if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it
reenter_corpse() // (cloning scanner, body bag, closet, mech, etc)
@@ -16,9 +17,10 @@
loc = get_turf(A)
/mob/dead/observer/ClickOn(var/atom/A, var/params)
- if(client.buildmode)
- build_click(src, client.buildmode, params, A)
- return
+
+ if(client.click_intercept)
+ if(call(client.click_intercept,"ClickOn")(src,params,A))
+ return
var/list/modifiers = params2list(params)
if(modifiers["middle"])
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 6800c95e2b4..75ded6c78cd 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -21,8 +21,10 @@ var/global/datum/controller/master/Master = new()
var/iteration = 0
// The cost (in deciseconds) of the MC loop.
var/cost = 0
+#if DM_VERSION < 510
// The old fps when we slow it down to prevent lag.
var/old_fps
+#endif
// A list of subsystems to process().
var/list/subsystems = list()
// The cost of running the subsystems (in deciseconds).
@@ -39,7 +41,6 @@ var/global/datum/controller/master/Master = new()
else
init_subtypes(/datum/subsystem, subsystems)
Master = src
- processing_interval = calculate_gcd()
/datum/controller/master/Destroy()
..()
@@ -109,7 +110,9 @@ var/global/datum/controller/master/Master = new()
SS.next_fire = world.time + rand(0, SS.wait) // Stagger subsystems.
// Used to smooth out costs to try and avoid oscillation.
+#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current))
#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current))
+#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current))
/datum/controller/master/process()
if(!Failsafe)
new/datum/controller/failsafe() // (re)Start the failsafe.
@@ -129,29 +132,44 @@ var/global/datum/controller/master/Master = new()
var/ran_subsystems = 0
for(var/datum/subsystem/SS in subsystems)
+#if DM_VERSION >= 510
+ if (world.tick_usage > 80)
+#else
if(world.cpu >= 100)
- //if world.cpu gets above 120,
- //byond will pause most client updates for (about) 1.6 seconds.
- //(1.6 seconds worth of ticks)
- //We just stop running subsystems to avoid that.
+#endif
break
+
if(SS.can_fire > 0)
if(SS.next_fire <= world.time && SS.last_fire + (SS.wait * 0.75) <= world.time) // Check if it's time.
+#if DM_VERSION >= 510
+ if (world.tick_usage + SS.tick_usage > 80 && SS.last_fire + (SS.wait*1.25) > world.time)
+ continue
+#endif
ran_subsystems = 1
timer = world.timeofday
last_type_processed = SS.type
SS.last_fire = world.time
+#if DM_VERSION >= 510
+ var/tick_usage = world.tick_usage
+#endif
SS.fire() // Fire the subsystem and record the cost.
- SS.cost = MC_AVERAGE(SS.cost, world.timeofday - timer)
+#if DM_VERSION >= 510
+ var/newusage = max(world.tick_usage - tick_usage, 0)
+ if (newusage < SS.tick_usage)
+ SS.tick_usage = MC_AVERAGE_SLOW(SS.tick_usage,world.tick_usage - tick_usage)
+ else
+ SS.tick_usage = MC_AVERAGE_FAST(SS.tick_usage,world.tick_usage - tick_usage)
+#endif
+ SS.cost = max(MC_AVERAGE(SS.cost, world.timeofday - timer), 0)
if(SS.dynamic_wait) // Adjust wait depending on lag.
var/oldwait = SS.wait
var/global_delta = (subsystem_cost - (SS.cost / (SS.wait / 10))) - 1
var/newwait = (SS.cost - SS.dwait_buffer + global_delta) * SS.dwait_delta
newwait = newwait * (world.cpu / 100 + 1)
- newwait = MC_AVERAGE(oldwait, newwait)
+ //smooth out wait changes, but only if going down
+ if(newwait < oldwait)
+ newwait = MC_AVERAGE(oldwait, newwait)
SS.wait = Clamp(newwait, SS.dwait_lower, SS.dwait_upper)
- if(oldwait != SS.wait)
- processing_interval = calculate_gcd()
SS.next_fire = world.time + SS.wait
else
SS.next_fire += SS.wait
@@ -161,7 +179,7 @@ var/global/datum/controller/master/Master = new()
break
sleep(0)
- cost = MC_AVERAGE(cost, world.timeofday - start_time)
+ cost = max(MC_AVERAGE(cost, world.timeofday - start_time), 0)
if(ran_subsystems)
var/oldcost = subsystem_cost
var/newcost = 0
@@ -172,13 +190,10 @@ var/global/datum/controller/master/Master = new()
subsystem_cost = MC_AVERAGE(oldcost, newcost)
var/extrasleep = 0
- // If we caused BYOND to miss a tick, sleep a bit extra...
- if(startingtick < world.time || start_time + 1 < world.timeofday)
- extrasleep += world.tick_lag * 2
// If we are loading the server too much, sleep a bit extra...
if(world.cpu >= 75)
extrasleep += (extrasleep + processing_interval) * ((world.cpu-50)/10)
-
+#if DM_VERSION < 510
if(world.cpu >= 100)
if(!old_fps)
old_fps = world.fps
@@ -187,33 +202,16 @@ var/global/datum/controller/master/Master = new()
else if(old_fps && world.cpu < 50)
world.fps = old_fps
old_fps = null
-
+#endif
sleep(processing_interval + extrasleep)
else
sleep(50)
#undef MC_AVERAGE
-// Determine the GCD of subsystem waits: the longest the MC can wait while still staying on schedule.
-/datum/controller/master/proc/calculate_gcd()
- var/GCD
- // The shortest possible fire rate is the lowest of two ticks or 1 decisecond.
- var/minimumInterval = min(world.tick_lag * 2, 1)
-
- // Loop over each subsystem and determine the GCD based on its wait value.
- for(var/datum/subsystem/SS in subsystems)
- if(SS.wait)
- GCD = Gcd(round(SS.wait * 10), GCD)
- GCD = round(GCD)
- // If the GCD is less than the minimum, just use the minimum.
- if(GCD < minimumInterval * 10)
- GCD = minimumInterval * 10
- // Return GCD.
- return GCD / 10
-
/datum/controller/master/proc/stat_entry()
if(!statclick)
statclick = new/obj/effect/statclick/debug("Initializing...", src)
- stat("Master Controller:", statclick.update("[round(Master.cost, 0.001)]ds (Interval: [Master.processing_interval] | Iteration:[Master.iteration])"))
+ stat("Master Controller:", statclick.update("[round(Master.cost, 0.01)]ds (Interval: [Master.processing_interval] | Iteration:[Master.iteration])"))
diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm
index 90ba95687b4..2edfa916c59 100644
--- a/code/controllers/subsystem.dm
+++ b/code/controllers/subsystem.dm
@@ -24,6 +24,9 @@
var/last_fire = 0 //last world.time we called fire()
var/next_fire = 0 //scheduled world.time for next fire()
var/cost = 0 //average time to execute
+#if DM_VERSION >= 510
+ var/tick_usage = 0 //average tick usage
+#endif
var/times_fired = 0 //number of times we have called fire()
// The object used for the clickable stat() button.
@@ -59,9 +62,13 @@
dwait = "DWait:[round(wait,0.1)]ds "
if(can_fire)
- msg = "[round(cost,0.001)]ds\t[dwait][msg]"
+#if DM_VERSION >= 510
+ msg = "[round(cost,0.01)]ds|[round(tick_usage,1)]%\t[dwait][msg]"
+#else
+ msg = "[round(cost,0.01)]ds\t[dwait][msg]"
+#endif
else
- msg = "OFFLINE"
+ msg = "OFFLINE\t[msg]"
stat(name, statclick.update(msg))
@@ -79,4 +86,4 @@
/datum/subsystem/on_varedit(edited_var)
if (edited_var == "can_fire" && can_fire)
next_fire = world.time + wait
-
+
diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index 108497d7255..04c111d3198 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -22,7 +22,8 @@ var/datum/subsystem/garbage_collector/SSgarbage
var/list/queue = list() // list of refID's of things that should be garbage collected
// refID's are associated with the time at which they time out and need to be manually del()
// we do this so we aren't constantly locating them and preventing them from being gc'd
-
+
+ var/list/tobequeued = list() //We store the references of things to be added to the queue seperately so we can spread out GC overhead over a few ticks
var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
// the types are stored as strings
@@ -52,12 +53,23 @@ var/datum/subsystem/garbage_collector/SSgarbage
..(msg)
/datum/subsystem/garbage_collector/fire()
+ var/time_to_stop = world.timeofday + max_run_time
+ HandleToBeQueued(time_to_stop)
+ HandleQueue(time_to_stop)
+
+//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
+//Don't attempt to optimize, not worth the effort.
+/datum/subsystem/garbage_collector/proc/HandleToBeQueued(time_to_stop)
+ while(tobequeued.len && world.timeofday < time_to_stop)
+ var/ref = tobequeued[1]
+ Queue(ref)
+ tobequeued.Cut(1, 2)
+
+/datum/subsystem/garbage_collector/proc/HandleQueue(time_to_stop)
delslasttick = 0
gcedlasttick = 0
- var/time_to_stop = world.timeofday + max_run_time
var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del()
-
-
+
while(queue.len && world.timeofday < time_to_stop)
var/refID = queue[1]
if (!refID)
@@ -85,15 +97,24 @@ var/datum/subsystem/garbage_collector/SSgarbage
++totalgcs
queue.Cut(1, 2)
+/datum/subsystem/garbage_collector/proc/QueueForQueuing(datum/A)
+ if (istype(A) && isnull(A.gc_destroyed))
+ tobequeued += A
-/datum/subsystem/garbage_collector/proc/Queue(datum/A, harddel = 0)
+/datum/subsystem/garbage_collector/proc/Queue(datum/A)
if (!istype(A) || !isnull(A.gc_destroyed))
- return
- A.gc_destroyed = world.time
- queue -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
- queue["\ref[A]"] = world.time
+ return
+ var/gctime = world.time
+ var/refid = "\ref[A]"
+
+ A.gc_destroyed = gctime
+
+ if (queue[refid])
+ queue -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
+
+ queue[refid] = gctime
-/datum/subsystem/garbage_collector/proc/HardQueue(datum/A, harddel = 0)
+/datum/subsystem/garbage_collector/proc/HardQueue(datum/A)
if (!istype(A) || !isnull(A.gc_destroyed))
return
A.gc_destroyed = world.time
@@ -117,7 +138,7 @@ var/datum/subsystem/garbage_collector/SSgarbage
return
switch(hint)
if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion.
- SSgarbage.Queue(D)
+ SSgarbage.QueueForQueuing(D)
if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory.
return
if (QDEL_HINT_IWILLGC) //functionally the same as the above. qdel should assume the object will gc on its own, and not check it.
@@ -129,7 +150,7 @@ var/datum/subsystem/garbage_collector/SSgarbage
if (QDEL_HINT_PUTINPOOL) //qdel will put this object in the pool.
PlaceInPool(D, 0)
if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion.
- SSgarbage.Queue(D)
+ SSgarbage.QueueForQueuing(D)
#ifdef TESTING
A.find_references()
#endif
@@ -137,7 +158,7 @@ var/datum/subsystem/garbage_collector/SSgarbage
if(!("[D.type]" in SSgarbage.noqdelhint))
SSgarbage.noqdelhint += "[D.type]"
testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
- SSgarbage.Queue(D)
+ SSgarbage.QueueForQueuing(D)
// Returns 1 if the object has been queued for deletion.
/proc/qdeleted(datum/D)
@@ -145,6 +166,8 @@ var/datum/subsystem/garbage_collector/SSgarbage
return FALSE
if(D.gc_destroyed)
return TRUE
+ if(SSgarbage && SSgarbage.tobequeued && SSgarbage.tobequeued.len && D in SSgarbage.tobequeued)
+ return TRUE
return FALSE
// Default implementation of clean-up code.
@@ -249,4 +272,4 @@ var/datum/subsystem/garbage_collector/SSgarbage
dat += "[path] - [tmplist[path]] times
"
usr << browse(dat, "window=qdeletedlog")
-#endif
\ No newline at end of file
+#endif
diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm
index 9736345ad41..4442bee8933 100644
--- a/code/controllers/subsystem/shuttles.dm
+++ b/code/controllers/subsystem/shuttles.dm
@@ -22,7 +22,7 @@ var/datum/subsystem/shuttle/SSshuttle
var/ordernum = 1 //order number given to next order
var/points = 50 //number of trade-points we have
var/points_per_decisecond = 0.005 //points gained every decisecond
- var/points_per_slip = 2 //points gained per slip returned
+ var/points_per_manifest = 2 //points gained per manifest returned
var/points_per_crate = 5 //points gained per crate returned
var/points_per_intel = 250 //points gained per intel returned
var/points_per_plasma = 5 //points gained per plasma returned
@@ -31,17 +31,17 @@ var/datum/subsystem/shuttle/SSshuttle
var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentComm, associated with their potencies
var/list/techLevels = list()
var/list/researchDesigns = list()
+
+ var/list/supply_packs = list()
var/list/shoppinglist = list()
var/list/requestlist = list()
- var/list/supply_packs = list()
- var/datum/round_event/shuttle_loan/shuttle_loan
- var/sold_atoms = ""
+ var/list/orderhistory = list()
+ var/datum/round_event/shuttle_loan/shuttle_loan
/datum/subsystem/shuttle/New()
NEW_SS_GLOBAL(SSshuttle)
-
/datum/subsystem/shuttle/Initialize(timeofday, zlevel)
if (zlevel)
return ..()
@@ -50,12 +50,14 @@ var/datum/subsystem/shuttle/SSshuttle
if(!supply)
WARNING("No /obj/docking_port/mobile/supply placed on the map!")
- ordernum = rand(1,9000)
+ ordernum = rand(1, 9000)
- for(var/typepath in subtypesof(/datum/supply_packs))
- var/datum/supply_packs/P = new typepath()
- if(P.name == "HEADER") continue // To filter out group headers
+ for(var/pack in subtypesof(/datum/supply_pack))
+ var/datum/supply_pack/P = new pack()
+ if(!P.contains)
+ continue
supply_packs["[P.type]"] = P
+
initial_move()
..()
diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm
deleted file mode 100644
index f798b68ea24..00000000000
--- a/code/controllers/subsystem/shuttles/emergency.dm
+++ /dev/null
@@ -1,262 +0,0 @@
-/obj/docking_port/mobile/emergency
- name = "emergency shuttle"
- id = "emergency"
-
- dwidth = 9
- width = 22
- height = 11
- dir = 4
- travelDir = -90
- roundstart_move = "emergency_away"
- var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself
-
-/obj/docking_port/mobile/emergency/New()
- ..()
- SSshuttle.emergency = src
-
-/obj/docking_port/mobile/emergency/timeLeft(divisor)
- if(divisor <= 0)
- divisor = 10
- if(!timer)
- return round(SSshuttle.emergencyCallTime/divisor, 1)
-
- var/dtime = world.time - timer
- switch(mode)
- if(SHUTTLE_ESCAPE)
- dtime = max(SSshuttle.emergencyEscapeTime - dtime, 0)
- if(SHUTTLE_DOCKED)
- dtime = max(SSshuttle.emergencyDockTime - dtime, 0)
- else
- dtime = max(SSshuttle.emergencyCallTime - dtime, 0)
- return round(dtime/divisor, 1)
-
-/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, coefficient=1, area/signalOrigin, reason, redAlert)
- SSshuttle.emergencyCallTime = initial(SSshuttle.emergencyCallTime) * coefficient
- switch(mode)
- if(SHUTTLE_RECALL)
- mode = SHUTTLE_CALL
- timer = world.time - timeLeft(1)
- if(SHUTTLE_IDLE)
- mode = SHUTTLE_CALL
- timer = world.time
- if(SHUTTLE_CALL)
- if(world.time < timer) //this is just failsafe
- timer = world.time
- else
- return
-
- if(prob(70))
- SSshuttle.emergencyLastCallLoc = signalOrigin
- else
- SSshuttle.emergencyLastCallLoc = null
-
- priority_announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
-
-/obj/docking_port/mobile/emergency/cancel(area/signalOrigin)
- if(mode != SHUTTLE_CALL)
- return
-
- timer = world.time - timeLeft(1)
- mode = SHUTTLE_RECALL
-
- if(prob(70))
- SSshuttle.emergencyLastCallLoc = signalOrigin
- else
- SSshuttle.emergencyLastCallLoc = null
- priority_announce("The emergency shuttle has been recalled.[SSshuttle.emergencyLastCallLoc ? " Recall signal traced. Results can be viewed on any communications console." : "" ]", null, 'sound/AI/shuttlerecalled.ogg', "Priority")
-
-/*
-/obj/docking_port/mobile/emergency/findTransitDock()
- . = SSshuttle.getDock("emergency_transit")
- if(.)
- return .
- return ..()
-*/
-
-
-/obj/docking_port/mobile/emergency/check()
- if(!timer)
- return
-
- var/time_left = timeLeft(1)
- switch(mode)
- if(SHUTTLE_RECALL)
- if(time_left <= 0)
- mode = SHUTTLE_IDLE
- timer = 0
- if(SHUTTLE_CALL)
- if(time_left <= 0)
- //move emergency shuttle to station
- if(dock(SSshuttle.getDock("emergency_home")))
- setTimer(20)
- return
- mode = SHUTTLE_DOCKED
- timer = world.time
- send2irc("Server", "The Emergency Shuttle has docked with the station.")
- priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
-
- //Gangs only have one attempt left if the shuttle has docked with the station to prevent suffering from dominator delays
- for(var/datum/gang/G in ticker.mode.gangs)
- if(isnum(G.dom_timer))
- G.dom_attempts = 0
- else
- G.dom_attempts = min(1,G.dom_attempts)
-
- if(SHUTTLE_DOCKED)
-
- if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch
- sound_played = 1 //Only rev them up once.
- for(var/area/shuttle/escape/E in world)
- E << 'sound/effects/hyperspace_begin.ogg'
-
- if(time_left <= 0 && SSshuttle.emergencyNoEscape)
- priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority")
- sound_played = 0 //Since we didn't launch, we will need to rev up the engines again next pass.
- mode = SHUTTLE_STRANDED
-
- if(time_left <= 0 && !SSshuttle.emergencyNoEscape)
- //move each escape pod (or applicable spaceship) to its corresponding transit dock
- for(var/A in SSshuttle.mobile)
- var/obj/docking_port/mobile/M = A
- if(M.launch_status == UNLAUNCHED) //Pods will not launch from the mine/planet, and other ships won't launch unless we tell them to.
- M.launch_status = ENDGAME_LAUNCHED
- M.enterTransit()
-
- //now move the actual emergency shuttle to its transit dock
- for(var/area/shuttle/escape/E in world)
- E << 'sound/effects/hyperspace_progress.ogg'
- enterTransit()
- mode = SHUTTLE_ESCAPE
- launch_status = ENDGAME_LAUNCHED
- timer = world.time
- priority_announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, "Priority")
- if(SHUTTLE_ESCAPE)
- if(time_left <= 0)
- //move each escape pod to its corresponding escape dock
- for(var/A in SSshuttle.mobile)
- var/obj/docking_port/mobile/M = A
- if(M.launch_status == ENDGAME_LAUNCHED)
- if(istype(M, /obj/docking_port/mobile/pod))
- M.dock(SSshuttle.getDock("[M.id]_away")) //Escape pods dock at centcomm
- else
- continue //Mapping a new docking point for each ship mappers could potentially want docking with centcomm would take up lots of space, just let them keep flying off into the sunset for their greentext
-
- //now move the actual emergency shuttle to centcomm
- for(var/area/shuttle/escape/E in world)
- E << 'sound/effects/hyperspace_end.ogg'
- dock(SSshuttle.getDock("emergency_away"))
- mode = SHUTTLE_ENDGAME
- timer = 0
- open_dock()
-
-/obj/docking_port/mobile/emergency/proc/open_dock()
- for(var/obj/machinery/door/poddoor/shuttledock/D in airlocks)
- var/turf/T = get_step(D, D.checkdir)
- if(!istype(T,/turf/space))
- spawn(0)
- D.open()
-
-/obj/docking_port/mobile/pod
- name = "escape pod"
- id = "pod"
- dwidth = 1
- width = 3
- height = 4
- launch_status = UNLAUNCHED
-
-/obj/docking_port/mobile/pod/request()
- if((security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA) && launch_status == UNLAUNCHED)
- launch_status = EARLY_LAUNCHED
- return ..()
-
-/obj/docking_port/mobile/pod/New()
- if(id == "pod")
- WARNING("[type] id has not been changed from the default. Use the id convention \"pod1\" \"pod2\" etc.")
- ..()
-
-/obj/docking_port/mobile/pod/cancel()
- return
-
-/obj/machinery/computer/shuttle/pod
- name = "pod control computer"
- admin_controlled = 1
- shuttleId = "pod"
- possible_destinations = "pod_asteroid"
- icon = 'icons/obj/terminals.dmi'
- icon_state = "dorm_available"
- density = 0
-
-/obj/machinery/computer/shuttle/pod/update_icon()
- return
-
-/obj/docking_port/stationary/random
- name = "escape pod"
- id = "pod"
- dwidth = 1
- width = 3
- height = 4
- var/target_area = /area/mine/unexplored
-
-/obj/docking_port/stationary/random/initialize()
- ..()
- var/list/turfs = get_area_turfs(target_area)
- var/turf/T = pick(turfs)
- src.loc = T
-
-//Pod suits/pickaxes
-
-
-/obj/item/clothing/head/helmet/space/orange
- name = "emergency space helmet"
- icon_state = "syndicate-helm-orange"
- item_state = "syndicate-helm-orange"
-
-/obj/item/clothing/suit/space/orange
- name = "emergency space suit"
- icon_state = "syndicate-orange"
- item_state = "syndicate-orange"
- slowdown = 3
-
-/obj/item/weapon/pickaxe/emergency
- name = "emergency disembarkation tool"
- desc = "For extracting yourself from rough landings."
-
-/obj/item/weapon/storage/pod
- name = "emergency space suits"
- desc = "A wall mounted safe containing space suits. Will only open in emergencies."
- anchored = 1
- density = 0
- icon = 'icons/obj/storage.dmi'
- icon_state = "safe"
-
-/obj/item/weapon/storage/pod/New()
- ..()
- new /obj/item/clothing/head/helmet/space/orange(src)
- new /obj/item/clothing/head/helmet/space/orange(src)
- new /obj/item/clothing/suit/space/orange(src)
- new /obj/item/clothing/suit/space/orange(src)
- new /obj/item/clothing/mask/gas(src)
- new /obj/item/clothing/mask/gas(src)
- new /obj/item/weapon/tank/internals/oxygen/red(src)
- new /obj/item/weapon/tank/internals/oxygen/red(src)
- new /obj/item/weapon/pickaxe/emergency(src)
- new /obj/item/weapon/pickaxe/emergency(src)
- new /obj/item/weapon/survivalcapsule(src)
-
-/obj/item/weapon/storage/pod/attackby(obj/item/weapon/W, mob/user, params)
- return
-
-/obj/item/weapon/storage/pod/MouseDrop(over_object, src_location, over_location)
- if(security_level == SEC_LEVEL_RED || security_level == SEC_LEVEL_DELTA)
- return ..()
- else
- usr << "The storage unit will only unlock during a Red or Delta security alert."
-
-/obj/item/weapon/storage/pod/attack_hand(mob/user)
- return
-
-
-
-#undef UNLAUNCHED
-#undef LAUNCHED
-#undef EARLY_LAUNCHED
diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm
index 1a54baa825f..5e405252680 100644
--- a/code/game/asteroid.dm
+++ b/code/game/asteroid.dm
@@ -64,7 +64,7 @@ var/global/max_secret_rooms = 6
if("organharvest")
walltypes = list(/turf/simulated/wall/r_wall=2,/turf/simulated/wall=2,/turf/simulated/mineral/random/high_chance=1)
floortypes = list(/turf/simulated/floor/plasteel,/turf/simulated/floor/engine)
- treasureitems = list(/mob/living/simple_animal/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/critter/cat=2)
+ treasureitems = list(/mob/living/simple_animal/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/crate/critter=2, /mob/living/simple_animal/pet/cat/space=1)
fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/internal/appendix=2,/obj/structure/closet/crate/freezer=2,
/obj/structure/table/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3,
/obj/item/weapon/tank/internals/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 94bee1c4a7e..2e5fadd8916 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -131,8 +131,7 @@
. = ..()
if(client)
reset_perspective(destination)
- if(pipes_shown.len && !istype(loc, /obj/machinery/atmospherics))
- remove_ventcrawl()
+ update_canmove() //if the mob was asleep inside a container and then got forceMoved out we need to make them fall.
/mob/living/carbon/brain/forceMove(atom/destination)
if(container)
diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm
index 895e025eb02..5058c2d6b3a 100644
--- a/code/game/gamemodes/blob/blobs/blob_mobs.dm
+++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm
@@ -19,6 +19,7 @@
color = overmind.blob_reagent_datum.color
/mob/living/simple_animal/hostile/blob/blob_act()
+ adjustHealth(-maxHealth*0.025)
return
/mob/living/simple_animal/hostile/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -60,7 +61,7 @@
/mob/living/simple_animal/hostile/blob/blobspore/Life()
if(!is_zombie && isturf(src.loc))
- for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
+ for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile
if(H.stat == DEAD)
Zombify(H)
break
@@ -89,7 +90,7 @@
human_overlays = H.overlays
update_icons()
H.loc = src
- loc.visible_message("The corpse of [H.name] suddenly rises!")
+ visible_message("The corpse of [H.name] suddenly rises!")
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
..(1)
@@ -173,7 +174,7 @@
if(overmind)
var/mob/living/L = target
var/mob_protection = L.get_permeability_protection()
- overmind.blob_reagent_datum.reaction_mob(L, VAPOR, 20, 0, mob_protection)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage.
+ overmind.blob_reagent_datum.reaction_mob(L, VAPOR, 20, 0, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage.
if(target)
..()
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index a489e4d5407..f08365799c9 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -169,12 +169,12 @@
if(!can_buy(5))
return
last_attack = world.time
- OB.expand(T, 0, src)
+ OB.expand(T, src)
for(var/mob/living/L in T)
if("blob" in L.faction) //no friendly fire
continue
var/mob_protection = L.get_permeability_protection()
- blob_reagent_datum.reaction_mob(L, VAPOR, 25, 1, mob_protection)
+ blob_reagent_datum.reaction_mob(L, VAPOR, 25, 1, mob_protection, src)
blob_reagent_datum.send_message(L)
/mob/camera/blob/verb/rally_spores_power()
@@ -213,8 +213,11 @@
set desc = "Replaces your chemical with a random, different one."
if(!can_buy(40))
return
- var/datum/reagent/blob/B = pick((subtypesof(/datum/reagent/blob) - blob_reagent_datum.type))
- blob_reagent_datum = new B
+ set_chemical()
+
+/mob/camera/blob/proc/set_chemical()
+ var/datum/reagent/blob/BC = pick((subtypesof(/datum/reagent/blob) - blob_reagent_datum.type))
+ blob_reagent_datum = new BC
for(var/obj/effect/blob/BL in blobs)
BL.update_icon()
for(var/mob/living/simple_animal/hostile/blob/BLO)
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 3b67eab6a7c..95063875993 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -103,7 +103,7 @@
if(expand_range)
src.expand()
for(var/obj/effect/blob/B in orange(expand_range, src))
- if(prob(20 - get_dist(get_turf(src), get_turf(B)) * 4)) //expand falls off with range but is faster near the blob causing the expansion
+ if(prob(max(13 - get_dist(get_turf(src), get_turf(B)) * 4, 1))) //expand falls off with range but is faster near the blob causing the expansion
B.expand()
return
@@ -121,9 +121,7 @@
A.blob_act()
-/obj/effect/blob/proc/expand(turf/T = null, prob = 1, controller = null)
- if(prob && !prob(health))
- return
+/obj/effect/blob/proc/expand(turf/T = null, controller = null)
if(!T)
var/list/dirs = list(1,2,4,8)
for(var/i = 1 to 4)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 28baf88d03e..d12f9e16923 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -152,7 +152,7 @@ structure_check() searches for nearby cultist structures required for the invoca
/mob/proc/null_rod_check() //The null rod, if equipped, will protect the holder from the effects of most runes
var/obj/item/weapon/nullrod/N = locate() in src
if(N)
- return 1
+ return N
return 0
var/list/teleport_runes = list()
@@ -291,9 +291,10 @@ var/list/teleport_other_runes = list()
if(!offering)
rune_in_use = 0
return
- if(offering.null_rod_check())
+ var/obj/item/weapon/nullrod/N = offering.null_rod_check()
+ if(N)
user << "Something is blocking the Geometer's magic!"
- log_game("Sacrifice rune failed - target has null rod")
+ log_game("Sacrifice rune failed - target has \a [N]!")
fail_invoke()
rune_in_use = 0
return
@@ -790,8 +791,9 @@ var/list/teleport_other_runes = list()
visible_message("[src] briefly bubbles before exploding!")
for(var/mob/living/carbon/C in viewers(src))
if(!iscultist(C))
- if(C.null_rod_check())
- C << "The null rod suddenly burns hotly before returning to normal!"
+ var/obj/item/weapon/nullrod/N = C.null_rod_check()
+ if(N)
+ C << "\The [N] suddenly burns hotly before returning to normal!"
continue
C << "Your blood boils in your veins!"
C.take_overall_damage(51,51)
diff --git a/code/game/gamemodes/handofgod/_handofgod.dm b/code/game/gamemodes/handofgod/_handofgod.dm
index 5591897e264..100f079770d 100644
--- a/code/game/gamemodes/handofgod/_handofgod.dm
+++ b/code/game/gamemodes/handofgod/_handofgod.dm
@@ -188,9 +188,9 @@ var/global/list/global_handofgod_structuretypes = list()
if((follower_mind in red_deity_followers) || (follower_mind in red_deity_prophets) || (follower_mind in blue_deity_followers) || (follower_mind in blue_deity_prophets))
H << "You already belong to a deity. Your strong faith has blocked out the conversion attempt by the followers of the [colour] deity."
return 0
- var/obj/item/weapon/nullrod/N = locate() in H
+ var/obj/item/weapon/nullrod/N = H.null_rod_check()
if(N)
- H << "Your null rod prevented the [colour] deity from brainwashing you."
+ H << "Your holy weapon prevented the [colour] deity from brainwashing you."
return 0
if(colour == "red")
diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
index 0e05f8f4066..0212fb49e7d 100644
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ b/code/game/gamemodes/miniantags/revenant/revenant.dm
@@ -319,7 +319,7 @@
/mob/living/simple_animal/revenant/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/weapon/nullrod))
visible_message("[src] violently flinches!", \
- "As the null rod passes through you, you feel your essence draining away!")
+ "As \the [W] passes through you, you feel your essence draining away!")
adjustBruteLoss(25) //hella effective
inhibited = 1
spawn(30)
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 5d086314ea1..96a8902f030 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -227,7 +227,7 @@
/datum/spellbook_entry/shapeshift
name = "Wild Shapeshift"
- spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift/wild
+ spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift
log_name = "WS"
category = "Assistance"
cost = 1
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 925f9ed8f13..60f080fcceb 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -40,7 +40,8 @@
"Security",
"Machinery",
"Medical",
- "Misc"
+ "Misc",
+ "Imported"
)
/obj/machinery/autolathe/New()
@@ -111,7 +112,19 @@
return 1
if(stat)
return 1
-
+
+ if(istype(O, /obj/item/weapon/disk/design_disk))
+ user.visible_message("[user] begins to load \the [O] in \the [src]...",
+ "You begin to load a design from \the [O]...",
+ "You hear the chatter of a floppy drive.")
+ busy = 1
+ var/obj/item/weapon/disk/design_disk/D = O
+ if(do_after(user, 14.4, target = src))
+ files.AddDesign2Known(D.blueprint)
+
+ busy = 0
+ return
+
var/material_amount = materials.get_item_material_amount(O)
if(!material_amount)
user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe."
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 07bd6b78ed7..417bd465fd5 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -127,8 +127,7 @@ Class Procs:
/obj/machinery/Destroy()
machines.Remove(src)
SSmachine.processing -= src
- if(occupant)
- dropContents()
+ dropContents()
return ..()
/obj/machinery/attackby(obj/item/weapon/W, mob/user, params)
@@ -160,10 +159,14 @@ Class Procs:
/obj/machinery/proc/dropContents()
var/turf/T = get_turf(src)
+ for(var/mob/living/L in src)
+ L.loc = T
+ L.reset_perspective(null)
+ L.update_canmove() //so the mob falls if he became unconscious inside the machine.
+ . += L
+
T.contents += contents
- if(occupant)
- occupant.reset_perspective(null)
- occupant = null
+ occupant = null
/obj/machinery/proc/close_machine(mob/living/target = null)
state_open = 0
@@ -402,4 +405,16 @@ Class Procs:
if (hclient.client.mob && hclient.client.mob.machine == src) hclient.client.mob.unset_machine()
/obj/machinery/proc/can_be_overridden()
- . = 1
\ No newline at end of file
+ . = 1
+
+
+/obj/machinery/tesla_act(var/power)
+ ..()
+ if(prob(85))
+ emp_act(2)
+ else if(prob(50))
+ ex_act(3)
+ else if(prob(90))
+ ex_act(2)
+ else
+ ex_act(1)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 21b238c95ea..df05de5499c 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -764,8 +764,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
desc = "Wall-mounted Medical Equipment dispenser."
icon_state = "wallmed"
icon_deny = "wallmed-deny"
- req_access_txt = "5"
- density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
+ density = 0
products = list(/obj/item/weapon/reagent_containers/syringe = 3,/obj/item/weapon/reagent_containers/pill/patch/styptic = 5,
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 5,/obj/item/weapon/reagent_containers/pill/charcoal = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2,/obj/item/weapon/reagent_containers/pill/morphine = 2)
@@ -960,4 +959,4 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
#undef STANDARD_CHARGE
#undef CONTRABAND_CHARGE
-#undef COIN_CHARGE
\ No newline at end of file
+#undef COIN_CHARGE
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index d025a43ed9b..9d4a6c7937b 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -1,7 +1,35 @@
+// Sleeper, Medical Beam, and Syringe gun
-// Sleeper and Syringe gun
+/obj/item/mecha_parts/mecha_equipment/medical
-/obj/item/mecha_parts/mecha_equipment/sleeper
+/obj/item/mecha_parts/mecha_equipment/medical/New()
+ ..()
+ SSobj.processing |= src
+
+
+/obj/item/mecha_parts/mecha_equipment/medical/can_attach(obj/mecha/medical/M)
+ if(..() && istype(M))
+ return 1
+
+
+/obj/item/mecha_parts/mecha_equipment/medical/attach(obj/mecha/M)
+ ..()
+ SSobj.processing |= src
+
+/obj/item/mecha_parts/mecha_equipment/medical/Destroy()
+ SSobj.processing -= src
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/medical/process()
+ if(!chassis)
+ SSobj.processing -= src
+ return 1
+
+/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/detach()
+ SSobj.processing -= src
+ return ..()
+
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper
name = "mounted sleeper"
desc = "Equipment for medical exosuits. A mounted sleeper that stabilizes patients and can inject reagents in the exosuit's reserves."
icon = 'icons/obj/Cryogenic2.dmi'
@@ -15,29 +43,18 @@
var/inject_amount = 10
salvageable = 0
-/obj/item/mecha_parts/mecha_equipment/sleeper/can_attach(obj/mecha/medical/M)
- if(..())
- if(istype(M))
- return 1
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/allow_drop()
return 0
-/obj/item/mecha_parts/mecha_equipment/sleeper/attach(obj/mecha/M)
- ..()
- SSobj.processing |= src
-
-/obj/item/mecha_parts/mecha_equipment/sleeper/allow_drop()
- return 0
-
-/obj/item/mecha_parts/mecha_equipment/sleeper/Destroy()
- SSobj.processing.Remove(src)
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Destroy()
for(var/atom/movable/AM in src)
AM.forceMove(get_turf(src))
return ..()
-/obj/item/mecha_parts/mecha_equipment/sleeper/Exit(atom/movable/O)
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Exit(atom/movable/O)
return 0
-/obj/item/mecha_parts/mecha_equipment/sleeper/action(mob/living/carbon/target)
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/action(mob/living/carbon/target)
if(!action_checks(target))
return
if(!istype(target))
@@ -57,7 +74,7 @@
chassis.visible_message("[chassis] loads [target] into [src].")
log_message("[target] loaded. Life support functions engaged.")
-/obj/item/mecha_parts/mecha_equipment/sleeper/proc/patient_insertion_check(mob/living/carbon/target)
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target)
if(target.buckled)
occupant_message("[target] will not fit into the sleeper because they are buckled to [target.buckled]!")
return
@@ -69,24 +86,24 @@
return
return 1
-/obj/item/mecha_parts/mecha_equipment/sleeper/proc/go_out()
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/go_out()
if(!patient)
return
patient.forceMove(get_turf(src))
occupant_message("[patient] ejected. Life support functions disabled.")
log_message("[patient] ejected. Life support functions disabled.")
- SSobj.processing.Remove(src)
+ SSobj.processing -= src
patient = null
update_equip_info()
-/obj/item/mecha_parts/mecha_equipment/sleeper/detach()
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/detach()
if(patient)
occupant_message("Unable to detach [src] - equipment occupied!")
return
- SSobj.processing.Remove(src)
+ SSobj.processing -= src
return ..()
-/obj/item/mecha_parts/mecha_equipment/sleeper/get_equip_info()
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/get_equip_info()
var/output = ..()
if(output)
var/temp = ""
@@ -95,7 +112,7 @@
return "[output] [temp]"
return
-/obj/item/mecha_parts/mecha_equipment/sleeper/Topic(href,href_list)
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list)
..()
var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
if(filter.get("eject"))
@@ -108,7 +125,7 @@
inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source"))
return
-/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_stats()
+/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats()
if(!patient)
return
return {"
@@ -137,7 +154,7 @@