diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm
index 652a4a008c2..c8523dbe502 100644
--- a/_maps/RandomZLevels/undergroundoutpost45.dmm
+++ b/_maps/RandomZLevels/undergroundoutpost45.dmm
@@ -6,16 +6,16 @@
"af" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"ag" = (/turf/simulated/shuttle/wall{tag = "icon-swallc1"; icon_state = "swallc1"; dir = 2},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"ah" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"ai" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "darkblue"; tag = "icon-darkblue (NORTHWEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"aj" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1; heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"ak" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1; heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"al" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "darkblue"; tag = "icon-darkblue (NORTHEAST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"ai" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{broken = 1; dir = 8; heat_capacity = 1e+006; icon_state = "damaged1"; tag = "icon-damaged1 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"aj" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{broken = 1; dir = 8; heat_capacity = 1e+006; icon_state = "damaged2"; tag = "icon-damaged2 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"ak" = (/obj/machinery/light/small{active_power_usage = 0; dir = 8; icon_state = "bulb-broken"; status = 2},/turf/simulated/floor/plasteel{burnt = 1; dir = 8; heat_capacity = 1e+006; icon_state = "floorscorched2"; tag = "icon-floorscorched2 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"al" = (/turf/simulated/floor/plasteel{broken = 1; dir = 8; heat_capacity = 1e+006; icon_state = "damaged4"; tag = "icon-damaged4 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"am" = (/turf/simulated/wall/r_wall/rust,/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"an" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "darkblue"; tag = "icon-darkblue (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"an" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{active_power_usage = 0; dir = 4; icon_state = "bulb-broken"; status = 2},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"ao" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"ap" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "darkblue"; tag = "icon-darkblue (EAST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"aq" = (/obj/machinery/door_control{desc = "A remote control-switch to send the elevator to the basement floor."; id = "UO45_useless"; name = "B1"; pixel_x = 6; pixel_y = -24; req_access_txt = "0"},/obj/machinery/door_control{desc = "A remote control-switch for the elevator doors."; id = "UO45_Elevator"; name = "Elevator Doors"; pixel_x = -6; pixel_y = -24; req_access_txt = "0"},/obj/machinery/door_control{desc = "A remote control-switch to send the elevator to the ground floor."; id = "UO45_useless"; name = "G1"; pixel_x = 6; pixel_y = -34; req_access_txt = "0"},/turf/simulated/floor/plasteel{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10; heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"ar" = (/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "darkblue"; tag = "icon-darkblue"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"ap" = (/obj/machinery/door_control{desc = "A remote control-switch to send the elevator to the basement floor."; id = "UO45_useless"; name = "B1"; pixel_x = 6; pixel_y = -24; req_access_txt = "0"},/obj/machinery/door_control{desc = "A remote control-switch for the elevator doors."; id = "UO45_Elevator"; name = "Elevator Doors"; pixel_x = -6; pixel_y = -24; req_access_txt = "0"},/obj/machinery/door_control{desc = "A remote control-switch to send the elevator to the ground floor."; id = "UO45_useless"; name = "G1"; pixel_x = 6; pixel_y = -34; req_access_txt = "0"},/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"aq" = (/turf/simulated/floor/plasteel{broken = 1; dir = 8; heat_capacity = 1e+006; icon_state = "damaged3"; tag = "icon-damaged3 (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"ar" = (/obj/machinery/door/poddoor{id = "UO45_Elevator"; name = "Elevator Door"},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"as" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "darkblue"; tag = "icon-darkblue"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"at" = (/turf/simulated/floor/plasteel{tag = "icon-darkblue (SOUTHEAST)"; icon_state = "darkblue"; dir = 6; heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"au" = (/turf/simulated/shuttle/wall{tag = "icon-swallc3"; icon_state = "swallc3"; dir = 2},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
@@ -193,7 +193,7 @@
"dK" = (/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"dL" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/sink{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "green"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"dM" = (/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "green"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"dN" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "201"},/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/head/greenbandana,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"dN" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "201"},/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/mask/bandana,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"dO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"dP" = (/obj/structure/closet/secure_closet{icon_broken = "secbroken"; icon_closed = "sec"; icon_locked = "sec1"; icon_off = "secoff"; icon_opened = "secopen"; icon_state = "sec1"; locked = 1; name = "security officer's locker"; req_access_txt = "201"},/obj/item/weapon/storage/belt/security,/obj/item/device/flash/handheld,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 9; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"dQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/structure/stool/bed/chair,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
@@ -210,7 +210,7 @@
"eb" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"ec" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"ed" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
-"ee" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "201"},/obj/item/clothing/suit/apron,/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/clothing/head/greenbandana,/obj/item/weapon/minihoe,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
+"ee" = (/obj/structure/closet/secure_closet{icon_broken = "hydrosecurebroken"; icon_closed = "hydrosecure"; icon_locked = "hydrosecure1"; icon_off = "hydrosecureoff"; icon_opened = "hydrosecureopen"; icon_state = "hydrosecure"; locked = 0; name = "botanist's locker"; req_access_txt = "201"},/obj/item/clothing/suit/apron,/obj/item/weapon/storage/bag/plants/portaseeder,/obj/item/clothing/mask/bandana,/obj/item/weapon/minihoe,/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "vault"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"ef" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"eg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Security Checkpoint Maintenance"; req_access_txt = "201"; req_one_access_txt = "0"},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
"eh" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a1{has_gravity = 1; name = "UO45 Central Hall"})
@@ -747,8 +747,8 @@
"os" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"})
"ot" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/junction{tag = "icon-pipe-y (WEST)"; icon_state = "pipe-y"; dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"})
"ou" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (EAST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
-"ov" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; input_level = 10000; inputting = 1; output_level = 7000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
-"ow" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; input_level = 30000; inputting = 1; output_level = 7000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
+"ov" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; input_level = 30000; inputting = 0; output_level = 7000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
+"ow" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 1.5e+006; input_level = 10000; inputting = 0; output_level = 7000; outputting = 1},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
"ox" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 8; heat_capacity = 1e+006; icon_state = "warndark"; tag = "icon-warndark (WEST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
"oy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"})
"oz" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/plasteel{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"})
@@ -857,7 +857,6 @@
"qy" = (/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"})
"qz" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "freezerfloor"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"})
"qA" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"})
-"qB" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 173.4; heat_capacity = 1e+006; name = "Cave Floor"; nitrogen = 135.1; oxygen = 0; temperature = 363.9; toxins = 229.8},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
"qC" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 173.4; heat_capacity = 1e+006; name = "Cave Floor"; nitrogen = 135.1; oxygen = 0; temperature = 363.9; toxins = 229.8},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
"qD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 173.4; heat_capacity = 1e+006; name = "Cave Floor"; nitrogen = 135.1; oxygen = 0; temperature = 363.9; toxins = 229.8},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
"qE" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel{heat_capacity = 1e+006; icon_state = "dark"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
@@ -992,7 +991,6 @@
"td" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
"te" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "UO45_waste_in"; name = "Gas Mix Tank Control"; output_tag = "UO45_waste_out"; sensors = list("UO45_waste_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{dir = 6; heat_capacity = 1e+006; icon_state = "green"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
"tf" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/meter{layer = 3.3},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
-"tg" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "UO45_waste_in"; pixel_y = 1},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
"th" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "UO45_waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
"ti" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"})
"tj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a5{has_gravity = 1; name = "UO45 Research"})
@@ -1307,6 +1305,8 @@
"zg" = (/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
"zh" = (/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
"zi" = (/turf/simulated/floor/plating{burnt = 1; heat_capacity = 1e+006; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
+"zj" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 4},/turf/simulated/floor/plating/asteroid{carbon_dioxide = 173.4; heat_capacity = 1e+006; name = "Cave Floor"; nitrogen = 135.1; oxygen = 0; temperature = 363.9; toxins = 229.8},/area/awaycontent/a7{always_unpowered = 1; has_gravity = 1; name = "UO45 Caves"; power_environ = 0; power_equip = 0; power_light = 0; poweralm = 0})
+"zk" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "UO45_waste_in"},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"})
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1325,10 +1325,10 @@ aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadadadadadadadadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadaeafafafafagadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahaiajakalahamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahanaoaoapahadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahaqarasatahadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadauavawawaxayadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahaiajcvbNahamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahakaoalanahadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadahapaqasatahadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacadauavawaraxayadacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacazaAadamamawawadamadazazacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaAaBaCaDaEaFaFaFaGaHaIazacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacazaJaCaFaFaFaKaKaFaFaLaAacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
@@ -1374,16 +1374,16 @@ aaaaaaaaaaaaaaacacacacacacgLlplqlrlsltlultlvlwlxlylzlzlAlzlBlzlClzlDlElFlGlHlIlJ
aaaaaaaaaaaaaaacacacacacacgMmbjJjIiQmcmcmdgLmemfgxgxgVgVgVgxgVgVgVgwgwmgmhgzgzgzmimjmkmkgyhIhIhIhImlkYkZgAmmmnmogzmpgmmqmrfPmsmtmufOmvmwmxfOfOfPfPfOfPmymzgheKeKeKeKeKeKeKeKacaceKeKeKeKacacacaclomAmBmaloacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacgLmCmDmEmFmGmHmIgxgVgVgweKeKeKeKmJeKeKeKeKhdmKmLgAmMmNmOmPmQmRgzmSmTmUhImlmVgAgAgygzgzgymWmXfOfOfPmYmZnafPnbmZncfOndnenfngfPnhmzgseKeKeKeKeKeKeKeKeKeKeKeKeKeKacacaclololoninjnjloacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacgLgLgMgMgLgwgxgxgweKeKmJeKeKeKeKeKeKeKeKggeKmKnkgAnlnmnnnomQmQgynpnqnrhImlnshdntnunvnvnwnxnynznAfPnBnCfPfOnBnDfPfPnEglnFnGnHnInJgseKeKeKeKeKeKeKeKeKeKeKeKeKeKacacacnjnKnLnLnLnMloacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacaceKeKeKeKeKeKeKeKeKeKeKggeKeKeKnNnOnPgAnQnmnRnSnTnUgynVnWnXhImlmVhdnPnYnZoaoaobocodoeofogohoiojokoholomonooopoqorosotgseKeKeKeKeKeKeKeKeKeKeKeKeKeKeKacacnjouovowovoxlolololoacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacaceKeKeKeKeKeKeKeKeKeKeKggeKeKeKacnOnPgAnQnmnRnSnTnUgynVnWnXhImlmVhdnPnYnZoaoaobocodoeofogohoiojokoholomonooopoqorosotgseKeKeKeKeKeKeKeKeKeKeKeKeKeKeKacacnjouowovowoxlolololoacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacaceKggeKeKeKeKeKeKeKeKeKeKeKeKgAnOoygAoznmoAoBoCoDgyoEoFnXoGmlmVgAnkmKeKeKgsoHleleoIoJoKoLoMoNoKoOoPoQoRoLoSoTfPoUoVghhieKeKeKeKeKeKeKeKeKeKeKeKeKeKacaclooWoXoYoZpalopbpcloacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacaceKeKeKggeKeKeKeKeKeKeKgghdpdpegApfpgmQphpioCgzpjpkplhImlkWhdpmmKeKeKgspnpogtppfPpqfPprfOpsfPfPfOptfPfPpufPpvmzgseKeKeKeKeKeKeKpwpxpxpxpxpypxpxpxpzpApBpCpDpEpFnjpGpHloacacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacggeKeKggeKeKachdpIpJgAgzgzpKgzgzpLgzgzpMpNgypOjPgAnPnOggeKgsgspPpQpRfOpSpTpUpVpWfOpXpYpZqafOqbfOjbmzgseKeKeKeKeKeKeKqcnjnjqdqdnjeKeKeKacloqdqdqeqdqdloqfqglololoacacacacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaceKeKeKeKacacgzqhqiqjqkqlqmqngyqoqpgzqqqrqshbqtgAnPmKeKeKeKgsgsgsgsfLquqvfPqwqxfPfPfPqyqzfOqAfPjbmzgseKeKeKgCeKqBqCqDnjqEqFqFlonjnjnjloloqGqHqIqJqKqLqMqNqOqPloacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacaceKeKeKeKacacgzqhqiqjqkqlqmqngyqoqpgzqqqrqshbqtgAnPmKeKeKeKgsgsgsgsfLquqvfPqwqxfPfPfPqyqzfOqAfPjbmzgseKeKeKgCeKzjqCqDnjqEqFqFlonjnjnjloloqGqHqIqJqKqLqMqNqOqPloacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgzqQpJqRqSqTqUqVgAhdhdgAqWqXhbhbqYgAqZmKeKeKeKeKeKeKeKghramufPmvrbfPrcrdpZrefPrffPrgrhfLgsgsgsghgsgsrifLlorjrkrlrmnjrnrorprqrrrsrtrurvrwrxryrzqPlolonjnjacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgyrAqiqjrBrCrDrEgArFrGrHrIrJkQrKrLgArMmKeKeKeKggeKeKeKghghghghfPfOfPfOfOrNfPfPrOfOrPrQrRrSrTrUrVrSrWrXrYrZsasbscsdsesfsgshsisjskslsmsnsospsqsqsrssstsunjacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgyqQqigAgAgAhdhdgAsvswgAsxsyszsAsBgAnPmKacggeKeKeKeKggeKeKeKacacacfPsCsDpZsEfOrffOjRsFsGsHsIsHsJsHsKsLsMsNsOsOsPsQsRsSsTsUsVsWsXsYsZtatbrvtctdtetftgthloacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgyqQqigAgAgAhdhdgAsvswgAsxsyszsAsBgAnPmKacggeKeKeKeKggeKeKeKacacacfPsCsDpZsEfOrffOjRsFsGsHsIsHsJsHsKsLsMsNsOsOsPsQsRsSsTsUsVsWsXsYsZtatbrvtctdtetfzkthloacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgytitjnutknvnvtltmtntotptptqtptptrtsttnOaceKeKeKeKeKeKeKeKeKeKeKacfLtupZpZsEfOrffPtvtwghgsgsgsghgsgsrifLlotxtytztAlotBtCtDsVtEtFtGtHtItJrlrltKtLlolonjnjacacacacacacacacacacaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgztMtNtOtPtPtOtQtRtRtStRtRtTtRtUtVtWtXtYaceKeKeKeKeKeKeKeKeKeKeKggghghtZuafOfOqAfPubucgseKeKeKudeKqBqDeKnjueufuglolouhuiujloukulumunuoupuqurusutnjacacacacacacacacacacacacacaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgztMtNtOtPtPtOtQtRtRtStRtRtTtRtUtVtWtXtYaceKeKeKeKeKeKeKeKeKeKeKggghghtZuafOfOqAfPubucgseKeKeKudeKzjqDeKnjueufuglolouhuiujloukulumunuoupuqurusutnjacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgyuuuvuwgznNgzgzgzgzgygygAgAhdhdgzuxuyhdeKeKeKggeKeKeKeKeKeKeKeKeKeKghghghfOuzrfuAubucgseKeKeKeKeKeKeKeKnjuBuCuDuEuFqduGqdlolouHuIlouJuKnjuJuKnjnjacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgzuLuMuNgzacacacacacacacaceKeKhduOuPuQhdeKeKeKeKeKeKeKggeKaceKeKeKeKeKeKgsuRuSuTfPuUucgseKeKeKeKeKeKeKeKqduVuWuXsOuYsOsTuZvavbvcvdlovevflovgvhloacacacacacacacacacacacacacacaaaaaaaaaaaaaa
aaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacacacacacacacacacacgzvivjvkgyacacacacacacacacaceKhdhIvlhIhdeKeKeKeKeKeKeKeKacacacggeKeKeKvmvnvovpvqfOvrvsfLeKeKeKeKeKeKeKeKqdvtrlvuvvvwvxvyvzvAvBvCvDlovEvFlovGvHloacacacacacacacacacacacacacacaaaaaaaaaaaaaa
@@ -1458,3 +1458,4 @@ aayUyVaayWyXyYyZzaaazbzcaazdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aazeaazfzgzhaaziaaaaaaaaaazdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
diff --git a/_maps/map_files/Efficiencystation/efficiency3.1.3a.dmm b/_maps/map_files/Efficiencystation/efficiency3.1.3a.dmm
index 5b67a50f2bf..78eced000bf 100644
--- a/_maps/map_files/Efficiencystation/efficiency3.1.3a.dmm
+++ b/_maps/map_files/Efficiencystation/efficiency3.1.3a.dmm
@@ -121,7 +121,7 @@
"acq" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/tcomeast{name = "\improper AI Satellite East Wing"})
"acr" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/tcomeast{name = "\improper AI Satellite East Wing"})
"acs" = (/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/tcomeast{name = "\improper AI Satellite East Wing"})
-"act" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
+"act" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -31; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
"acu" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/device/multitool,/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"; dir = 2},/area/turret_protected/tcomwest{name = "\improper AI Satellite West Wing"})
"acv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{tag = "icon-darkblue"; icon_state = "darkblue"; dir = 2},/area/turret_protected/tcomwest{name = "\improper AI Satellite West Wing"})
"acw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/weapon/storage/belt/utility,/obj/item/device/radio/off,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/tcomwest{name = "\improper AI Satellite West Wing"})
@@ -476,8 +476,8 @@
"ajh" = (/turf/simulated/floor/engine,/area/maintenance/incinerator)
"aji" = (/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/engine,/area/maintenance/incinerator)
"ajj" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "foreport"; name = "Fore-Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
-"ajk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
-"ajl" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "foreport"; name = "Fore-Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
+"ajk" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/space,/area/solar/auxport)
+"ajl" = (/obj/machinery/power/solar{id = "aftport"; name = "Aft-Port Solar Array"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"ajm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/storage/box,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
"ajn" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
"ajo" = (/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
@@ -512,7 +512,7 @@
"ajR" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 1},/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
"ajS" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "12"},/turf/simulated/floor/engine,/area/maintenance/incinerator)
"ajT" = (/obj/machinery/atmospherics/pipe/simple/insulated,/obj/machinery/meter{pixel_y = 6},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
-"ajU" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"ajU" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/space,/area/solar/auxport)
"ajV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/grille,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/maintenance/fpmaint{name = "Medical Maintenance"})
"ajW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/maintenance/fpmaint{name = "Medical Maintenance"})
"ajX" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
@@ -562,7 +562,7 @@
"akP" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 1},/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"akQ" = (/obj/machinery/atmospherics/binary/valve{dir = 4; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
"akR" = (/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = 24},/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4},/obj/machinery/embedded_controller/radio/access_controller{exterior_door_tag = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; interior_door_tag = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = 24; req_access_txt = "12"},/obj/machinery/door_control{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 24; pixel_y = 0; req_access_txt = "12"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"akS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"akS" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/space,/area/solar/auxport)
"akT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
"akU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
"akV" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology)
@@ -857,12 +857,12 @@
"aqy" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"aqz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/atmos)
"aqA" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
-"aqB" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless,/area/solar/auxport)
-"aqC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
-"aqD" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"aqB" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/space,/area/solar/auxport)
+"aqC" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/lattice,/turf/space,/area/space)
+"aqD" = (/obj/machinery/power/solar{id = "aftport"; name = "Aft-Port Solar Array"},/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"aqE" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
-"aqF" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
-"aqG" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"aqF" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/space,/area/solar/auxport)
+"aqG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
"aqH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"aqI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"aqJ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
@@ -932,7 +932,7 @@
"arV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/oil,/obj/item/stack/rods,/turf/simulated/floor/plating,/area/maintenance/fore)
"arW" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/space,/area/space)
"arX" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space)
-"arY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"arY" = (/obj/machinery/power/tracker,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/auxport)
"arZ" = (/obj/structure/cable,/obj/machinery/power/solar_control{id = "foreport"; name = "Fore Port Solar Control"; track = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"asa" = (/obj/item/stack/cable_coil{amount = 30},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"asb" = (/obj/machinery/power/apc{dir = 2; name = "Fore Port Solar APC"; pixel_x = 25; pixel_y = 3},/obj/machinery/camera{c_tag = "Fore Port Solar Control"; dir = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
@@ -1176,7 +1176,7 @@
"awF" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos)
"awG" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos)
"awH" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel,/area/atmos)
-"awI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"awI" = (/obj/machinery/disposal,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"awJ" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/medbay{name = "Medbay Central"})
"awK" = (/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 8},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/medbay{name = "Medbay Central"})
"awL" = (/obj/machinery/vending/cola,/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/medical/medbay{name = "Medbay Central"})
@@ -1369,7 +1369,7 @@
"aAq" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/space,/area/space)
"aAr" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/grille,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/atmos)
"aAs" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos)
-"aAt" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
+"aAt" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/space,/area/solar/auxport)
"aAu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
"aAv" = (/obj/item/weapon/cigbutt,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
"aAw" = (/obj/effect/decal/cleanable/oil,/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
@@ -2341,10 +2341,10 @@
"aTa" = (/obj/machinery/light,/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = -30},/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_med,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteyellow"},/area/medical/chemistry)
"aTb" = (/obj/effect/decal/cleanable/oil,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fpmaint{name = "Medical Maintenance"})
"aTc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/storage/box/bodybags{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/rxglasses,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
-"aTd" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/o2{pixel_x = -2; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "white"},/area/space)
+"aTd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/pen,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aTe" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/beaker/large/charcoal,/obj/item/weapon/reagent_containers/glass/beaker/large/epinephrine,/obj/item/weapon/reagent_containers/glass/beaker/large/styptic,/obj/item/weapon/reagent_containers/glass/beaker/large/silver_sulfadiazine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
-"aTf" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/space)
-"aTg" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/space)
+"aTf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/disposalpipe/junction{icon_state = "pipe-y"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/starboard)
+"aTg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Engineering Lobby Maintenance"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room)
"aTh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
"aTi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/medbay{name = "Medbay Central"})
"aTj" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/medbay{name = "Medbay Central"})
@@ -2817,7 +2817,7 @@
"bci" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/library)
"bcj" = (/obj/machinery/light/small{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/library)
"bck" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"bcl" = (/obj/machinery/mineral/stacking_unit_console{dir = 4; machinedir = 8; pixel_x = 30},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"},/area/maintenance/disposal)
+"bcl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard)
"bcm" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bcn" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/northleft{dir = 2; name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics)
"bco" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/westright{dir = 2; name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor/plasteel,/area/hydroponics)
@@ -3015,7 +3015,7 @@
"bfY" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/break_room)
"bfZ" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/engine/break_room)
"bga" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/engine/chiefs_office)
-"bgb" = (/obj/machinery/disposal,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
+"bgb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room)
"bgc" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "CE Office APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"bgd" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"bge" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
@@ -3069,15 +3069,14 @@
"bha" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/engine/gravity_generator)
"bhb" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/starboard)
"bhc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/starboard)
-"bhd" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/starboard)
-"bhe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/starboard)
-"bhf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/starboard)
-"bhg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Engineering Lobby Maintenance"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/break_room)
-"bhh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/engine/break_room)
-"bhi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel,/area/engine/break_room)
-"bhj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/engine/break_room)
-"bhk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/chiefs_office)
-"bhl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
+"bhd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/engine/break_room)
+"bhe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/poddoor/preopen{id = "Engineering"; name = "engineering security door"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/chiefs_office)
+"bhf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/engine/break_room)
+"bhg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
+"bhh" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/space,/area/solar/port)
+"bhi" = (/obj/machinery/power/solar{id = "aftport"; name = "Aft-Port Solar Array"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port)
+"bhj" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/space,/area/solar/port)
+"bhk" = (/obj/machinery/power/solar{id = "aftport"; name = "Aft-Port Solar Array"},/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port)
"bhm" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"bhn" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/lighter/zippo,/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/weapon/stamp/ce,/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
"bho" = (/obj/machinery/computer/atmos_alert,/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's Desk"; departmentType = 3; name = "Chief Engineer RC"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralfull"},/area/engine/chiefs_office)
@@ -3539,7 +3538,6 @@
"bqh" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"bqi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/grille,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"bqj" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"bqk" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/engine/engineering)
"bql" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"bqm" = (/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
"bqn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/quartermaster/storage)
@@ -3607,7 +3605,7 @@
"brx" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/airlock_painter,/turf/simulated/floor/plasteel,/area/engine/engineering)
"bry" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/engineering_guide,/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_y = 6},/turf/simulated/floor/plasteel,/area/engine/engineering)
"brz" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/engineering)
-"brA" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North West"; dir = 4; network = list("Singularity")},/turf/space,/area/space)
+"brA" = (/obj/machinery/power/solar{id = "foreport"; name = "Fore-Port Solar Array"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"brB" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering)
"brC" = (/obj/item/weapon/wirecutters,/turf/simulated/floor/plating/airless,/area/engine/engineering)
"brD" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North East"; dir = 8; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
@@ -4111,6 +4109,7 @@
"bBh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
"bBi" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/crew_quarters/heads)
"bBj" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/secondary/entry{name = "Arrivals"})
+"bBk" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/space,/area/solar/auxport)
"bBl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/storage/primary)
"bBm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/storage/primary)
"bBn" = (/obj/structure/table,/obj/machinery/power/apc{dir = 4; name = "Primary Tool Storage APC"; pixel_x = 25; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera{c_tag = "Primary Tool Storage"; dir = 8},/obj/item/device/assembly/igniter{pixel_x = -8; pixel_y = -4},/obj/item/device/assembly/igniter,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/storage/primary)
@@ -4388,7 +4387,6 @@
"bGB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/stool,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/engine/engineering)
"bGC" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/plasma,/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/engine/engineering)
"bGD" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "aftport"; name = "Aft-Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port)
-"bGE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
"bGF" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "aftport"; name = "Aft-Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port)
"bGG" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
"bGH" = (/obj/effect/decal/cleanable/robot_debris,/obj/structure/closet/emcloset,/obj/structure/window,/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
@@ -4444,7 +4442,6 @@
"bHF" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plasteel,/area/engine/engineering)
"bHG" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plasteel,/area/engine/engineering)
"bHH" = (/obj/item/device/multitool,/turf/space,/area/space)
-"bHI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
"bHJ" = (/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
"bHK" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plasteel{broken = 1; dir = 4; icon_state = "damaged1"; tag = "icon-damaged1 (EAST)"},/area/maintenance/port{name = "Chapel Maintenance"})
"bHL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/port{name = "Chapel Maintenance"})
@@ -4510,10 +4507,9 @@
"bIT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
"bIU" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/engine/engineering)
"bIW" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/engineering_hacking{pixel_x = 3; pixel_y = 3},/obj/item/weapon/book/manual/wiki/engineering_construction,/turf/simulated/floor/plasteel,/area/engine/engineering)
-"bIX" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity South West"; dir = 4; network = list("Singularity")},/turf/space,/area/space)
"bIY" = (/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/engine/engineering)
"bIZ" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity South East"; dir = 8; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
-"bJa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
+"bJa" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/space,/area/solar/auxport)
"bJb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/stack/sheet/cardboard,/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
"bJc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/effect/decal/cleanable/cobweb,/obj/structure/table,/obj/item/weapon/newspaper,/obj/item/weapon/cigbutt,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/plating{burnt = 1; icon_state = "panelscorched"; tag = "icon-panelscorched"},/area/maintenance/port{name = "Chapel Maintenance"})
"bJd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/maintenance/port{name = "Chapel Maintenance"})
@@ -4886,12 +4882,11 @@
"bQg" = (/obj/structure/transit_tube{tag = "icon-S-NE"; icon_state = "S-NE"},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
"bQh" = (/obj/structure/transit_tube{tag = "icon-D-NW"; icon_state = "D-NW"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space)
"bQi" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space)
-"bQj" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless,/area/solar/port)
-"bQk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
-"bQl" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
+"bQj" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/space,/area/solar/auxport)
+"bQl" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/space,/area/solar/auxport)
"bQm" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
-"bQn" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
-"bQo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
+"bQn" = (/obj/structure/lattice/catwalk,/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/space,/area/solar/auxport)
+"bQo" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/o2{pixel_x = -2; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
"bQp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"bQq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"bQr" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar)
@@ -4950,7 +4945,7 @@
"bRt" = (/turf/simulated/floor/plasteel{broken = 1; dir = 4; icon_state = "damaged3"; tag = "icon-damaged3 (EAST)"},/area/maintenance/starboard)
"bRu" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/turf/space,/area/space)
"bRv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space)
-"bRw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
+"bRw" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
"bRx" = (/obj/structure/cable,/obj/machinery/power/solar_control{id = "aftport"; name = "Aft Port Solar Control"; track = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"bRy" = (/obj/item/stack/cable_coil{amount = 30},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"bRz" = (/obj/machinery/power/apc{dir = 4; name = "Aft Port Solar APC"; pixel_x = 23; pixel_y = 2},/obj/structure/cable,/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar)
@@ -4970,6 +4965,7 @@
"bRN" = (/obj/structure/stool,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/chapel/main)
"bRO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/fancy/carpet,/area/chapel/main)
"bRP" = (/obj/machinery/bot/secbot/beepsky{desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey, and with a sturdier reinforced chassis, too. "; health = 45; maxhealth = 45; name = "Officer Beepsky"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=1-Medbay1"; location = "0-Escape"},/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
+"bRQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/mineral/stacking_unit_console{machinedir = 3},/turf/simulated/wall,/area/maintenance/disposal)
"bRR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/security/prison)
"bRS" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/machinery/door_control{id = "permacell1"; name = "Cell 1 Lockdown"; pixel_x = -4; pixel_y = -25; req_access_txt = "2"},/obj/machinery/flasher_button{id = "PCell 1"; pixel_x = 6; pixel_y = -24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison)
"bRT" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; dir = 1; name = "Prison Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = -30},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prison)
@@ -5145,7 +5141,7 @@
"bVh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/gateway)
"bVi" = (/turf/simulated/wall/r_wall,/area/gateway)
"bVj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/gateway)
-"bVk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
+"bVk" = (/turf/simulated/floor/plating{dir = 1; icon_state = "warnplate"},/area/maintenance/disposal)
"bVl" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg1"; tag = "icon-platingdmg1"},/area/maintenance/port{name = "Chapel Maintenance"})
"bVm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
"bVn" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg2"; tag = "icon-platingdmg2"},/area/maintenance/port{name = "Chapel Maintenance"})
@@ -5244,7 +5240,7 @@
"bXc" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/gateway)
"bXd" = (/obj/machinery/gateway/centerstation,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/gateway)
"bXe" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/gateway)
-"bXf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
+"bXf" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/space)
"bXg" = (/obj/structure/closet/coffin,/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
"bXh" = (/obj/structure/closet/coffin,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/port{name = "Chapel Maintenance"})
"bXi" = (/turf/simulated/floor/plating{icon_state = "warnplate"},/area/chapel/main)
@@ -5291,6 +5287,7 @@
"bXX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/security/prison)
"bXY" = (/obj/machinery/shower{dir = 4},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/prison)
"bXZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plating,/area/security/prison)
+"bYa" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity North West"; dir = 4; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"bYb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 8},/area/hallway/secondary/entry{name = "Arrivals"})
"bYc" = (/obj/structure/stool/bed/chair,/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor,/area/space)
"bYd" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor/plasteel,/area/security/prison)
@@ -5506,6 +5503,13 @@
"ccf" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos)
"ccg" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/fancy/carpet,/area/security/hos)
"cch" = (/obj/structure/closet/secure_closet/hos,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos)
+"cci" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/space,/area/solar/port)
+"ccj" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/space,/area/solar/port)
+"cck" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/space,/area/solar/port)
+"ccl" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity South West"; dir = 4; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
+"ccn" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/space,/area/solar/port)
+"cco" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/space,/area/solar/port)
+"ccp" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/port)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5568,7 +5572,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaAaaBaaAaaAaaAaaBaaAaaAaaAaaBaaAaaAaaAaaBaaAaaAaaAaaBaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacaacaaaaaaaacaaaaaaaaaaacaaaaaaaaaaacaaaaaaaacaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaacaaaaaaaacaaaaaCaaCaaCaaCaaCaaaaacaaaaaaaacaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaacaaaaaaaacaaaaaDaaDaaDaaDaaDaaaaacaaaaaaaacaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacaaaaacaaaaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaaaacaaaaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaacaaDaaDaaDaaDaaDaaDaaEaaFaaEaaDaaDaaDaaDaaDaaDaacaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaacaaDaaDaaDaaGaaHaaEaaEaaIaaEaaEaaHaaJaaDaaDaaDaacaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5580,45 +5584,45 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacaacaaDaboaaDabvabwaaEaaEaaIaaEaaEaaJabxaaDabuaaDaacaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaDabyabzaaDaaDaaHaaEaaEaaEaaHabAabBabBabCaaDaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacabEabEabFabGabHaaDabIabIabJabIabIabuabKabLabMabNabNaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabOaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaabPabQabRabSabRabEabTabUabVabWabTabXabYabZabYacaacbaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccacdaccaaaaacaaaaaaaaaaaaaacaaaaacaacaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacabPaceacfacgachaciacjackaclacmacnacoacpacqacracsacbaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccactaccaacaacaaaaacaacaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacabEabEacuacvacwacxacyaczacAacBacCabNacDacEacFabNabNaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacGacHacIacIacIacIacIacIacIacIacIacIacIacIacIacJaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaacabEacKacLabEabEacMacNacOacPacQacRacSacRacTabNaacaaaaaAaaaaaaafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUacVacWacXacYacZadaadbadcacYaddacYacYadeadfacUaacaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaacadgadhadiadjadgadkadladmadnadkadkadoaacaacaacaacaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUadpadqadradradradradradradradradradradradpacUaacaacaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacaaaadgadsadtaduadvadwadxadyadzadAadAadAaacaaaaacaaaaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUadpadBadradCadDadDadDadEadDadDadDadDadradFacUaacaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaacadgadGadHadIadgadJadKadLadMadNadOadNabDabDaacaacaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacacUadpadQadradRadDadDadDadSadDadDadDadDadradTacUaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaadgadgadgadgadgadUadVadWadXadYadAadZaacaaaaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUaeaaebadraecadDadDadDadDadDaedaeeaefadradpacUaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaegaehaeiaejaekaelaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUaemaenadradraeoadDadDadDadDaepaeoadradraeqacUaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaegaeraesaesaetaesaeuaevaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaegaewaexaaaaeyaaaaezaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUaeAaeBadraeCaeDaeEaeFaeGaeHaeIaeJaeKadradpacUaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaeLaeMaeNaeOaeOaeOaePaeQaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeTaeUaeOaeOaeVaegaeWaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaeXaeYaeZadrafaafbafcafdafeaffafgafhafiadraeAacUaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaezaaaaeyaaaaacafjaewaexaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaafkaflaesaesaesafmaeMaacafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUafpafqafrafsaftafuafvaftafwafxafxafxafyadradpafzacIacJaaaafAafBafCaaaaaaaaaaaaaaaafnaaaafDafEafFafGafHafIaeMaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacafKafLafLafMafNafOafPafQafRafSafTafUafVafUafWafXafYadrafZacYagaacUaaaagbagcagdaaaafnaaaaaaaaaaaaaaaageagfaggaghagiagjaaaaaaaaaagkaacaacaaaaaaaaaaacaacaacaaaaaaaaaaaaaacaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaafJaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacaacacUagladradradragmagmagmagnagoagpagmagmagmadradradradpacUaacagbagcagdaacaacaaaaaaaaaaaaaaaagqagragsagtaguagqaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaacaaaaacaacaacaacaaaafJagvaacaacaacaacaaaaacaaaaaaaacaacaaaaaaaaaaacacUagwadragxaeeaeeagyagzafUagAafxagBagCadDadDadDadraeAacUagDagDagEagDagDaacaaaaaaaaaaaaaaaagqagFagGagHagIagqaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaccaccaccaccaccaccaccaccacGacIagJagKagLagJagJagMaccaccaccaccaccaccaaaaaaaaaaaaaacacUadpadradDadDadDagNagOafUagPafUagQagRadDadDadDadragSacUagTagUagVagWagDaacaaaaaaaaaaaaaacagXagXagGagYagXagXaacaaaaaaaaaaacaaaaacaaaaacaacaacaaaaaaaacaacaaaaaaagZahaahaahaagZaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacaacaacaacaaaaacaccahbahcahdaheahfaheahgahhafpahiahjahkahladfahmahgahnaheahoahpaccaacaaaaaaaaaaaaacUahqadradDadDadDahrahsafxahtafUahuahvaeeaeeahwadradpahxahyahzahAahBagTaacaaaaacaaaaacaacaacagXahCahDagXaacaacaacahEahEahEahFahFahFahFahFahEahEahEahEaacagvaaaagZahGahHahIagZaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaaAahJaaAaaAaaAaaAahJahJaaAaaAaaAaaAaaAaaAaaAaaAaaAaacaacaacaaaaaaaaaaaaaaaaccahKafpacYahLahMahNahOahPahQahRahSahTahRahUahVacYahWahXahYahZaccaacaiaaaaaacaacacUadpadragmagmagmagmaibaicaidaieaibagmagmagmagmadraifaigagTaihaiiaijaikailailailailailailailailaimainailailailailailaioaipaiqairaisaitaipaiuaivaiwahEaacaixaacagZaiyaizaiAagZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaacaaaaaaaacaacaaaaacaaaaaaaaaaacaacaaaaaaaaaaaAaacaaaaaaaaaaaaaaaaacaacaccaiBadpahRahRahRahRahRahRahRahRaiCaiDahRahRaccaiEaccaccaiFahZaccaaaaacaacaacaaaacUaiGadragxaeeaeeagyagzafUagAafxaiHagCadDadDadDadradpaiIagTagTaiJagTaiKaiLaiMaiNaiOaiPaiQaiRaiSaiTaiUaiSaiRaiRaiVaiWaiXaiYaiZaiXaiXajaaiXaiXajbajcajdajeajfajeagZajgajhajiagZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahJaaaajjajkajlaaaajjajkajlaacajjajkajlaaaajjajkajlaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaccahZajmahRajnajoajpajnajoajpajqajrajsajtahRajuajvajwaccajxajyaccaacaaaaacaacaaaacUajzadradDajAadDajBagOafUaidafUagQajCadDajAadDadrajDajEaccahAajFahEajGajHajIajIajIajIajIajIajIajJajKajLajLajLajLajLajLajLajLajLajLajLajLajLajMajNajdajOajPajQagZajRajSajTagZaacaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacajjajUajlaaaajjajUajlaacajjajUajlaaaajjajUajlaaaaaAaaaaaaaaaaaaaaaaaaaaaaacaccajVajWahRajXajYajZakaajoajpakbakcakdakeahRakfakgakhaccakiahZaccaacaacaiaaacaacacUajWadradDadDadDahrakjafxahtafUahuahvaeeaeeahwadrakkaklakmaknakoahEakpakqajIakraksaktakuakvajIakwakxakyakzakAakBakCakDakEakFakGakHakIakJajLajMakKajdakLakMakNakOakPakQakRajdaacaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacajjakSajlaaaajjakSajlafnajjakSajlaaaajjakSajlaacahJaaaaaaaaaaaaaaaaaaaaaaacaccakTadpahRakUakVajpakWakVajpakXakYakdakZahRalaahRahRahRadpalbaccaacaiaaacafnaacacUadpadragmagmagmagmaibalcaidaldaibagmagmagmagmadradpaleakmalfalgahEalhaliajIaljalkallalmalnaloalpakxakyalqalralsaltalualvalwalxalyalzalAalBalCalDajdalEalFalGalHalIalJalKajdaacaaaaaaaaaaacaaaaaaaaaaacaacaaaaacaacaaaaacaaaaaaaaaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjajUajlaacajjajUajlaacajjajUajlaaaajjajUajlaaaaaAaaaaaaaaaaaaaaaaaaaacaacaccakTaeAahRalLalMajpajpalNajpalOakdalPalQalRalSalTalUahRalVahKaccaacaaaaaaaacaacacUalWadragxaeeaeealXagzafUagAafxalYagCadDalZamaambamcamdameamfamgamhamiamjajIamkamlammamnamoajIampakxamqamraltamsamtamuamvamwamxamyamtamtamzamAamBajdamCalFalGalHalIalJamDajdaaaaaaamEamEamEamEamEamEamEamEamEamEamEamEamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjakSajlaacajjakSajlaaaajjakSajlaacajjakSajlaaaaacafnaaaaaaaaaaaaaacaacaaaaccamFadpahRamGamHamIamJamKamIamLamMamKamIamNamKamOamPahRaeAamQaccaacaacaacaacaacacUadpadradDadDadDamRagOafUagPafUagQamSadDamTadDadramUamVamWamXamYamZanaanbajIajIajIajIajIajIajIancakxandaltalralraltaneanfanganhanganianjajLajMankajdanlalJanmannanoanpanoajdaaaaaaamEanqanqanqamEanranranramEansansansamEantantantamEaacaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaajjakSajlaaaajjakSajlaaaajjakSajlaacajjakSajlaaaaacaaaaacaacaacaacaacaacaaaaccanuadpahRanvanwanxanyanxanzanAanBanCanDanDanEanFanGahRanHahZaccaccanIanIanIaccacUaeAadradDadDadDahranJafxanKafUahuahvaeeanLahwadranManNaccanOalfahEanPanQanRanSanTanUanVanWanXanYakxamqanZaoaaoaaoaaobaocangaodanganianjajLajMaoeajdajdajdaofajdajdajdajdajdaacaaaamEanqanqanqamEanraoganramEansaohansamEantaoiantamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaacaacajjakSajlaaaajjakSajlaacajjakSajlaaaajjakSajlaacaacaacaacaojaokaokaokaokaccaccaoladpahRaomaonaooaopaomahRahRaoqaorahRaosaotakdaouaovaowaoxaoyaozaoAaoBaoCaoDaoEaoFadragmagmagmagmaoGaoHaoIaoJaoGagTagTaoKagTaoLaoLaoLaoLaoMalfahEaoNaoOanUanUanUanUanXaoPanXanYakxakyaoQaoRaoSaoRaoTajLajLaoUajLajLajLajLaoVaoWaoXaoYaoZapaapbahEaacaaaaacaacaaaamEapcapdapeamEapfapgaphamEapiapjapkamEaplapmapnamEaacapoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacajjakSajlaacajjakSajlaaaajjakSajlaacajjakSajlaacaaaaojaojaojappapqaprapsaptapuapvajDahRajoapwajoapxajoahRapyapzapAahRapBapCapDakdalaapEapFapGapHapIapIapJapKapLapMadrapNapOapPapQapRafUapSapTapUagTapVapWapXapYapZaqaaoLaqbaqcahEaqdaoOaqeaqfaqgaqhaqiaqjaqkanYaqlakyaqmaqnaqoaqpaqqangaqraqraqrajLaqsaqtaquaqvamhamhamhaqwaqxahEaacaaaaacaaaaaaamEaqyaqzaqAamEaqyaqzaqAamEaqyaqzaqAamEaqyaqzaqAamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaqBaqCaqDaqEaqFaqDaqEaqEaqFaqDaqEaqEaqFaqDaqEaqEaqFaqDaqEaqGaqHaqIaqHaqJaqKaqLaqMaqNacXaqOaqPahRaqQaqRaqSaqTaqQahRaqUaqVaqWahRahRahRahRahRalaaqXaqYaqZaraarbarbarcardarearfambargarhariarjarkarlarmarnaroagTarparqarrarsartaruaoLarvarwahEarxaryarzarAarBarCarDarEarFarGakxakyaqqarHarIarJarKarLarMaqrarNajLarOarPamharQarRarSarTarUarVahEaacaacaaaaaaaacaaaarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaajjarYajlaacajjarYajlaaaajjarYajlaacajjarYajlaacaaaaojaojaojarZasaasbascasdaseaseaseahRahRahRahRahRahRahRasfasgashahRasiasjaskaslasmasnasoasoasoasoasoasoasoaspasqadrasrafUassastasuasvaswasxasyagTaszasAasBasCasDasDasEasFalfahEasGaoOasHasIasJasKasLasMaqkasNasOakyaqmaqpasPaqqaqqangaqrasQasRajLajMarUanSasSasTasUasVarUasWahEahEahEahEahEahEahEarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaaacaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaaaaaaajjarYajlafnajjarYajlaacajjarYajlaacajjarYajlaacaacaacaacaojaokaokaokascasXasYasZataatbasYatcatdateatfalRalRatgalRahRathatiatjatkatlatmasoatnatoatnatpatnasoatqatradragmatsattatsaoGagmagTagTagTagTatuasAatvatwatxatyaoLatzalfahEatAatBatCatDatEatFatGatHatIatJatKakyakyakyakyakyakyajLaqraqraqrajLatLarUatMatNatOatPatQarUatRatSaqtatTaqtatUatVatWatXaqzatYaqzatXaqzatYaqzatXaqzatYaqzatXaqzatYaqzaqzaacaaAaaAaaAaaAaaAaacatZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacajjarYajlaacajjarYajlaaaajjarYajlaaaajjarYajlaacaacaaaaacaacaacaacaacauaaubaucaudaueaufaugauhauiaujaukaseaulaumaseaunauoaupauqasoasoaurasoausautauuauvausasoauwauxauyauzauAauBauCauDakxagTauEauFauGauHauIauJaoLaoLaoLaoLaoLaoLaoLauKaoOauLauMauNauOauPauQaqkasNauRauSagXauTauUauVauWajLajLajLajLajLauXarUahEahEahEahEahEauYauZauZauZamhamhaqwavaatWavbavcavdaveavfavgavhaviavjavkavlaviavmavnavoavpaqzaaaaacaaaaaaaaaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacajjarYajlaacajjarYajlaaaajjarYajlaacajjarYajlaaaaacaaaaaaaacaaaaaaaaaacUavqaseavraseavsaseavtavuavvavwavxavyavzavAavBavCavDavEasoavFavGavHavIavJavKavLavMavNavOavPavQavRavSavTavUavVavWagTavXavYavZawaawbawcawdaweawdawfawgawhaoLawiaoOawjawkawkawkawkawkawkawlauRawmawnawoawpawoawqagXawrawsawtawuajMarUawvawwawxahEaaaaaaaaaaaaaaaaaaaaaarUawyatWawzawAawBawCawDawDawEawDawFawDawEawDawFawDawGawHaqzaaaamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjawIajlaacajjawIajlaaaajjawIajlafnajjawIajlaaaaaAaaaaaaaacaacaaaaacacUadpaseawJaseawKaseawLawMawNawOavxavyawPawQawQawRawSawQasoawTavGawUavGawVawWawXawYawZaxaaxbaxcaxdaxeaxfaxfanYakxagTaxgaxhaxiauHaxjatvaxkaxlaxmaxnawgaxoaoLaxpaxqawjaxraxsaxtaxuaxvaxwasNauRakxaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIanSanSaxJahEaaaaxKaxLaxLaxLaxMaaaarUajMatWaxNaxOaxPaqzaxQaxQaxQaxQaxRaxQaxQaxQaxRaxQaxQaxSaveaxTaxUaxVaxWaxWamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahJaaaajjarYajlaaaajjarYajlaaaajjarYajlaacajjarYajlaacaaAaacaacaacaccaccaccacUadpaseaseaseaseaseaxXaxYaxZayaaybavyavyawQaycaydayeayfasoaygavGavGavGayhayiavGayjasoatqaykaylaymaynayoaxfanYakxagTaypayqavZawaayraysawdaytayuayvayvayvaoLaywayxayyayzayAayBayCayDayEayFayGayHayIayJayKayLayMayNayOayNayPauyayQayRaySayTayUahEaaaayVayWayXayYayZaaaarUazaazbazcazdazeawCawDawDawDazfaxRazgaxQaxQaxRaxQaxQazhaqzaaaaqzaziazjaxWamEaacapoaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjarYajlaacajjarYajlaacajjarYajlaaaajjarYajlaaaaaAaaaabDazkazlazmaznazoazpazqazrazsaztazuaztaztaztazvaseavyazwawQazxazyazzazAasoazBavGavGavGazCayiazCazDasoaspaykazEaymazFazGaxfanYakxagTagTagDazHagDagTagTaoLaoLaoLaacaacaacaoLazIazJawjazKazLazMazNazOaxwasNauRakxawnazPazQazRazSagXazTagXazUawuazVarUazWazXazYahEaaaazZaAaaAbaAcayZaaaarUaAdaAeaAfaAgaAhaAiaAjaAkaAlaAmaAmaAkaAkaAnaxRaAoaAlaApawCaAqaAraAsaxWaxWamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjaAtajlaacajjaAtajlaacajjaAtajlaaaajjaAtajlaaaaaAaaaaaaaacacGacIacIaeXaAuaAvaAwaAxaseaAyaAzaseaAAaAyaseaABavyawQaACaADaAEaAFasoaAGavGavGaAHaAIaAJaAKaALasoaAMaANaAOaAPaAQaARaxfaASakxagXaATaAUaAVaAWaATagXaAXaAYawuaAZaAZaAZawuaBaawuawjaxwaxwaBbaxwaxwaxwasNauRaBcaBdaBdaBdaBdaBdaBdaBdawuawuawuaBearUahEaBfahEaBgaBgaBhaBiaBjaBkaBlaBmarUatOatWaBnazgaBoaqzaBpaBqaBraBsaBtaBqaxQaBuaxRaBuaBvaBwaqzaaaamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaacaaaaaaaaaaacaaaahJaaaaacaacacUaBxacYaByaBzaBAaBBaBCaseaBDaBEaseaBFaBGaseavyavyawQaBHaBIaBJaBKasoaBLaBLaBMaBLaBLaBLaBLaBLasoaBNaBOaBPaBQaBQaBRaBSaBTaBUaBVaBVaBWaBXaBXaBXaBYaBXaBXaBZaBVaBVaCaaCbaCcaCdaCeaCeaCeaCfaCgaCgaCgaChauRakxaCjaCiaClaCkaCnaCmaCoaCpaCqaCraCsaCtaCuaCvamhaCwaCxaCyaCzaCAaCBaCCaBmaCDaCEaCFaCGaCHaCIaqzaCJaCKaCLaCMaCNaCOaCPaBuaCQaCRaxPaCSaveaxTaxUaCTaCUaCUamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaaAahJaaAahJaaAaaAaaAaaAaaAaaAaaAaaAahJaaAaaAaaAaaAaaaaaaaaaacUaCVaseaseaCWasYasYasYaCXaCYaCZaseaDaaCYaseavyavyawQaDbaDbaDcaDbaDdaDeaDfavGaDgaBLaDhaDiaDjaseaspaykaylaDkaDlaDmaxfaDnaDoaDnaDnaDpaDnaDnaDnaDnaDoaDnaDpaDqaDnaDnaDnaDraDsaDnaDnaDnaDtaDuaDnaDoauRauRakxaDwaDvaDxaDvaDzaDyaDAaDBaDCaDDaDEaipaDFaDGaDHaDIaDJaDKaDLaDMaDNaDOaBmaDPaDQaDRaDSaxQaDTaqzaBpaDUaBraxQaBsaDVaDWaBuaxQaBuaDXaDYaqzaaaaqzaDZaEaaCUamEaacaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaabPabQabRabSabRabEabTabUabVabWabTabXabYabZabYacaacbaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaqCaaAaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccacdaccaaaaaaaaaaaaaaaaaaaacaaaaacaacaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacabPaceacfacgachaciacjackaclacmacnacoacpacqacracsacbaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaacaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccactaccaacaaaaaaaacaacaaaaacaacaacaacaacaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacabEabEacuacvacwacxacyaczacAacBacCabNacDacEacFabNabNaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaarYaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacGacHacIacIacIacIacIacIacIacIacIacIacIacIacIacJaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaacabEacKacLabEabEacMacNacOacPacQacRacSacRacTabNaacaaaaaAaaaaaaafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAtaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUacVacWacXacYacZadaadbadcacYaddacYacYadeadfacUaacaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaacadgadhadiadjadgadkadladmadnadkadkadoaacaacaacaacaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaacaAtaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUadpadqadradradradradradradradradradradradpacUaacaacaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacaaaadgadsadtaduadvadwadxadyadzadAadAadAaacaaaaacaaaaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjajkbrAaaaaacaAtaacaaaajjajkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUadpadBadradCadDadDadDadEadDadDadDadDadradFacUaacaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaacadgadGadHadIadgadJadKadLadMadNadOadNabDabDaacaacaacaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacacUadpadQadradRadDadDadDadSadDadDadDadDadradTacUaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaadgadgadgadgadgadUadVadWadXadYadAadZaacaaaaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUaeaaebadraecadDadDadDadDadDaedaeeaefadradpacUaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaegaehaeiaejaekaelaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUaemaenadradraeoadDadDadDadDaepaeoadradraeqacUaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaegaeraesaesaetaesaeuaevaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaegaewaexaaaaeyaaaaezaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUaeAaeBadraeCaeDaeEaeFaeGaeHaeIaeJaeKadradpacUaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaeLaeMaeNaeOaeOaeOaePaeQaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeRaeSaeRaeRaeTaeUaeOaeOaeVaegaeWaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaeXaeYaeZadrafaafbafcafdafeaffafgafhafiadraeAacUaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaezaaaaeyaaaaacafjaewaexaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaafkaflaesaesaesafmaeMaacafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAtaacaacaacaAtaacaacaacaAtaacaaaajlajlajlajlajlajlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacUafpafqafrafsaftafuafvaftafwafxafxafxafyadradpafzacIacJaaaafAafBafCaaaaaaaaaaaaaaaafnaaaafDafEafFafGafHafIaeMaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQjbJabJabJabBkbJabJabJaajUbJabJaakSbBkbBkbBkbBkaqBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacafKafLafLafMafNafOafPafQafRafSafTafUafVafUafWafXafYadrafZacYagaacUaaaagbagcagdaaaafnaaaaaaaaaaaaaaaageagfaggaghagiagjaaaaaaaaaagkaacaacaaaaaaaaaaacaacaacaaaaaaaaaaaaaacaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAtaacaacaacaAtaacaacaacaAtaacaaaaqDaqDaqDaqDaqDaqDaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaafJaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacaacacUagladradradragmagmagmagnagoagpagmagmagmadradradradpacUaacagbagcagdaacaacaaaaaaaaaaaaaaaagqagragsagtaguagqaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaacaaaaacaacaacaacaaaafJagvaacaacaacaacaaaaacaaaaaaaacaacaaaaaaaaaaacacUagwadragxaeeaeeagyagzafUagAafxagBagCadDadDadDadraeAacUagDagDagEagDagDaacaaaaaaaaaaaaaaaagqagFagGagHagIagqaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaacaacaacaccaccaccaccaccaccaccaccacGacIagJagKagLagJagJagMaccaccaccaccaccaccaaaaaaaaaaaaaacacUadpadradDadDadDagNagOafUagPafUagQagRadDadDadDadragSacUagTagUagVagWagDaacaaaaaaaaaaaaaacagXagXagGagYagXagXaacaaaaaaaaaaacaaaaacaaaaacaacaacaaaaaaaacaacaaaaaaagZahaahaahaagZaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaacaacaaaaacaccahbahcahdaheahfaheahgahhafpahiahjahkahladfahmahgahnaheahoahpaccaacaaaaaaaaaaaaacUahqadradDadDadDahrahsafxahtafUahuahvaeeaeeahwadradpahxahyahzahAahBagTaacaaaaacaaaaacaacaacagXahCahDagXaacaacaacahEahEahEahFahFahFahFahFahEahEahEahEaacagvaaaagZahGahHahIagZaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaAaaaaaaaaaaaaaccahKafpacYahLahMahNahOahPahQahRahSahTahRahUahVacYahWahXahYahZaccaacaiaaaaaacaacacUadpadragmagmagmagmaibaicaidaieaibagmagmagmagmadraifaigagTaihaiiaijaikailailailailailailailailaimainailailailailailaioaipaiqairaisaitaipaiuaivaiwahEaacaixaacagZaiyaizaiAagZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqCaaaaaaajjbBkbrAaaaajjbBkbrAaaaajjbBkbrAaaaaaaaaaaaaaaaaacaacaccaiBadpahRahRahRahRahRahRahRahRaiCaiDahRahRaccaiEaccaccaiFahZaccaaaaacaacaacaaaacUaiGadragxaeeaeeagyagzafUagAafxaiHagCadDadDadDadradpaiIagTagTaiJagTaiKaiLaiMaiNaiOaiPaiQaiRaiSaiTaiUaiSaiRaiRaiVaiWaiXaiYaiZaiXaiXajaaiXaiXajbajcajdajeajfajeagZajgajhajiagZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaajjaqFbrAaaaaacaAtaacaaaajjaqFbrAaaaaacaacaaaaaaaaaaaaaccahZajmahRajnajoajpajnajoajpajqajrajsajtahRajuajvajwaccajxajyaccaacaaaaacaacaaaacUajzadradDajAadDajBagOafUaidafUagQajCadDajAadDadrajDajEaccahAajFahEajGajHajIajIajIajIajIajIajIajJajKajLajLajLajLajLajLajLajLajLajLajLajLajLajMajNajdajOajPajQagZajRajSajTagZaacaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaajjbBkbrAaaaaaaaacaaaaacaacaaaaaaaaaaaaaacaccajVajWahRajXajYajZakaajoajpakbakcakdakeahRakfakgakhaccakiahZaccaacaacaiaaacaacacUajWadradDadDadDahrakjafxahtafUahuahvaeeaeeahwadrakkaklakmaknakoahEakpakqajIakraksaktakuakvajIakwakxakyakzakAakBakCakDakEakFakGakHakIakJajLajMakKajdakLakMakNakOakPakQakRajdaacaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaccakTadpahRakUakVajpakWakVajpakXakYakdakZahRalaahRahRahRadpalbaccaacaiaaacafnaacacUadpadragmagmagmagmaibalcaidaldaibagmagmagmagmadradpaleakmalfalgahEalhaliajIaljalkallalmalnaloalpakxakyalqalralsaltalualvalwalxalyalzalAalBalCalDajdalEalFalGalHalIalJalKajdaacaaaaaaaaaaacaaaaaaaaaaacaacaaaaacaacaaaaacaaaaaaaaaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjbBkbrAaaaaaAaaaaaaaaaaaaaaaaaaaaaaacaacaccakTaeAahRalLalMajpajpalNajpalOakdalPalQalRalSalTalUahRalVahKaccaacaaaaaaaacaacacUalWadragxaeeaeealXagzafUagAafxalYagCadDalZamaambamcamdameamfamgamhamiamjajIamkamlammamnamoajIampakxamqamraltamsamtamuamvamwamxamyamtamtamzamAamBajdamCalFalGalHalIalJamDajdaaaaaaamEamEamEamEamEamEamEamEamEamEamEamEamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjbBkbrAaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaccamFadpahRamGamHamIamJamKamIamLamMamKamIamNamKamOamPahRaeAamQaccaacaacaacaacaacacUadpadradDadDadDamRagOafUagPafUagQamSadDamTadDadramUamVamWamXamYamZanaanbajIajIajIajIajIajIajIancakxandaltalralraltaneanfanganhanganianjajLajMankajdanlalJanmannanoanpanoajdaaaaaaamEanqanqanqamEanranranramEansansansamEantantantamEaacaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaajjbBkbrAaaaaaAaaaaaaaaaaaaaaaaacaacaacaaaaccanuadpahRanvanwanxanyanxanzanAanBanCanDanDanEanFanGahRanHahZaccaccanIanIanIaccacUaeAadradDadDadDahranJafxanKafUahuahvaeeanLahwadranManNaccanOalfahEanPanQanRanSanTanUanVanWanXanYakxamqanZaoaaoaaoaaobaocangaodanganianjajLajMaoeajdajdajdaofajdajdajdajdajdaacaaaamEanqanqanqamEanraoganramEansaohansamEantaoiantamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAtaacaaaaaaaaaaacaacaojaokaokaokaokaccaccaoladpahRaomaonaooaopaomahRahRaoqaorahRaosaotakdaouaovaowaoxaoyaozaoAaoBaoCaoDaoEaoFadragmagmagmagmaoGaoHaoIaoJaoGagTagTaoKagTaoLaoLaoLaoLaoMalfahEaoNaoOanUanUanUanUanXaoPanXanYakxakyaoQaoRaoSaoRaoTajLajLaoUajLajLajLajLaoVaoWaoXaoYaoZapaapbahEaacaaaaacaacaaaamEapcapdapeamEapfapgaphamEapiapjapkamEaplapmapnamEaacapoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaAtaacaacaacaqEaojaojaojappapqaprapsaptapuapvajDahRajoapwajoapxajoahRapyapzapAahRapBapCapDakdalaapEapFapGapHapIapIapJapKapLapMadrapNapOapPapQapRafUapSapTapUagTapVapWapXapYapZaqaaoLaqbaqcahEaqdaoOaqeaqfaqgaqhaqiaqjaqkanYaqlakyaqmaqnaqoaqpaqqangaqraqraqrajLaqsaqtaquaqvamhamhamhaqwaqxahEaacaaaaacaaaaaaamEaqyaqzaqAamEaqyaqzaqAamEaqyaqzaqAamEaqyaqzaqAamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQlbJabQnbJabJaaqHaqIaqHaqJaqKaqLaqMaqNacXaqOaqPahRaqQaqRaqSaqTaqQahRaqUaqVaqWahRahRahRahRahRalaaqXaqYaqZaraarbarbarcardarearfambargarhariarjarkarlarmarnaroagTarparqarrarsartaruaoLarvarwahEarxaryarzarAarBarCarDarEarFarGakxakyaqqarHarIarJarKarLarMaqrarNajLarOarPamharQarRarSarTarUarVahEaacaacaaaaaaaacaaaarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaqEaojaojaojarZasaasbascasdaseaseaseahRahRahRahRahRahRahRasfasgashahRasiasjaskaslasmasnasoasoasoasoasoasoasoaspasqadrasrafUassastasuasvaswasxasyagTaszasAasBasCasDasDasEasFalfahEasGaoOasHasIasJasKasLasMaqkasNasOakyaqmaqpasPaqqaqqangaqrasQasRajLajMarUanSasSasTasUasVarUasWahEahEahEahEahEahEahEarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaarWaaaarXaaaaacaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaojaokaokaokascasXasYasZataatbasYatcatdateatfalRalRatgalRahRathatiatjatkatlatmasoatnatoatnatpatnasoatqatradragmatsattatsaoGagmagTagTagTagTatuasAatvatwatxatyaoLatzalfahEatAatBatCatDatEatFatGatHatIatJatKakyakyakyakyakyakyajLaqraqraqrajLatLarUatMatNatOatPatQarUatRatSaqtatTaqtatUatVatWatXaqzatYaqzatXaqzatYaqzatXaqzatYaqzatXaqzatYaqzaqzaacaaAaaAaaAaaAaaAaacatZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacauaaubaucaudaueaufaugauhauiaujaukaseaulaumaseaunauoaupauqasoasoaurasoausautauuauvausasoauwauxauyauzauAauBauCauDakxagTauEauFauGauHauIauJaoLaoLaoLaoLaoLaoLaoLauKaoOauLauMauNauOauPauQaqkasNauRauSagXauTauUauVauWajLajLajLajLajLauXarUahEahEahEahEahEauYauZauZauZamhamhaqwavaatWavbavcavdaveavfavgavhaviavjavkavlaviavmavnavoavpaqzaaaaacaaaaaaaaaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaacUavqaseavraseavsaseavtavuavvavwavxavyavzavAavBavCavDavEasoavFavGavHavIavJavKavLavMavNavOavPavQavRavSavTavUavVavWagTavXavYavZawaawbawcawdaweawdawfawgawhaoLawiaoOawjawkawkawkawkawkawkawlauRawmawnawoawpawoawqagXawrawsawtawuajMarUawvawwawxahEaaaaaaaaaaaaaaaaaaaaaarUawyatWawzawAawBawCawDawDawEawDawFawDawEawDawFawDawGawHaqzaaaamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacacUadpaseawJaseawKaseawLawMawNawOavxavyawPawQawQawRawSawQasoawTavGawUavGawVawWawXawYawZaxaaxbaxcaxdaxeaxfaxfanYakxagTaxgaxhaxiauHaxjatvaxkaxlaxmaxnawgaxoaoLaxpaxqawjaxraxsaxtaxuaxvaxwasNauRakxaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIanSanSaxJahEaaaaxKaxLaxLaxLaxMaaaarUajMatWaxNaxOaxPaqzaxQaxQaxQaxQaxRaxQaxQaxQaxRaxQaxQaxSaveaxTaxUaxVaxWaxWamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaccaccaccacUadpaseaseaseaseaseaxXaxYaxZayaaybavyavyawQaycaydayeayfasoaygavGavGavGayhayiavGayjasoatqaykaylaymaynayoaxfanYakxagTaypayqavZawaayraysawdaytayuayvayvayvaoLaywayxayyayzayAayBayCayDayEayFayGayHayIayJayKayLayMayNayOayNayPauyayQayRaySayTayUahEaaaayVayWayXayYayZaaaarUazaazbazcazdazeawCawDawDawDazfaxRazgaxQaxQaxRaxQaxQazhaqzaaaaqzaziazjaxWamEaacapoaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDazkazlazmaznazoazpazqazrazsaztazuaztaztaztazvaseavyazwawQazxazyazzazAasoazBavGavGavGazCayiazCazDasoaspaykazEaymazFazGaxfanYakxagTagTagDazHagDagTagTaoLaoLaoLaacaacaacaoLazIazJawjazKazLazMazNazOaxwasNauRakxawnazPazQazRazSagXazTagXazUawuazVarUazWazXazYahEaaaazZaAaaAbaAcayZaaaarUaAdaAeaAfaAgaAhaAiaAjaAkaAlaAmaAmaAkaAkaAnaxRaAoaAlaApawCaAqaAraAsaxWaxWamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacGacIacIaeXaAuaAvaAwaAxaseaAyaAzaseaAAaAyaseaABavyawQaACaADaAEaAFasoaAGavGavGaAHaAIaAJaAKaALasoaAMaANaAOaAPaAQaARaxfaASakxagXaATaAUaAVaAWaATagXaAXaAYawuaAZaAZaAZawuaBaawuawjaxwaxwaBbaxwaxwaxwasNauRaBcaBdaBdaBdaBdaBdaBdaBdawuawuawuaBearUahEaBfahEaBgaBgaBhaBiaBjaBkaBlaBmarUatOatWaBnazgaBoaqzaBpaBqaBraBsaBtaBqaxQaBuaxRaBuaBvaBwaqzaaaamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacacUaBxacYaByaBzaBAaBBaBCaseaBDaBEaseaBFaBGaseavyavyawQaBHaBIaBJaBKasoaBLaBLaBMaBLaBLaBLaBLaBLasoaBNaBOaBPaBQaBQaBRaBSaBTaBUaBVaBVaBWaBXaBXaBXaBYaBXaBXaBZaBVaBVaCaaCbaCcaCdaCeaCeaCeaCfaCgaCgaCgaChauRakxaCjaCiaClaCkaCnaCmaCoaCpaCqaCraCsaCtaCuaCvamhaCwaCxaCyaCzaCAaCBaCCaBmaCDaCEaCFaCGaCHaCIaqzaCJaCKaCLaCMaCNaCOaCPaBuaCQaCRaxPaCSaveaxTaxUaCTaCUaCUamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUaCVaseaseaCWasYasYasYaCXaCYaCZaseaDaaCYaseavyavyawQaDbaDbaDcaDbaDdaDeaDfavGaDgaBLaDhaDiaDjaseaspaykaylaDkaDlaDmaxfaDnaDoaDnaDnaDpaDnaDnaDnaDnaDoaDnaDpaDqaDnaDnaDnaDraDsaDnaDnaDnaDtaDuaDnaDoauRauRakxaDwaDvaDxaDvaDzaDyaDAaDBaDCaDDaDEaipaDFaDGaDHaDIaDJaDKaDLaDMaDNaDOaBmaDPaDQaDRaDSaxQaDTaqzaBpaDUaBraxQaBsaDVaDWaBuaxQaBuaDXaDYaqzaaaaqzaDZaEaaCUamEaacaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacacUaifaseaEbaEcaEdaEeaEfaEgaEhaEiasYaEjaEhaseavyavyawQaEkaElaEmaEnaDdaEoaEpavGaEqaEraEsaEtaEuaEvaEwaExaylaDkaDlaDmaEyaEyaEyaEyaEzaEAaEzaEyaEyaEBaEBaECaEDaEEaEBaEBaEBaEBaEBaEFaEFaEFaEGaEFaEFaEFavRaEHavRaEJaEIaELaEKaENaEMaBdaEOaEPaEQaEQaEQaEQaEQaEQaERaESaBmaETaEUaEVaEWaBmaEXanSatWaEYaxQaDTaqzaEZaFaaCNaFbaCLaFcaFdaBuaAoaFeaFfaFgawCaAqaAraFhaCUaCUamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacacUaFiaseaFjavyaFkaFlaFmaFnaFoaFpaFqavyavyaFravyavyawQaFsaFtaFuaFvaFwavGaFxaFyavIaFzaFAaFBaFCasYaFDaFEaylaDkaFFaDmaEyaFGaFHaFIaFJaFKaFLaFMaEyaFNaFOaFPaFQaFRaFSaFTaFUaFVaEBaFWaFXaFYaFZaGaaGaaGbawuaGcawuaBdaGdaDvaGeaDvaGfaBdaGgaEPaGhaGiaGjaGkaGlaEQaGmaGnaGoaGpaGqaEVaGraBmaGsaGtatWaqzaqzaGuaqzaGvaFaaGwaxQaCLaFcaGxaBuaBuaxQaxQaGyaqzaaaamEamEamEamEamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacacUadpaseaGzaGAaGBaGCaGDaGEaEtaEtaGFaEtaEtaGGaGHaGIawQaGJaFvaFvaGKaDdaGLaAHaGMaGNaDdaGOaGPaGQaGRaGRaGRaGSaGSaGSaGSaGSaGTaGUaGVaFJaGWaGXaGYaEyaGZaHaaHbaHcaHdaHeaHeaHeaHeaHfaGaaHgaHhaHiaHhaHjaGbaHkaHlaHmaBdaHnaHpaHoaHraHqaBdaoNaEPaHsaHtaHuaHuaHvaHwaHxaHyaBmaHzaHAaEVaHBaBmaHCaHDatWaHEaHFaHGaHFaHHaFaaHIaxQaHJaFcaHKaBuaHLaAkaAkaHMaHNaHOaHPaHQaHRaHRamEaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5632,8 +5636,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaPQaPQaPQaPRaPSaPSaPTaPUaPVaseaPWavyaJjaGHavyavyaNeaPXaPhaNVaPYaPZaQaaNWaQbaQcaQdaQeaIaaIbaKMaQfaQgaKOaKRaKOaQhaQiaQjaOhaOhaQkaQlaQlaQlaQlaQlaQlaQlaQlaQlaQmaQnaOhaOhaOhaOqaNxaNxaQoaNxaNxaNxaNxaQpaNxaNxaNxaNxaQqaNxaQraNxaOCaQsaQtaQuaQvaQwaQxaQyaOCaQzaNxaMJaaaaNHaQAaQBaQCaQBaQDaNHaaaatWaQEaQEaQFaQGaQHaQIaQJaQKaQLaQMaQNaQOaQPatWaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaaaPQaQQaQRaQSaQTaQUaQVaQWaQXaseaOwavyaQZaGAavyavyaRaaRbaPhaNVaRcaRdaReaNWaRfaRfaRgaRfaObaRiaKMaIkaRjaOdaKRaOdaRlaIkaRmaOgaOhaRnaRoaRoaRoaRoaRoaRoaRoaRoaRoaRpaOhaOhaOhaRqaRraRraRraRraRraRraRsaRtaRuaRvaRwaRraRraRraRxaRxaRxaOCaQsaRyaRzaRAaRzaRBaQyaOCaHyaHyaMJaaaaNHaRCaRDaREaRDaRFaNHaaaatWaRGaRHaRIaRJaRKaRLaRMaRNaROaRPaRQaRRaRSatWaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaRTaRUaRVaRVaRVaRWaQVaebaRXaseaRYaRZaSaavyavyavyaNeaSbaPhaNVaScaSdaSeaNWavyavyaCYavyavyaSfaSgaGRaOeaKOaKRaKOaOfaGRaGRaPsaOhaRnaRoaSkaSlaSmaSnaSmaSoaSpaRoaSqaQlaSraOhaOhaRraSsaStaSuaSvaSwaSxaSxaSyaSzaSzaSAaSBaRraNxaNxaSCaOCaSDaSEaSFaSGaSHaSIaSJaOCaHyaHyaMJaacaNHaSKaSLaSMaSNaSOaNHaacatWaSPaSPaSQaxQaxQaBuaSRaSSaSTaSUaSVaSWaSXatWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaRTaSYaSZaPpaRVaRhaQVaebaTbaseaTcaTeaTdaTgaTfaThaNeaTiaTjaNVaTkaTlaTmaNWaTnaToaToaTpavyavyaTqaGRaOxaSiaShaTaaSjaGRaGRaOhaOhaRnaRoaTwaTxaTyaTyaTyaTzaTAaRoaRoaRoaRpaOhaOhaRraTBaSxaSxaSxaSxaTCaSxaSxaSxaSxaTDaTEaRraNxaNxaNxaOCaTFaTGaTHaTIaTHaTJaTKaOCaNxaNxaMJaaaaNHaTLaNHaTMaNHaTNaNHaaaatWaTOaTOaTPaTQaTRaTSaTTaTUaTVaTWaTXaTYaTZatWaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaacaacaRTaRTaRTaSYaPQaUaaUbbclaQVaebadpaseaEgaseaUdaseaUeaseaseaUfaUgaUhaUiaUjaUhaUhaUkavxavxavxaFraFravxaGRaGRaGRaGRaGRaGRaGRaGRaUmaOhaRnaRoaUnaUoaTzaTzaTzaTzaUpaUqaUraUqaOhaOhaOhaRtaUsaUtaUuaSxaUvaUwaUxaSxaSxaSxaUyaUzaRraNxaNxaNxaOCaUAaQwaUBaUCaUDaQwaUEaOCaNxaHyaMJaaaaacaUFaUGaUHaUIaUJaacaaaatWatWatWaUKaqzaULaUMaUNaUOaUPatWaUQaURaUSatWaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaRTaSYaSZaPpaRVaRhaQVaebaTbaseaTcaTebQobRwaqGaThaNeaTiaTjaNVaTkaTlaTmaNWaTnaToaToaTpavyavyaTqaGRaOxaSiaShaTaaSjaGRaGRaOhaOhaRnaRoaTwaTxaTyaTyaTyaTzaTAaRoaRoaRoaRpaOhaOhaRraTBaSxaSxaSxaSxaTCaSxaSxaSxaSxaTDaTEaRraNxaNxaNxaOCaTFaTGaTHaTIaTHaTJaTKaOCaNxaNxaMJaaaaNHaTLaNHaTMaNHaTNaNHaaaatWaTOaTOaTPaTQaTRaTSaTTaTUaTVaTWaTXaTYaTZatWaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaacaacaRTaRTaRTaSYaPQaUaaUbbVkbRQaebadpaseaEgaseaUdaseaUeaseaseaUfaUgaUhaUiaUjaUhaUhaUkavxavxavxaFraFravxaGRaGRaGRaGRaGRaGRaGRaGRaUmaOhaRnaRoaUnaUoaTzaTzaTzaTzaUpaUqaUraUqaOhaOhaOhaRtaUsaUtaUuaSxaUvaUwaUxaSxaSxaSxaUyaUzaRraNxaNxaNxaOCaUAaQwaUBaUCaUDaQwaUEaOCaNxaHyaMJaaaaacaUFaUGaUHaUIaUJaacaaaatWatWatWaUKaqzaULaUMaUNaUOaUPatWaUQaURaUSatWaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUTaUUaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfacYaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaVqaVjaVraVsaVsaVsaVsaVsaVsaVuaVvaVwaVxaVxaVxaVxaOqaOhaOhaRnaRoaTwaTxaVyaTzaTzaVzaVAaRoaRoaRoaRpaOhaVBaRraVCaVDaSxaSxaSxaVEaSxaVFaVGaSxaUyaVHaRraNxaNxaNxaOCaVIaVJaVKaVLaVKaVJaVMaOCaNxaNxaMJaMJaMJaVNaVOaVPaVOaVQaMJaMJaMJaVRaVSaNtaVTaVUaVVaVWaVXaVXatWaVYaVZaWaaWbaWbaWbaWbaWbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaPQaPQaPQaPQaPQaWcaWdaWeaPSaWfaWgaWhaWgaWgaWiaWjaWkaWlaWmaWnaWoaWpaWqaWraWsaWtaWuaTraVxaVxaVxaVxaVxaVxaVxaVxaVxaVxaVxaVxaOqaOhaOhaRnaRoaWyaSlaSmaSnaSmaSoaWzaRoaWAaWBaWCaWDaOhaRtaSxaWEaSxaSxaSxaWEaSxaSxaSxaSxaWFaSxaRtaNxaNxaNxaWGaWHaWHaWHaWHaWHaWHaWHaWIaPzaPzaWJaWKaWLaWMaWNaWOaWPaWQaWRaWRaWSaWTaNxaNxaNxaNxaNxaNxaNxaWUaWVaWWaWXaWYaWZaXaaXbaXcaWbabDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaPQaPQaPQaPQaPQaXdaXdaXdaXdaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXoaUhaXpaTsaVxaXraVxaVxaVxaVxaVxaVxaVxaVxaVxaVxaOqaOhaOhaRnaRoaRoaRoaRoaRoaRoaRoaRoaRoaXsaOhaOhaOhaRqaRraXtaUtaUuaXuaUsaXvaXwaXxaXyaXzaXAaXBaXCaNxaXDaNxaRxaNxaNxaNxaNxaNxaNxaNxaNxaNxaNxaNxaNxaXEaNxaNxaXFaXGaXHaXGaXGaXGaXGaXGaXGaXGaXGaXGaXIaXJaXKaXLaXMaXNaXOaWZaXPaXQaXRaWbabDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5644,50 +5648,50 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXdbbSbbTbbUbbVbbWbbXbbYbbZbcabcabcabcbbcabcabcabcabccaYbaVxaYcbcdaZhbceaZhbcfbcgbchbcibchbcjaYcbckbbjbHebcmbblbcnbcobbkbcpbcpbbjbcqbcqbcrbcsbbpbctbcubcvbbpbcwbcxbcybczbcAbcAaYqaYrbalaYraXCbcBaNxbamaZwbanbanbanbanbanaZwbaobapaZzbcCbcDaZzbcEbcFbbybcGbcHaZEbcIbcJbcKbcLbcMbcNbcObcPaZEbcQaZIbcRbbLaYObcSbcTbcUbcUbcUbcVbcWaZQbcXbcYbcZbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaXdbdbbdcbddbdeaQWbdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqaYbaVxbbbbdrbdrbdrbdsbdtbdubdvbdvbdvbdwbdxbdybbjbdzbdAbdBbdCbdDbdCbcpbcpbdEbdFbdGbdHbdGbdIbdGbdGbdGbdJbcAbcxbdKbczbcAbcAbdLbdMbdNaYraXCbdOaNxbambdPbanbanbanbanbanbdPbaobdQaZzbcCbbybdRbdSbdTbdUbdVbcHaZEbdWbdXbdWbdYbdZbeabeabebaZEbecaZIbedbcUaYObcUaXObcUbcUbcUbeeaYWbefbegbbRbbRaWzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaXdaXdaXdaXdaXdbcabehbeibcabcabejbekbelbembenbeobepaVxaYbaVxaYcbeqbeqbeqbeqaZjberbesbesbesbesaYcbetbbjbeubevbewbcpbcpbcpbcpbexbeybdGbdGbdHbezbdGbdGbeAbdGbbpbeBbeCbeDbeEbeFbeGaXCbeHbeIaXCaXCbeJaNxbamaZwbanbanbanbanbanaZwbaobeKaZzaZzaZzaZzaZzaZCaZzbeLbeMaZEbeNbeObePbeQbeRaZEbeSbeTbeUbaAaZIbeVbcUaYObcUbeWbeXbeXbeXbeXbeXbeXbeXbeXbeXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbcabeYbeZbfabfbbfcbfdbfebcabffbfgbfhbfibembdobfjbfkaYbaVxaYcbflbdrbdrbdraZjbfmbdrbdrbdrbfnaYcbfobbjbfpbfqbfrbfsbfsbfsbcpbcpbftbdGbdGbfubfvbfwbfxbfybfzbbpbbpbfAbbpbfBbbpbbpaXCbfCbfDbfEaXCbfFaNxbamaZwbanbanbanbanbanaZwbaobfGbfHbfIbfJbfKbfLbfMbfNbfObfPaZEbfQbfRbdWbfSbfTaZEbfUbfVbfWbfXaZIaZIaZIbfYbfZaXObgabgbbgcbgdbgebgfbggbghbeXaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaabcabgibgjbgkbglbgmbgnbgobcabffbfgbgpbembgqbcabcabgrbgsbgtaYcbgubgubgubguaZjbfmbgvbgvbgvbgvaYcbgwbbjbgxbgybewbcpbcpbcpbgzbgAbbjbgBbdGbgCbfxbgDbgEbgFbgGbgHbgIbgJbgKbgLbgMbgNaXCbfCbgObgPaXCbgQaNxbambdPbanbanbanbanbanbdPbaobapbfHbgRbgSbgSbgTbgUbgSbgVbgWaZEbgXbgYbgZbhabdWaZEbhbbhcbhcbhdbhebhfbhgbhhbhibhjbhkbhlbhmbhnbgfbhobhpbhqbeXaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbcabeYbeZbfabfbbfcbfdbfebcabffbfgbfhbfibembdobfjbfkaYbaVxaYcbflbdrbdrbdraZjbfmbdrbdrbdrbfnaYcbfobbjbfpbfqbfrbfsbfsbfsbcpbcpbftbdGbdGbfubfvbfwbfxbfybfzbbpbbpbfAbbpbfBbbpbbpaXCbfCbfDbfEaXCbfFaNxbamaZwbanbanbanbanbanaZwbaobfGbfHbfIbfJbfKbfLbfMbfNbfObfPaZEbfQbfRbdWbfSbfTaZEbfUbfVbfWbfXaZIaZIaZIbfYbfZaXObgaawIbgcbgdbgebgfbggbghbeXaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaabcabgibgjbgkbglbgmbgnbgobcabffbfgbgpbembgqbcabcabgrbgsbgtaYcbgubgubgubguaZjbfmbgvbgvbgvbgvaYcbgwbbjbgxbgybewbcpbcpbcpbgzbgAbbjbgBbdGbgCbfxbgDbgEbgFbgGbgHbgIbgJbgKbgLbgMbgNaXCbfCbgObgPaXCbgQaNxbambdPbanbanbanbanbanbdPbaobapbfHbgRbgSbgSbgTbgUbgSbgVbgWaZEbgXbgYbgZbhabdWaZEbhbbhcbhcaTfaTdbclaTgbhdbgbbhfbhebhgbhmbhnbgfbhobhpbhqbeXaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbcabhrbfabhsbhtbhubhvbhwbcabffbhxbfibfibembhybcabhzaYbbhAaYcbdrbdrbdrbdraZjbhBbhCbhDbhEaOybhGbhHbbjbhIbhJbfrbfsbfsbfsbhKbfsbbjbhLbhMbhNbdGbezbdGbdGbdGbbpbhObhPbhQbhRbhSbhTaXCbhUbhVbhWaXCbgQaNxbhXaZwbanbanbanbanbanaZwbaobapbhYbgSbgSbhZbiabibbicbgVbidaZEbdWbdXbiebifbdWaZEbigbihbiibijbikbilaZIbimbinbiobipbiqbirbisbitbiubeXbeXbeXaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaaaaaaacaacbcabfabivbfabiwbixbiybfabcabizbiAbiBbiBbiBbiCbcabiDaYbbiEaYcbiFbdrbiGbiHbiIbiJbiKbiGbiLbiMbiNbiObbjbiPbiQbiRbcpbcpbcpbiSbfsbbjbiTbiUbiVbiWbiWbiWbiWbiWbiXbiYbiZbjabjbbjcbjdaXCbjebjfbjgaXCbjhaNxbjiaZwbanbanbanbanbanaZwbjjbjkbjlbjmbjnbjobjpbjqbjobjrbjsaZEaZEbjtaZEbjuaZEaZEbjvbjwbjxbjwbjwbjybjzbjAbjBbjCbeXbjDbjEbjFbgfbjGbeXaacaaaaaaaaaaaaaaaaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcabcabcabcabcabcabcabjHbehbcbbcabcabjIbjJbjKbdobdobcabcabepaYbbjLaYcbjMbdrbiJbdrbdrbjNbjObiJbjPbjQbiNbetbbjbjRbjSbfsbfsbfsbfsbjTbjUbbjbjVbjWbdGbjXbjYbjZbkabkbbbpbkcbkdbkebKLbkgbkhaXCbkibkjbkkaXCbklaNxbjiaZwbanbanbanbanbanaZwbaobkmbfHbknbkobicbkpaTubkrbgVbksbktbkubkvbfHbkwbkxbkybkzbjwbkAbkBbkCbkDbjzbkEbkFbkGbkHaQYbhmbkJbkKbgfbeXaacaaaaaaaaaaaaaaaaacaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdobkLbkMbkNbkObkPbkQbkRbkSbkTbkUbkVbkWbiBbiBbkXbkYbcabkZbepaYbaVxaYcblabdrblbblcbdrbldaRkbiJbjPbjQbiNblfbbjblgblhblgbbjbbjbbjblibbjbbjbbpbbpbbpbbpbbpbbpbbpbbpbbpbljbfAblkbllblmbbpaXCbeHblnaXCaXCbloaNxbjiaZwaZwaZwaZwaZwaZwaZwbaoblpbfHblqblrblsbltblsblublvblwblxblyblzblAblBblCblDblEblEblFblGblEblHblIblJblKblLbipblMblNblObhpblPbeXaacaacaaaaaaaacaaaaacaaaaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdoblRbemblSblTbemblUblVblWblXblWblYblZbmabembmbbmcbcabmdbepaYbaVxaYcaYcaYcaYcaYcbmeaYcaYcaYcbmfaYcbiNbetbbjbmgbmhbmibmjbmkbmlbmmbmkbmnbmobmpbmqbmrbmsbmtbmubmvbmwbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbmHbmIbmJbmKbmLbmMbmNbmOaWvbmQaZwbaobmRbmSbmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbmSbnebnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbnubeXbeXbeXbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnvbnwbnvbnxbnybnzbnAbembnBbnCbnDbcabnEbnFbembnGbdobdobdobcabcabepaYbaVxbnHbnIbnJbnKaYcbnLbnMaYcbnNbnObnPbnQbnRbbjbnSbnTbnUbnVbnWbnXbnYbnZbbjboabobbobbnPbobbocbodbckboeboebofbogbohboiboiboibojboiboiboibokaNxbambdPbolbapbombapbonbdPbaobapbooboobooboobooboobooboobooboobooboobooboobopboqbjwborbosbotbjwbjwbjzboubovbowbeXboxboybozbeXboAbjzboBboCboDboCboEbjzbjzbjzboBboCboEboFboFbjzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboGboHboGboIbembnzboJboKbelbnCboLbcaboMbnFbemboNbdoboObemboPboQbepaYbboRboSboTboUboVaYcboWboXboYboZbpabpbbpcbpdbpebpfbpgbpebpebpfbpebphbpibpebpjbpbbpkbplbpmbpbbpnbpobppbpqbprbpsbptbpubpvbpwbpxbpybpzbpAbpBbpCbpDbpEbpEbpEbpEbpEbpFaZwbaobapbpGbpHboobpIbpJbpKboobpLbpMbpKboobpNbpNboobpObpPbjwbpQbpRbpSbpTbpUbjzbpVbpWbpXbpYbpZbqabqbbqcbqdbqcbqebqfbqgbqfbqhboCbqiboCbqjbqfbqgbqfboFbjzbqkaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdobqlbqmbqnbqobqmbqpbnCbqqbcabqrbqsbembqtbqubnCbqvbqwboQbdqaYbbqxbqybqzbqAbqBaYcbqCbqDbqEbqFbqGbqHbqIbqJbqKbqLbqMbqNbqObqLbqPbqKbqQbqKbqRbqSbqQbqTbqUbqSbqVbqWbqXbqYbqZbrabrbbrcbrdbrebrfbrgbrgbrhbriaXEbrjbrkbrlbrlbrlbrlbrlbrlbrmbapbapbrnboobrobrpbrqboobrobrpbrrboobrnbrnboobrsbrtbjwbjzbjzbjzbjzbjzbjzbrubrvbrwbrxbrybrwbrzbjzbjzbjzbrAaaabrBbqfbqfbqfbrCbqfbqfbqfbrBbqfbrDbjzbjzbqkaaaafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcabrEbembrFbrGbrHbrIbnCbrJbcabrKbrLbembrMbdobqmbrNbrHbrObrPbrQbrRbrSbrTbrUbrSbdxboYbdxbrVbrWbrXbrYbrXbrZbrZbrYbrXbrZbrXbrYbrXbrZbsabsbbscbsdbsebsfbsgbshbobbsiboebsjbskbslbsmboibsnbsobspbsqbsrbssbstaXEaNxaZybapbapbsubapbapbapbapbsvbapbapboobswbsxbsyboobswbszbsyboobrnbsAbsBbopbsCbsDbjzbsEbsFbsGbsHbsIbsJbsKbsLbsMbsNbsObsPbsQbsRbsSaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaaaaaabqfbjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdobqlbsTbqnbsUbqmbgpbnCbsVbcabsWboJbembsXbdobqmbsYbsZbtabtbbtcbtdbtebtfbtgbthbtibtjbtkbtlbtmbrXbtnbtobtpbtqbtnbtobtrbtsbtnbtobttbsabtubsabtvbsabtubtvbtvbsabtwboebtxbtyboebtzboibtAbtBbtCbtDbtDbssbtEbtFbtGbtHbtHbtHbtHbtHbtHbtHbtHbtIbapbrnbtJbtKbrlbtLbtMbtNbtObtPbtQbapbtRboobopbtSbtTbjzbtUbtVbtWbtXbtYbtZbrwbrwbuabrwbubbsPbsQbsRbsSaaaaacaacaacaacaacaacaacaacaacaacaacaaaaaabjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabucboGboHboGbqlbembnzbudbuebufbuebuebugbuebuhbuebuibujbuebukbqwboQbfkaVxbulbumbumbunbumbumbuobupbuqburbrXbusbutbuubtqbuvbutbuubtsbuwbutbuubsabtubsabtvbsabuxbuybuzbsabuAbmxbuBbskboebuCbuCbuDbuEbuCbuCbuFbuFbuGbuHbuIbuJbuKbuLbuMbuNbuObuKbuPbsybuQbuRbuSbuTbuQbuUbuVbuWbuQbuUbuXbuYbuZboobvabvbblEblIbvcbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbsQbsRbsSbsSaacbvoaaaaaaaaaaaabvoaaaaaabvoaacaaaaaabjzbqkaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvpbvqbvpbvrbvsbvtbvubvrbvvbvrbvwbvxbvybvzbvAbvBbdobembembqwboQbepaVxbvCbumbvDbvEbvFbvGbvHbupbvIbvJbtsbvKbvLbvKbtqbvKbvMbvKbtsbvKbvNbvKbsabvObvPbvQbvRbvSbvTbvUbsabsabsabvVbvWbvXbuCbvYbvZbwabwbbwcbwdbwebwfbwgbwhbwibwibwibwibwibwibwibwjbsyboobwkboobswboobwlboobswboobwmbooboobooboobopbwnbwobjzbwpbwqbwrbwsbsIbwtbwubwvbowbjzbwwbjzbjzbsSbsSbsSbwxaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaabjzbjzaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdobcabcabehbwybwzbwzbwAbwAbwAbwAbwBbwCbwDbwEbwEbwEbwEbwCbwFaVxbwGbumbwHbwIbwJbwJbwKbupbwLbwMbwNbwObwPbwQbwRbwObwPbwQbwSbwObwPbwTbsabwUbwVbwWbwXbwYbwXbwZbsabsabsabxabxbbxcbuCbxdbxebxfbxgbxhbxibxjbxkbwgbwgbxlbxmbxnbxobxpbxqbwibxrbsybxsbxtbxubswbxvbxwbxubswbxxbxwbxuboobxybxzbxAbwnbxBbjzbxCbwqbqbbxDbsIbxEbxFbxGbjzbxHbxIbxJbxKbxKbxLbsSaacaaaaaabxMaacaacaacaacaaaaaaaacaaaaaabjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbxNbxObwzbxPbxQbxRbxSbxTbxUbwCbxVbxWbxXbxYbxZbwCbyaaVxbwGbybbycbydbyebwJbyfbupbygbyhbyibyjbyjbyjbyjbyjbyjbyjbyibyjbyjbykbsabylbymbynbyobypbyqbyrbysbsabsabytbyubyvbuCbywbyxbxfbyybyzbxibxjbwgbwgbwgbyAbyBbxpbxpbyBbyCbwibyDbsybyEbyFbyGbswbyEbyHbyGbswbyEbyIbyGboobyJbyKbyLbyMbyNbnnbyObyPbyQbyRbySbyTbyUbsPbyVbyWbyXbyYbyZbzabzbbsSaacbvoaacaacbzcbzdbzeaacaaaaaaaacaaaaaabjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaaaaaaaaaaabxNbzfbwzbzgbzhbzibzjbzkbzlbwCbzmbznbzobzpbzqbwCbepaVxbwGbzrbzsbztbzubzubzsbzvbzwbzxbzybzzbzAbzAbzBbzAbzAbzCbzDbzDbzDbzDbzDbzDbzDbzDbwXbzEbzFbzGbzHbsabsabzIbzJbzKbuCbzLbzMbzNbzObzPbxibxjbwgbwgbwgbxlbzQbyBbzRbzSbzTbwibzUbzVbzWboobswbswbsybsybswbswbsybsybswboobzXbpPbzYbzZbAabjzbAbbAcbAdbqbbAebwubkFbAfbjzbAgbAhbAibAjbAkbAlbsSaacaaaaaaaacbAmbAnbAobApaaaaaaaacaaaaaabjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaaAaaabxNbAqbwzbArbAsbAtbAubAvbAwbwCbAxbAybAzbAAbABbwCbhzaVxbwGbACbADbAEbAFbAGbAHbupbAIbzxbzDbAJbAKbALbAMbANbAObAPbzDbAQbARbASbATbAUbAUbzDbAVbAWbAXbAYbzFbsabAZbBabBbbBcbuFbBdbBebBfbBgbBhbBibxjbBjbwgbwgbxlaWwbyBbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbBwbBxbBybBvbBvbBzblEbBAbBBbBCbBDbBEbjzbBFbrwbrwbrwbtYbBGbBHbsPbyVbyWbBIbBJbBKbBLbzbbsSaacaaaaaaaacbBMbBNbBOaacaacbvoaacaaaaaabjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaabxNbBPbBQbBQbBQbBRbBQbBSbBTbBUbBVbwCbBWbwCbwCbwCbBXbBYbBZbupbupbupbupbupbupbupbCabzxbCbbCcbCdbCebCfbCebCebCgbzDbAQbChbCibCjbCkbAUbzDbClbCmbCnbCobCpbsabCqbCrbCsbCtbCubCvbCwbCxbCybxhbxibCzbCAbwgbwgbxlbCBbzSbxpbCCbCDbwibCEbCFbCGbCHbCIbnhbCJbCKbnhbCLbCJbCJbyLbnhbnhbCMbjybjzbjzbjzbjzbjzbCNbCNbjzbCObCPbwvbjzbCQbCRbCSbCTbCTbCUbsSaacaaabCVaacaacaacaacaacaaaaaabCWaaaaaabjzbqkaacafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbCXbCYbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbDrbDrbDqbDsbDtbDubDvbDwbDxbDybCebCebDzbCebDAbDBbCbbDCbDDbDEbDFbDGbDHbzDbDIbDJbDJbDKbDLbsabDMbDNbDObDPbuFbDQbDRbDSbDTbuCbDUbxjbDVbwgbwgbxlbDWbyBbDXbDYbDZbwibEabEbbjwbEcbjwbjwbEdbEebjwbfVbEfbjwbEgbEhbEibEjbEkbjzbElbElbElbEmbyYbyYbjzbEnbEobwvbowbjzbwwbjzbjzbsSbsSbsSaacaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaabjzbjzaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaaAaaAaaAahJaaAaaAaaAaaAaaAaaAaaAaaAaaAaaAahJaaAaaAaacaacaacaacaacaacaacaacaacbEpbEpbEqbErbEpbxNbEpbEsbEpbEtbEubEubEubEubEubEvbEubEwbExaVxbEybEzbEzbEAbwPbwPbEBbECbEDbEEbEFbEGbEGbEHbEIbEJbEIbEKbELbEMbENbEObEPbEQbzDbwVbwVbwVbERbESbsabETbBabDObEUbuFbuCbuCbEVbuCbuCbuFbuFbEWbwgbwgbyAbEXbEYbEZbFabFbbFcbFdbFebjwbfVbFfbjwbFgbHcbjwbFhbFibjwbFjbikbFkbFlbFmbjzbElbFnbFnbEmbyYbFobjzbFpbrwbFqbFrbFsbFtbFubsQbsRbsSbsSaacbvoaaaaaabvoaaaaaaaaaaaabvoaacaaaaaabjzbqkaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaacaaaaaaaaaaacaacaaaaacaacaaaaaaaaaaaaaacaaaaaAaaaaaaaaaaacaacaaaaaaaaaaacbFvbFwbFxbFybEpbFzbFAbFBbFCbFDbEubFEbFFbFGbFHbFIbFJaVxaVxbFKbFLbykbykbFLbyibyjbyjbFMbFNbFObFPbCebCebFQaUcbFSbFTbFUaUlbFWbFXbFYbDGbFZbzDbGabGbbGcbGdbGebsabGfbBabGgbyvbyvbyvbGhbGibGjbGkbGlbGmbwfbwgbwgbxlbGnbGobGpbxpbGqbwibGrbGsbjwbGtbGubjwbjwbjwbjwbjwbjwbjwbjwbjwbjwbGvbGwbjzbFnbFnbFnbGxbyYbGybjzbGzbrwbrwbuabrwbGAbGBbsQbGCbsSaaaaacaacaacaacaacaacaacaacaacaacaacaaaaaabjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbGEbGFaaabGDbGEbGFaaabGDbGEbGFaaabGDbGEbGFaaaahJaacaaaaaaaacaaaaaaaaaaaaaacbFvbGGbEqbGHbEpbGIbGJbGKbGLbGMbEubGNbGObGPbFHbGQbFJaVxaVxbGRbGSbGTbGTbGTbGTbGTbGTbGUbGVbzDbGWbGXbzAbGYbzAbzCbzDbzDbzDbFWbGZbHabHbbMgbzDbHdbKPbGcbHfbHgbsabHhbHibHjbHkbHlbHmbHnbHobHpbHpbHqbHrbxkbHsbHtbwibwibwibwibwibwibwibHubHvbjwbjwbjwbjwbHwbsDbBDbHxbHybHzbHAbHBbHAbHCbHDbjzbjzbjzbjzbjzbjzbjzbjzbHEbrwbsLbHFbHGbqabsPbsQbsRbsSaaaaaaaacaaaaaaaaaaaabHHaaaaaaaacaaaaaabqfbjzbqkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbHIbGFaaabGDbHIbGFaaabGDbHIbGFaaabGDbHIbGFaaaaaAaacaacaaaaacaaaaaaaaaaaaaaabFvbHJbEqbEpbEpbxNbHKbHLbHMbHNbHObHPbHQbHRbHSbHTbEuaVxaVxbwGbGSbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIebIfbIgbIhbIibIjbIkbIlbImbInaVtbIobzDbIpbIqbIrbHfbIsbsabItbBabIubIvbIwbIxbHnbHobIybHpbIzbIAbIBbICbICbICbICbICbICbICblEbIDbIEbIFbIGbIHbIIbIJbIJbIKbfVbfVbjwbILbIMbIMbjwbwnbINbIObIPbIObIObIObIObIQbIRbISbITbIUaWxbIWbrwbrzbjzbjzbjzbIXaaabIYbqfbqfbqfbqfbqfbqfbqfbIYbqfbIZbjzbjzbqkaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbJabGFaaabGDbJabGFaacbGDbJabGFaacbGDbJabGFaaaaaAaaaaacaacaacaaaaaaaaaaaaaaabEpbEpbJbbEpbJcbJdbJebJfbJgbJhbEubJibJjbJkbJlbJmbJnbJobbabwGbGSbHUbJpbJqbJrbJsbGTbJtbJubJvbJwbJxbJybJzbJAbJBbJBbJCbzDbzDbJDbJEbzDbzDbzDbsabsabsabJFbsabsabHnbBabIubHmbJGbHmbHnbHobJHbHpbJIbJJbJKbJLbJMbJNbJObJNbJPbJQbJRbHAbJSbJTbJUbJVbJWbjwbjwbJXbjwbIMbjwbJYbJZbKabjwbKbbHAbHAbHAbKcbKdbKebKfbKgbnnbKhbKibKjbKkbKlbKmbqbbKnbKobKnbKpbqfbKqbqfboBboCbKrboCboEbqfbKqbqfboFbjzbqkaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbHIbGFaaabGDbHIbGFaaabGDbHIbGFaaabGDbHIbGFaacaaAaaaaaaaaaaacaacaacaaaaaaaaaaacbEpbKsbEpbKtbKubKvbKvbKvbKvbKvbKvbKwbKvbKvbKvbKvbKxaVxbwGbGSbHUbJpbKybJrbKzbKAbKBbKCbKDbKEbKFbKGbKHbJBbJBbKIbKJbKKbMebKMbKNbKObMibKKbKQbHnbKRbKSbKTbKUbKVbKWbKXbyvbyvbyvbKYbKZbLabLbbLcbGmbwfbLdbLebLebLebLebLfbwgbLgbLgbLgbLhbLgbLibLjbjwbLkbLlbLmbLnbLobLpbLqbLrbjwbLsbLtbLubLvbLwbLxbLybLzbLzbjzbjzbLAbLBbjzbjzbjzbjzbjzbLCbjzbqhboCbLDboCbqjbjzbjzbjzbqhboCbqjboFboFbjzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbGDbJabGFaaabGDbJabGFaaabGDbJabGFaacbGDbJabGFafnaacaaaaaaaaaaaaaaaaacaacaacaaaaaabEpbLEbEpbLFbKubLGbLHbLIbLJbLKbLLbLMbLNbLNbLObLPbKxaVxbLQbGSbHUbLRbLSbLTbLUbLVbLWbLXbLYbJBbLZbMabMbbJBbJBbJBbMcbMdbNobMfbVWbMhbNrbKKbMjbHnbMkbMlbMmbMmbMmbMnbMobMpbMqbMrbMrbMrbMsbMrbMrbMrbwfbLdbMtbMubMvbMwbLfbwgbMxbMybMzbMAbMBbMCbMDbjwbMEbMFbMGbMHbMIbMJbMKbMLbjwbjwbjwbjwbMMbMMbMMbjwbLzaacaacbsSbMNbMObMPbsSaacaacbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbGDbJabGFaaabGDbJabGFaacbGDbJabGFaaabGDbJabGFaaaaacaacaacaacaacaaaaacbEpbEpbEpbEpbEpbEqbEpbMQbMRbMSbMTbMUbMVbMUbMWbMXbLNbLNbMYbLPbMZbrPbNabNbbHZbHZbNcbHZbNdbGTbNebNfbNgbNhbNibNibNjbNkbNkbNlbNmbNnbOybPBbNqbNpbPEbKKbNsbHnbNtbNubNvbNwbNxbNybNzbHnbNAbMrbNBbNCbNDbNEbNFbMrbwfbLdbNGbNHbNHbNIbLfbNJbMxbNKbNLbNMbLgbNNbjybjwbjwbjwbjwbjwbNObNPbLnbNQbNRbMMaaaaacaacaacaaaaacaacaacaacbsSbNSbNTbyYbsSaacaacaacaacaaaaaaaacaacaaaaacaacaaaaaaaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAafnaaabGDbJabGFaaabGDbJabGFaacbGDbJabGFaaabGDbJabGFaacaacaacaacbNUbNVbNVbNVbNVbNWbNXbNYbNZbOabObbOcbMRbOdbMTbLIbLJbLIbOebOfbLNbLNbOgbLPbKxaVxbOhbGSbOibOjbOkbOlbOmbOnbKBbOobOpbOqbOrbOsbOtbOubOvbOwbOxbMdccebNpbOzbNpccfbOAbOBbHnbNtbOCbODbOEbOFbOGbOHbOIbOIbOJbOKbOLbOMbONbOObMrbOPbLdbOQbNHbNHbOQbLfbNJbORbOSbOTbOUbLgbOVbjybOWbNRbOXbOYbjwbOZbPabPbbPbbPcbMMaaaaaaaacaaaaacagkaaaaaaaacbPdbPebPfbPgbPhaacafnaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaabGDbJabGFaaabGDbJabGFaaabGDbJabGFaacbGDbJabGFaacaaabNUbNUbNUbPibPjbPkbPlbEqbPmbPnbPobMTbMTbPpbMRbPqbMTbMUbPrbPsbLNbLNbLNbLNbLNbPtbKxaVxbhAbGSbPubPvbPvbPvbPwbPxbPxbPybPzbPAbPxbPxbPxbPxbPxbPxbPxbKKccgbPCbPDbNpcchbKKbPFbPGbMkbPHbPIbPJbPIbPKbPLbPMbPNbPObPPbPQbPRbPSbPTbMrbwfbLdbNGbPUbPVbNIbLfbNJbMxbPWbNLbPXbLgbPYbjybPZbQabQbbiibjwbQcbQdbQebQfbNRbMMaacaaaaaaaaaaaaaaaaaaaaaaacbQgbQhbQiaekaelaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQjbQkbQlbQmbQnbQlbQmbQmbQnbQlbQmbQmbQnbQlbQmbQmbQnbQlbQmbQobQpbQqbQpbQrbQsbQtbQubQvbMTbMTbMTbMTbQwbQxbQybQzbMTbLIbQAbLNbLNbLNbQBbQCbQCbQDbQEbQFbQGbGSbOibOibOibQHbQIbPxaXqbQKbQLbQMbQNbQObQObQPbQQbQRbQSbKKbKKbKKbKKbQTbQUbKKbQVbQWbHnbQXbHnbQYbHnbHnbQZbRabRbbMrbRcbRdbRebPSbPTbMrbwfbLdbNGbRfbRgbNIbLfbwgbMxbRhbRibRjbRkbRlbjybRmbRnbRobRnbRpbRqbRrbRrbRsbRtbMMaacaacaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbGDbRwbGFaaabGDbRwbGFaacbGDbRwbGFaaabGDbRwbGFaacaaabNUbNUbNUbRxbRybRzbNVbRAbMTbRBbRCbRDbREbRFbRGbRHbRIbRJbRKbRLbRMbRNbRObLNbOgbLPbKxbRPbqxbGSbGSbGSbGSbGSbGTbPxaZSbRRbRSbRTbRUbRVbRWbRXbRYbRZbSabSbbScbSdbKKbSebSfbKKbSgbShbSibSjbSkbHnbSlbSmbSnbSobSpbMrbSqbSrbMrbMrbMrbMrbSsbStbSubSubSubSubSvbSwbLgbLgbSxbLgbLgbSybjybSzbSAbSBbSCbjwbSDbSEbSFbSGbSHbMMaacaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaacaaabGDbRwbGFaaabGDbRwbGFaaabGDbRwbGFaacbGDbRwbGFaacaacaacaacbNUbNVbNVbNVbNVbSIbMTbSJbSKbMTbSLbSMbSNbSObMTbSPbLJbSQbSRbSSbLNbLNbMYbLPbKxaVxbqxbSTaaaaacaaabSUbVZbPxbPxbSVbSWbPxbSXbSYbSWbSWbSXbSZbSWbSUbTabScbKKbKKbKKbKKbTbbTcbTdbTebTfbTgbThbTibTjbTkbTbbTlbTmbTnbTobTpbTobTqbwgbwgbTrbwgbwgbwgbwgbwgbTqbTobTsbjwbTtbTubTvblEblEblEblEblEbTwbjwbjwbMMbMMbMMaacaacaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbGDbRwbGFaaabGDbRwbGFafnbGDbRwbGFaacbGDbRwbGFaaaaacaacaacaacaacaaaaacbEpbEqbMTbTxbTybMTbTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbLNbLNbMYbLPbKxaVxbTJbSTaacaacaaabSUbPxbPxbTKbTLbTMbPxbTNbWObTPbSWbTQbTObTRbSUbScbScbScbTSbScbPxbTTbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTlbUebUfbwgbUgbwgbwgbwgbwgbUhbUibUibUibUjbUkbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbijbfVbUubMMaacaacaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaabUvbRvaaaaacbUvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahJaaabGDbRwbGFaaabGDbRwbGFaacbGDbRwbGFaaabGDbRwbGFaacaacaaaafnaaaaaaaaaaaabEpbEqbMTbMTbUwbMTbMTbMTbUxbUxbMTbLIbUybUzbUAbUAbUBbUBbUAbUAbUCbUDbUEbUzbUzaacaacbSUbUFbPxbUGbUHbUIbPxbUGbTObUJbSWbXybTObUKbSUbULbUMbUNbSUbUObPxaaaaacaaabUPbUbbUcbUbbUdaacaaaaaabLebUebUfbUQbURbUSbUTbUUbUVbUWbUXbUYbUTbUZbUTbVabUfbVbbVcbVdbVebVfbVgbVhbVibVibVibVjbViaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbVkbGFaaabGDbVkbGFaacbGDbVkbGFaaabGDbVkbGFaaaaaAaaaaaaaaaaaaaaaaaabEpbVlbNZbVmbOabVnbVobVpbMYbMYbMYbMUbVqbUzbVrbVsbVtbVtbVtbVtbVubVvbVwbVxbUzaacaaabSUbVybPxbPxbVzbPxbPxbPxbVAbPxbSWbPxbVBbPxbSUaUnbVCaUnbSUbTSbPxaaaaacaaaaacaaaaacaaaaaaaacaaaaaabLebUebUfbVDbTlbTlbTlbVEbVEbVEbVEbVEbTlbTlbTlbVFbUfbVGbVHbVIbVJbVKbVLbVMbVNbVNbVNbVObViaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbRwbGFaaabGDbRwbGFaaabGDbRwbGFaacbGDbRwbGFaaaaaAaaaaaaaaaaaaaaaaacbEpbVPbVQbVRbVSbVTbVUbKvbMYbMYbVVbLIbUybUzbXzbVvbVvbVvbVvbVvbVubVvbVXbVYbUzaaaaaabSUbXYbWabWObUHbWbbTObTObTObTObWcbTObWObWdbSUaUnbWeaUnbSUabDbWfaaaaacafnaaaaaaaacaaaaaaaacaaaaaabLebWgbWhbWibVEaaabWjbWkbWlbWlbWlbWmbWnaaabVEbWobWpbWqbVibWrbWsbWtbWubWvbWwbWxbWybVNbViaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUvbRvaaaaacbUvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabGDbRwbGFaaabGDbRwbGFaaabGDbRwbGFaaabGDbRwbGFaaaaaAaaaaaaaaaaaaaaaaacbEpbEpbEpbWzbWAbWzbEpbKvbKvbWBbKvbWCbWDbWEbWFbWGbVvbVvbVvbVvbWHbWIbWJbWKbUzaaaaaabSUbWLbWMbTObUHbTObTObWNbTObTObXZbTObTObWPbSUaWybdaaWzaaaabDaacaaaaacaaaaaaaaaaaaaaaafnaaaaaaaacbLebWQbWRbWSbVEbVEbWTaSlbWUbWUbWUaSobWVbVEbVEbWSbWWbVGbWXbWYbWsbWZbXabXbbXcbXdbXebVNbViaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahJaaabGDbXfbGFaaabGDbXfbGFaacbGDbXfbGFaaabGDbXfbGFaaaaaAaacaaaaaaaacaacaacaacaacbEpbXgbXhbXgbEpaacbKvbXibXjbXkbXlbUzbXmbXnbXobXpbXqbXrbXsbXtbXubXvbUzaacaacbSUbSUbSUbXwbXxbTObTObYdbYLbXAbTObXBbTObXCbSUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbVEbWQbUfbXDbXEbXDbXFaTzaTzaTzaTzaTzbXFbXDbXEbXDbUfbVGbWXbWsbXGbWsbWsbXHbXIbXJbXKbVNbViaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaacaacaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaAaacaacaacaacaaaaaaaaaaacbEpbEpbEpbEpbEpaaabKvbXLbXjbXjbXjbUzbXMbXNbXObXPbXQbXRbXSbXTbXUbXVbUzaaaaacbWfaacbSUbXWbXXbTObXAbYMbYObTObTObXAaTvbSUbSUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVEbYbbWRbVEbVEbVEaVAaTzbYcbYcbYcaTzaVAbVEbVEbVEbWWbYebVibYfbYgbYhbYibYjbYkbYlbVNbVNbViaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAaaAaaAaaAaaAahJaaAaaAaaAaaAaaAaaAahJahJaaAaaAaaAahJaacaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaacaaaaaabUzbXMbVvbVvbVvbVvbYmbVvbVvbVvbYnbUzaacagkaacaiabSUbYobYpbTObTObYqbTObTObTObWObYrbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbYsbYtbYubYvbVEaTAbYwaTzaTzaTzbYxaTAbVEbYybYubYzbYAbVibVibVibVibVibVibVibVibVibVibViaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYBbYCbYDbYEbYFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaaaaaaaaaacaaaaaabUzbYGbVvbVvbVvbVvbVvbVvbVvbVvbYHbYIaaaaaaaacaiabSUbYJbYKbTObTObYPbZfbYNbZAbYPbSUbYQaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbYsbUfbwgbYRbVEaSmbYSbYcbYcbYcaTzaSmbVEbYTbwgbUfbwgbUgbwgbYUbwgbYVbYWbTlaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYXbYYbYZbZabZbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaabUzbZcbVvbZdbVvbZdbZebZdbZdbZdbYHbYIaacaacaacaaabSUbZBbZgbTObTObZhbZibScbScbZjbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbLebZkbZlbwgbZmbVEaSmbZnaTzbZoaTzaTzaSmbVEbZpbwgbZlbwgbUgbUTbUTbwgbUTbZqbTlaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaAaaBaacbZrbZsbZtbZubZraacaaBaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUzbYIbZvbZwbZxbYIbYIbYIbYIbZwbZxbYIaaaaaaaacaaabSUbSUbZybZzbWObZDcccbZCcccccdbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbYsbUQbUTbZEbVEaVAbZFbYcbYcbYcbZGaVAbVEbZHbUTbVabZIbZJbVEbVEbZKbVEbVEbTlaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacaaabZrbZLbZMbZNbZObZPaacaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboGboHboGboIbembnzboJboKbelbnCboLbcaboMbnFbemboNbdoboObemboPboQbepaYbboRboSboTboUboVaYcboWboXboYboZbpabpbbpcbpdbpebpfbpgbpebpebpfbpebphbpibpebpjbpbbpkbplbpmbpbbpnbpobppbpqbprbpsbptbpubpvbpwbpxbpybpzbpAbpBbpCbpDbpEbpEbpEbpEbpEbpFaZwbaobapbpGbpHboobpIbpJbpKboobpLbpMbpKboobpNbpNboobpObpPbjwbpQbpRbpSbpTbpUbjzbpVbpWbpXbpYbpZbqabqbbqcbqdbqcbqebqfbqgbqfbqhboCbqiboCbqjbqfbqgbqfboFbjzbXfaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdobqlbqmbqnbqobqmbqpbnCbqqbcabqrbqsbembqtbqubnCbqvbqwboQbdqaYbbqxbqybqzbqAbqBaYcbqCbqDbqEbqFbqGbqHbqIbqJbqKbqLbqMbqNbqObqLbqPbqKbqQbqKbqRbqSbqQbqTbqUbqSbqVbqWbqXbqYbqZbrabrbbrcbrdbrebrfbrgbrgbrhbriaXEbrjbrkbrlbrlbrlbrlbrlbrlbrmbapbapbrnboobrobrpbrqboobrobrpbrrboobrnbrnboobrsbrtbjwbjzbjzbjzbjzbjzbjzbrubrvbrwbrxbrybrwbrzbjzbjzbjzbYaaacbrBbqfbqfbqfbrCbqfbqfbqfbrBbqfbrDbjzbjzbXfaaaafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcabrEbembrFbrGbrHbrIbnCbrJbcabrKbrLbembrMbdobqmbrNbrHbrObrPbrQbrRbrSbrTbrUbrSbdxboYbdxbrVbrWbrXbrYbrXbrZbrZbrYbrXbrZbrXbrYbrXbrZbsabsbbscbsdbsebsfbsgbshbobbsiboebsjbskbslbsmboibsnbsobspbsqbsrbssbstaXEaNxaZybapbapbsubapbapbapbapbsvbapbapboobswbsxbsyboobswbszbsyboobrnbsAbsBbopbsCbsDbjzbsEbsFbsGbsHbsIbsJbsKbsLbsMbsNbsObsPbsQbsRbsSaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaaaaaabqfbjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdobqlbsTbqnbsUbqmbgpbnCbsVbcabsWboJbembsXbdobqmbsYbsZbtabtbbtcbtdbtebtfbtgbthbtibtjbtkbtlbtmbrXbtnbtobtpbtqbtnbtobtrbtsbtnbtobttbsabtubsabtvbsabtubtvbtvbsabtwboebtxbtyboebtzboibtAbtBbtCbtDbtDbssbtEbtFbtGbtHbtHbtHbtHbtHbtHbtHbtHbtIbapbrnbtJbtKbrlbtLbtMbtNbtObtPbtQbapbtRboobopbtSbtTbjzbtUbtVbtWbtXbtYbtZbrwbrwbuabrwbubbsPbsQbsRbsSaaaaacaacaacaacaacaacaacaacaacaacaacaaaaaabjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabucboGboHboGbqlbembnzbudbuebufbuebuebugbuebuhbuebuibujbuebukbqwboQbfkaVxbulbumbumbunbumbumbuobupbuqburbrXbusbutbuubtqbuvbutbuubtsbuwbutbuubsabtubsabtvbsabuxbuybuzbsabuAbmxbuBbskboebuCbuCbuDbuEbuCbuCbuFbuFbuGbuHbuIbuJbuKbuLbuMbuNbuObuKbuPbsybuQbuRbuSbuTbuQbuUbuVbuWbuQbuUbuXbuYbuZboobvabvbblEblIbvcbvdbvebvfbvgbvhbvibvjbvkbvlbvmbvnbsQbsRbsSbsSaacbvoaaaaaaaaaaaabvoaaaaaabvoaacaaaaaabjzbXfaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvpbvqbvpbvrbvsbvtbvubvrbvvbvrbvwbvxbvybvzbvAbvBbdobembembqwboQbepaVxbvCbumbvDbvEbvFbvGbvHbupbvIbvJbtsbvKbvLbvKbtqbvKbvMbvKbtsbvKbvNbvKbsabvObvPbvQbvRbvSbvTbvUbsabsabsabvVbvWbvXbuCbvYbvZbwabwbbwcbwdbwebwfbwgbwhbwibwibwibwibwibwibwibwjbsyboobwkboobswboobwlboobswboobwmbooboobooboobopbwnbwobjzbwpbwqbwrbwsbsIbwtbwubwvbowbjzbwwbjzbjzbsSbsSbsSbwxaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaabjzaaCaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablQbdobdobcabcabehbwybwzbwzbwAbwAbwAbwAbwBbwCbwDbwEbwEbwEbwEbwCbwFaVxbwGbumbwHbwIbwJbwJbwKbupbwLbwMbwNbwObwPbwQbwRbwObwPbwQbwSbwObwPbwTbsabwUbwVbwWbwXbwYbwXbwZbsabsabsabxabxbbxcbuCbxdbxebxfbxgbxhbxibxjbxkbwgbwgbxlbxmbxnbxobxpbxqbwibxrbsybxsbxtbxubswbxvbxwbxubswbxxbxwbxuboobxybxzbxAbwnbxBbjzbxCbwqbqbbxDbsIbxEbxFbxGbjzbxHbxIbxJbxKbxKbxLbsSaacaaaaaabxMaacaacaacaacaaaaaaaacaaaaaabjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbxNbxObwzbxPbxQbxRbxSbxTbxUbwCbxVbxWbxXbxYbxZbwCbyaaVxbwGbybbycbydbyebwJbyfbupbygbyhbyibyjbyjbyjbyjbyjbyjbyjbyibyjbyjbykbsabylbymbynbyobypbyqbyrbysbsabsabytbyubyvbuCbywbyxbxfbyybyzbxibxjbwgbwgbwgbyAbyBbxpbxpbyBbyCbwibyDbsybyEbyFbyGbswbyEbyHbyGbswbyEbyIbyGboobyJbyKbyLbyMbyNbnnbyObyPbyQbyRbySbyTbyUbsPbyVbyWbyXbyYbyZbzabzbbsSaacbvoaacaacbzcbzdbzeaacaaaaaaaacaaaaaabjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaaaaaaaaaaabxNbzfbwzbzgbzhbzibzjbzkbzlbwCbzmbznbzobzpbzqbwCbepaVxbwGbzrbzsbztbzubzubzsbzvbzwbzxbzybzzbzAbzAbzBbzAbzAbzCbzDbzDbzDbzDbzDbzDbzDbzDbwXbzEbzFbzGbzHbsabsabzIbzJbzKbuCbzLbzMbzNbzObzPbxibxjbwgbwgbwgbxlbzQbyBbzRbzSbzTbwibzUbzVbzWboobswbswbsybsybswbswbsybsybswboobzXbpPbzYbzZbAabjzbAbbAcbAdbqbbAebwubkFbAfbjzbAgbAhbAibAjbAkbAlbsSaacaaaaaaaacbAmbAnbAobApaaaaaaaacaaaaaabjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaacaaAaaabxNbAqbwzbArbAsbAtbAubAvbAwbwCbAxbAybAzbAAbABbwCbhzaVxbwGbACbADbAEbAFbAGbAHbupbAIbzxbzDbAJbAKbALbAMbANbAObAPbzDbAQbARbASbATbAUbAUbzDbAVbAWbAXbAYbzFbsabAZbBabBbbBcbuFbBdbBebBfbBgbBhbBibxjbBjbwgbwgbxlaWwbyBbBlbBmbBnbBobBpbBqbBrbBsbBtbBubBvbBwbBxbBybBvbBvbBzblEbBAbBBbBCbBDbBEbjzbBFbrwbrwbrwbtYbBGbBHbsPbyVbyWbBIbBJbBKbBLbzbbsSaacaaaaaaaacbBMbBNbBOaacaacbvoaacaaaaaabjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaabxNbBPbBQbBQbBQbBRbBQbBSbBTbBUbBVbwCbBWbwCbwCbwCbBXbBYbBZbupbupbupbupbupbupbupbCabzxbCbbCcbCdbCebCfbCebCebCgbzDbAQbChbCibCjbCkbAUbzDbClbCmbCnbCobCpbsabCqbCrbCsbCtbCubCvbCwbCxbCybxhbxibCzbCAbwgbwgbxlbCBbzSbxpbCCbCDbwibCEbCFbCGbCHbCIbnhbCJbCKbnhbCLbCJbCJbyLbnhbnhbCMbjybjzbjzbjzbjzbjzbCNbCNbjzbCObCPbwvbjzbCQbCRbCSbCTbCTbCUbsSaacaaabCVaacaacaacaacaacaaaaaabCWaaaaaabjzbXfaacafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbCXbCYbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbDkbDlbDmbDnbDobDpbDqbDrbDrbDqbDsbDtbDubDvbDwbDxbDybCebCebDzbCebDAbDBbCbbDCbDDbDEbDFbDGbDHbzDbDIbDJbDJbDKbDLbsabDMbDNbDObDPbuFbDQbDRbDSbDTbuCbDUbxjbDVbwgbwgbxlbDWbyBbDXbDYbDZbwibEabEbbjwbEcbjwbjwbEdbEebjwbfVbEfbjwbEgbEhbEibEjbEkbjzbElbElbElbEmbyYbyYbjzbEnbEobwvbowbjzbwwbjzbjzbsSbsSbsSaacaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaabjzaaCaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacbEpbEpbEqbErbEpbxNbEpbEsbEpbEtbEubEubEubEubEubEvbEubEwbExaVxbEybEzbEzbEAbwPbwPbEBbECbEDbEEbEFbEGbEGbEHbEIbEJbEIbEKbELbEMbENbEObEPbEQbzDbwVbwVbwVbERbESbsabETbBabDObEUbuFbuCbuCbEVbuCbuCbuFbuFbEWbwgbwgbyAbEXbEYbEZbFabFbbFcbFdbFebjwbfVbFfbjwbFgbHcbjwbFhbFibjwbFjbikbFkbFlbFmbjzbElbFnbFnbEmbyYbFobjzbFpbrwbFqbFrbFsbFtbFubsQbsRbsSbsSaacbvoaaaaaabvoaaaaaaaaaaaabvoaacaaaaaabjzbXfaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaaaaaaaacbFvbFwbFxbFybEpbFzbFAbFBbFCbFDbEubFEbFFbFGbFHbFIbFJaVxaVxbFKbFLbykbykbFLbyibyjbyjbFMbFNbFObFPbCebCebFQaUcbFSbFTbFUaUlbFWbFXbFYbDGbFZbzDbGabGbbGcbGdbGebsabGfbBabGgbyvbyvbyvbGhbGibGjbGkbGlbGmbwfbwgbwgbxlbGnbGobGpbxpbGqbwibGrbGsbjwbGtbGubjwbjwbjwbjwbjwbjwbjwbjwbjwbjwbGvbGwbjzbFnbFnbFnbGxbyYbGybjzbGzbrwbrwbuabrwbGAbGBbsQbGCbsSaaaaacaacaacaacaacaacaacaacaacaacaacaaaaaabjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaaaaacbFvbGGbEqbGHbEpbGIbGJbGKbGLbGMbEubGNbGObGPbFHbGQbFJaVxaVxbGRbGSbGTbGTbGTbGTbGTbGTbGUbGVbzDbGWbGXbzAbGYbzAbzCbzDbzDbzDbFWbGZbHabHbbMgbzDbHdbKPbGcbHfbHgbsabHhbHibHjbHkbHlbHmbHnbHobHpbHpbHqbHrbxkbHsbHtbwibwibwibwibwibwibwibHubHvbjwbjwbjwbjwbHwbsDbBDbHxbHybHzbHAbHBbHAbHCbHDbjzbjzbjzbjzbjzbjzbjzbjzbHEbrwbsLbHFbHGbqabsPbsQbsRbsSaaaaaaaacaaaaaaaaaaaabHHaaaaaaaacaaaaaabqfbjzbXfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccibGFaaabGFbhhbGFaaabGDccibGFaaabGDccibGFaacaaaaaaaacaaaaaaaaaaaaaaabFvbHJbEqbEpbEpbxNbHKbHLbHMbHNbHObHPbHQbHRbHSbHTbEuaVxaVxbwGbGSbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIebIfbIgbIhbIibIjbIkbIlbImbInaVtbIobzDbIpbIqbIrbHfbIsbsabItbBabIubIvbIwbIxbHnbHobIybHpbIzbIAbIBbICbICbICbICbICbICbICblEbIDbIEbIFbIGbIHbIIbIJbIJbIKbfVbfVbjwbILbIMbIMbjwbwnbINbIObIPbIObIObIObIObIQbIRbISbITbIUaWxbIWbrwbrzbjzbjzbjzcclaacbIYbqfbqfbqfbqfbqfbqfbqfbIYbqfbIZbjzbjzbXfaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaacaacaacaacaaaaaaaaaaaaaaabEpbEpbJbbEpbJcbJdbJebJfbJgbJhbEubJibJjbJkbJlbJmbJnbJobbabwGbGSbHUbJpbJqbJrbJsbGTbJtbJubJvbJwbJxbJybJzbJAbJBbJBbJCbzDbzDbJDbJEbzDbzDbzDbsabsabsabJFbsabsabHnbBabIubHmbJGbHmbHnbHobJHbHpbJIbJJbJKbJLbJMbJNbJObJNbJPbJQbJRbHAbJSbJTbJUbJVbJWbjwbjwbJXbjwbIMbjwbJYbJZbKabjwbKbbHAbHAbHAbKcbKdbKebKfbKgbnnbKhbKibKjbKkbKlbKmbqbbKnbKobKnbKpbqfbKqbqfboBboCbKrboCboEbqfbKqbqfboFbjzbXfaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaaaaacaacaacaacaaaaaaaaaaacbEpbKsbEpbKtbKubKvbKvbKvbKvbKvbKvbKwbKvbKvbKvbKvbKxaVxbwGbGSbHUbJpbKybJrbKzbKAbKBbKCbKDbKEbKFbKGbKHbJBbJBbKIbKJbKKbMebKMbKNbKObMibKKbKQbHnbKRbKSbKTbKUbKVbKWbKXbyvbyvbyvbKYbKZbLabLbbLcbGmbwfbLdbLebLebLebLebLfbwgbLgbLgbLgbLhbLgbLibLjbjwbLkbLlbLmbLnbLobLpbLqbLrbjwbLsbLtbLubLvbLwbLxbLybLzbLzbjzbjzbLAbLBbjzbjzbjzbjzbjzbLCbjzbqhboCbLDboCbqjbjzbjzbjzbqhboCbqjboFboFbjzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaaaaaaaaaaacaacaacaacaaaaaabEpbLEbEpbLFbKubLGbLHbLIbLJbLKbLLbLMbLNbLNbLObLPbKxaVxbLQbGSbHUbLRbLSbLTbLUbLVbLWbLXbLYbJBbLZbMabMbbJBbJBbJBbMcbMdbNobMfbVWbMhbNrbKKbMjbHnbMkbMlbMmbMmbMmbMnbMobMpbMqbMrbMrbMrbMsbMrbMrbMrbwfbLdbMtbMubMvbMwbLfbwgbMxbMybMzbMAbMBbMCbMDbjwbMEbMFbMGbMHbMIbMJbMKbMLbjwbjwbjwbjwbMMbMMbMMbjwbLzaacaacbsSbMNbMObMPbsSaacaacbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzbjzaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaacaacaacaacaaaaacbEpbEpbEpbEpbEpbEqbEpbMQbMRbMSbMTbMUbMVbMUbMWbMXbLNbLNbMYbLPbMZbrPbNabNbbHZbHZbNcbHZbNdbGTbNebNfbNgbNhbNibNibNjbNkbNkbNlbNmbNnbOybPBbNqbNpbPEbKKbNsbHnbNtbNubNvbNwbNxbNybNzbHnbNAbMrbNBbNCbNDbNEbNFbMrbwfbLdbNGbNHbNHbNIbLfbNJbMxbNKbNLbNMbLgbNNbjybjwbjwbjwbjwbjwbNObNPbLnbNQbNRbMMaaaaacaacaacaaaaacaacaacaacbsSbNSbNTbyYbsSaacaacaacaacaaaaaaaacaacaaaaacaacaaaaaaaaaaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaacaacbNUbNVbNVbNVbNVbNWbNXbNYbNZbOabObbOcbMRbOdbMTbLIbLJbLIbOebOfbLNbLNbOgbLPbKxaVxbOhbGSbOibOjbOkbOlbOmbOnbKBbOobOpbOqbOrbOsbOtbOubOvbOwbOxbMdccebNpbOzbNpccfbOAbOBbHnbNtbOCbODbOEbOFbOGbOHbOIbOIbOJbOKbOLbOMbONbOObMrbOPbLdbOQbNHbNHbOQbLfbNJbORbOSbOTbOUbLgbOVbjybOWbNRbOXbOYbjwbOZbPabPbbPbbPcbMMaaaaaaaacaaaaacagkaaaaaaaacbPdbPebPfbPgbPhaacafnaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhibhibhibhibhiaaaaaccckaacaacaaccckaacaacaaccckaacaacaaccckbQmbNUbNUbNUbPibPjbPkbPlbEqbPmbPnbPobMTbMTbPpbMRbPqbMTbMUbPrbPsbLNbLNbLNbLNbLNbPtbKxaVxbhAbGSbPubPvbPvbPvbPwbPxbPxbPybPzbPAbPxbPxbPxbPxbPxbPxbPxbKKccgbPCbPDbNpcchbKKbPFbPGbMkbPHbPIbPJbPIbPKbPLbPMbPNbPObPPbPQbPRbPSbPTbMrbwfbLdbNGbPUbPVbNIbLfbNJbMxbPWbNLbPXbLgbPYbjybPZbQabQbbiibjwbQcbQdbQebQfbNRbMMaacaaaaaaaaaaaaaaaaaaaaaaacbQgbQhbQiaekaelaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhjccjccjccjccjccnccnccjccnccnccnccjccnccnccnccoccnccnccnccoccnbQpbQqbQpbQrbQsbQtbQubQvbMTbMTbMTbMTbQwbQxbQybQzbMTbLIbQAbLNbLNbLNbQBbQCbQCbQDbQEbQFbQGbGSbOibOibOibQHbQIbPxaXqbQKbQLbQMbQNbQObQObQPbQQbQRbQSbKKbKKbKKbKKbQTbQUbKKbQVbQWbHnbQXbHnbQYbHnbHnbQZbRabRbbMrbRcbRdbRebPSbPTbMrbwfbLdbNGbRfbRgbNIbLfbwgbMxbRhbRibRjbRkbRlbjybRmbRnbRobRnbRpbRqbRrbRrbRsbRtbMMaacaacaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhkbhkbhkbhkbhkaaaaaccckaacaacaaccckaacaacaaccckaacaacaacaacbQmbNUbNUbNUbRxbRybRzbNVbRAbMTbRBbRCbRDbREbRFbRGbRHbRIbRJbRKbRLbRMbRNbRObLNbOgbLPbKxbRPbqxbGSbGSbGSbGSbGSbGTbPxaZSbRRbRSbRTbRUbRVbRWbRXbRYbRZbSabSbbScbSdbKKbSebSfbKKbSgbShbSibSjbSkbHnbSlbSmbSnbSobSpbMrbSqbSrbMrbMrbMrbMrbSsbStbSubSubSubSubSvbSwbLgbLgbSxbLgbLgbSybjybSzbSAbSBbSCbjwbSDbSEbSFbSGbSHbMMaacaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaaaaaaaaaaacaacbNUbNVbNVbNVbNVbSIbMTbSJbSKbMTbSLbSMbSNbSObMTbSPbLJbSQbSRbSSbLNbLNbMYbLPbKxaVxbqxbSTaaaaacaaabSUbVZbPxbPxbSVbSWbPxbSXbSYbSWbSWbSXbSZbSWbSUbTabScbKKbKKbKKbKKbTbbTcbTdbTebTfbTgbThbTibTjbTkbTbbTlbTmbTnbTobTpbTobTqbwgbwgbTrbwgbwgbwgbwgbwgbTqbTobTsbjwbTtbTubTvblEblEblEblEblEbTwbjwbjwbMMbMMbMMaacaacaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaqCaaAaaaaaaaacaacaacaaaaacbEpbEqbMTbTxbTybMTbTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbLNbLNbMYbLPbKxaVxbTJbSTaacaacaaabSUbPxbPxbTKbTLbTMbPxbTNbWObTPbSWbTQbTObTRbSUbScbScbScbTSbScbPxbTTbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTlbUebUfbwgbUgbwgbwgbwgbwgbUhbUibUibUibUjbUkbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbijbfVbUubMMaacaacaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaabUvbRvaaaaacbUvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaaaaaaaaaaaaafnaaaaaaaaaaaabEpbEqbMTbMTbUwbMTbMTbMTbUxbUxbMTbLIbUybUzbUAbUAbUBbUBbUAbUAbUCbUDbUEbUzbUzaacaacbSUbUFbPxbUGbUHbUIbPxbUGbTObUJbSWbXybTObUKbSUbULbUMbUNbSUbUObPxaaaaacaaabUPbUbbUcbUbbUdaacaaaaaabLebUebUfbUQbURbUSbUTbUUbUVbUWbUXbUYbUTbUZbUTbVabUfbVbbVcbVdbVebVfbVgbVhbVibVibVibVjbViaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEpbVlbNZbVmbOabVnbVobVpbMYbMYbMYbMUbVqbUzbVrbVsbVtbVtbVtbVtbVubVvbVwbVxbUzaacaaabSUbVybPxbPxbVzbPxbPxbPxbVAbPxbSWbPxbVBbPxbSUaUnbVCaUnbSUbTSbPxaaaaacaaaaacaaaaacaaaaaaaacaaaaaabLebUebUfbVDbTlbTlbTlbVEbVEbVEbVEbVEbTlbTlbTlbVFbUfbVGbVHbVIbVJbVKbVLbVMbVNbVNbVNbVObViaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccjbGFaaabGDccjbGFaaabGDccjbGFaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbEpbVPbVQbVRbVSbVTbVUbKvbMYbMYbVVbLIbUybUzbXzbVvbVvbVvbVvbVvbVubVvbVXbVYbUzaaaaaabSUbXYbWabWObUHbWbbTObTObTObTObWcbTObWObWdbSUaUnbWeaUnbSUabDbWfaaaaacafnaaaaaaaacaaaaaaaacaaaaaabLebWgbWhbWibVEaaabWjbWkbWlbWlbWlbWmbWnaaabVEbWobWpbWqbVibWrbWsbWtbWubWvbWwbWxbWybVNbViaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUvbRvaaaaacbUvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGDccobGFaaabGDccjbGFaaabGDccobGFaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbEpbEpbEpbWzbWAbWzbEpbKvbKvbWBbKvbWCbWDbWEbWFbWGbVvbVvbVvbVvbWHbWIbWJbWKbUzaaaaaabSUbWLbWMbTObUHbTObTObWNbTObTObXZbTObTObWPbSUaWybdaaWzaaaabDaacaaaaacaaaaaaaaaaaaaaaafnaaaaaaaacbLebWQbWRbWSbVEbVEbWTaSlbWUbWUbWUaSobWVbVEbVEbWSbWWbVGbWXbWYbWsbWZbXabXbbXcbXdbXebVNbViaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaccckaacaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaacaacaacaacaacbEpbXgbXhbXgbEpaacbKvbXibXjbXkbXlbUzbXmbXnbXobXpbXqbXrbXsbXtbXubXvbUzaacaacbSUbSUbSUbXwbXxbTObTObYdbYLbXAbTObXBbTObXCbSUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbVEbWQbUfbXDbXEbXDbXFaTzaTzaTzaTzaTzbXFbXDbXEbXDbUfbVGbWXbWsbXGbWsbWsbXHbXIbXJbXKbVNbViaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccckaacaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaaaaaaaaaaacbEpbEpbEpbEpbEpaaabKvbXLbXjbXjbXjbUzbXMbXNbXObXPbXQbXRbXSbXTbXUbXVbUzaaaaacbWfaacbSUbXWbXXbTObXAbYMbYObTObTObXAaTvbSUbSUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVEbYbbWRbVEbVEbVEaVAaTzbYcbYcbYcaTzaVAbVEbVEbVEbWWbYebVibYfbYgbYhbYibYjbYkbYlbVNbVNbViaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRubRvaaaaacbRuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacckaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaacaaaaaabUzbXMbVvbVvbVvbVvbYmbVvbVvbVvbYnbUzaacagkaacaiabSUbYobYpbTObTObYqbTObTObTObWObYrbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbYsbYtbYubYvbVEaTAbYwaTzaTzaTzbYxaTAbVEbYybYubYzbYAbVibVibVibVibVibVibVibVibVibVibViaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYBbYCbYDbYEbYFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaccpaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaaaaaaaaaacaaaaaabUzbYGbVvbVvbVvbVvbVvbVvbVvbVvbYHbYIaaaaaaaacaiabSUbYJbYKbTObTObYPbZfbYNbZAbYPbSUbYQaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbYsbUfbwgbYRbVEaSmbYSbYcbYcbYcaTzaSmbVEbYTbwgbUfbwgbUgbwgbYUbwgbYVbYWbTlaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYXbYYbYZbZabZbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaabUzbZcbVvbZdbVvbZdbZebZdbZdbZdbYHbYIaacaacaacaaabSUbZBbZgbTObTObZhbZibScbScbZjbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbLebZkbZlbwgbZmbVEaSmbZnaTzbZoaTzaTzaSmbVEbZpbwgbZlbwgbUgbUTbUTbwgbUTbZqbTlaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaAaaBaacbZrbZsbZtbZubZraacaaBaaAaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaAahJaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUzbYIbZvbZwbZxbYIbYIbYIbYIbZwbZxbYIaaaaaaaacaaabSUbSUbZybZzbWObZDcccbZCcccccdbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbYsbUQbUTbZEbVEaVAbZFbYcbYcbYcbZGaVAbVEbZHbUTbVabZIbZJbVEbVEbZKbVEbVEbTlaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaaaacaaabZrbZLbZMbZNbZObZPaacaaaaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbYIbZQbYIbZQbYIaacaaaaacbYIbZQbYIaaaaaaaaaafnaacbSUbZRbZSbZTbZSbZTbZSbZTbSUbSUaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVEbYsbZUbVEbVEbVEaTAbZVaTzaTzaTzaTzaTAbVEbVEbVEbZWbZXbVEaacbVEbXEbVEaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabZYbZYbZYbZZcaacabcaccaccaccadbZYaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbYIbZQbYIbZQbYIaacaacaacbYIbZQbYIaaaaaaaaaaaaaaaaaaaacaaaaaaaacaaaaaaaacaacaacaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafnaaabVEbYsbwgbXDbXEbXDbXFaTzbYcbYcbYcaTzcaebXDbXEbXDbwgbZXbVEaaabWSbZKbVEaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaBaacbZYcafcagcahcaicajbZrcakcalcambZYaacaaBaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYIbZvcanbZxbYIaaaaacaaacanbZxbYIaaaaaaaaaaaaaaaaaaaacaacaaaaaaaaaaaaaaaaacaiaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbVEbUTbWibWSbVEbVEaVAaZWaTzaTzaTzaTzaVAbVEbVEbWSbWobUTbVEaaaaaacaoaaaaaaaaaafnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaabZYcapcaqcarcascatcaucavcawcaxbZYaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm
index 52025a7b23a..3d04818ef2a 100644
--- a/_maps/map_files/MiniStation/MiniStation.dmm
+++ b/_maps/map_files/MiniStation/MiniStation.dmm
@@ -1143,7 +1143,7 @@
"vY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/space)
"vZ" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/obj/docking_port/mobile{dir = 2; dwidth = 5; height = 7; id = "arrival"; name = "arrival shuttle"; travelDir = -90; width = 15},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 7; id = "arrival_home"; name = "port bay 1"; width = 15},/turf/simulated/shuttle/floor,/area/space)
"wa" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/space)
-"wb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/floor/plating,/area/hallway/primary/central)
+"wb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/internals/emergency_oxygen,/turf/simulated/floor/plating,/area/hallway/primary/central)
"wc" = (/turf/simulated/wall,/area/crew_quarters/heads{name = "\improper Job Assignment"})
"wd" = (/obj/machinery/light/small{dir = 1},/obj/structure/closet,/turf/simulated/floor/plating,/area/hallway/primary/central)
"we" = (/obj/structure/piano,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
@@ -1385,7 +1385,7 @@
"AG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/dispenser,/turf/simulated/floor/plasteel,/area/engine/engineering)
"AH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/engineering)
"AI" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/engine/engineering)
-"AJ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/plasteel,/area/engine/engineering)
+"AJ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/turf/simulated/floor/plasteel,/area/engine/engineering)
"AK" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "10"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel,/area/engine/engineering)
"AL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"AM" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index c7eb389b4e7..04feb549c9c 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -37,9 +37,9 @@
"aaK" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"aaL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/security/prison)
"aaM" = (/obj/machinery/washing_machine,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/security/prison)
-"aaN" = (/turf/space,/area/security/transfer)
+"aaN" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/wall,/area/security/transfer)
"aaO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/security/transfer)
-"aaP" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/wall,/area/space)
+"aaP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTHEAST)"; icon_state = "warndark"; dir = 5},/area/security/transfer)
"aaQ" = (/obj/machinery/computer/libraryconsole/bookmanagement{pixel_y = 0},/obj/structure/table,/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"aaR" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/dice,/turf/simulated/floor/plasteel,/area/security/prison)
"aaS" = (/obj/structure/table,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/prison)
@@ -57,7 +57,7 @@
"abe" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space)
"abf" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
"abg" = (/obj/machinery/door/poddoor{id = "executionspaceblast"; name = "blast door"},/turf/simulated/floor/plating,/area/security/transfer)
-"abh" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTHEAST)"; icon_state = "warndark"; dir = 5},/area/space)
+"abh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer)
"abi" = (/obj/machinery/vending/sustenance,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"abj" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"abk" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/security/prison)
@@ -88,7 +88,7 @@
"abJ" = (/obj/machinery/computer/security,/turf/simulated/floor/fancy/carpet,/area/security/hos)
"abK" = (/obj/structure/closet/secure_closet/hos,/turf/simulated/floor/fancy/carpet,/area/security/hos)
"abL" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 6; pixel_y = 6},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/fancy/carpet,/area/security/hos)
-"abM" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
+"abM" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
"abN" = (/turf/simulated/floor/plasteel{tag = "icon-warndark (WEST)"; icon_state = "warndark"; dir = 8},/area/security/transfer)
"abO" = (/obj/machinery/sparker{dir = 2; id = "executionburn"; pixel_x = 25},/turf/simulated/floor/plasteel{tag = "icon-warndark (EAST)"; icon_state = "warndark"; dir = 4},/area/security/prison)
"abP" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
@@ -130,7 +130,7 @@
"acz" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table/wood,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/deputy,/turf/simulated/floor/fancy/carpet,/area/security/hos)
"acA" = (/turf/simulated/wall,/area/maintenance/fsmaint)
"acB" = (/obj/machinery/door/airlock/external{name = "Security External Airlock"; req_access_txt = "63; 13"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
-"acC" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/auxport)
+"acC" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"acD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "executionfireblast"; layer = 2.9; name = "blast door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/transfer)
"acE" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/wall/r_wall,/area/security/prison)
"acF" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
@@ -158,7 +158,7 @@
"adb" = (/obj/structure/grille,/turf/space,/area/space)
"adc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
"add" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/device/taperecorder{pixel_x = -3; pixel_y = 0},/obj/item/device/flash/handheld,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
-"ade" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/space)
+"ade" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/security/transfer)
"adf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/security/prison)
"adg" = (/obj/machinery/door/airlock/glass_security{name = "Long-Term Cell 3"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"adh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/security/prison)
@@ -184,7 +184,7 @@
"adB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
"adC" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
"adD" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison)
-"adE" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/space)
+"adE" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/security/transfer)
"adF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/ignition_switch{id = "executionburn"; pixel_x = 24; pixel_y = 5},/obj/machinery/door_control{id = "executionfireblast"; name = "Transfer Area Lockdown"; pixel_x = 25; pixel_y = -5; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/general/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison)
"adG" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison)
"adH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison)
@@ -222,9 +222,9 @@
"aen" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport)
"aeo" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxport)
"aep" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/security/prison)
-"aeq" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/space)
-"aer" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/weapon/tank/anesthetic{pixel_x = -3; pixel_y = 1},/obj/item/weapon/tank/oxygen/red{pixel_x = 3},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/prison)
-"aes" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/turf/simulated/floor/plating,/area/space)
+"aeq" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/turf/simulated/floor/plating,/area/security/transfer)
+"aer" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/weapon/tank/internals/anesthetic{pixel_x = -3; pixel_y = 1},/obj/item/weapon/tank/internals/oxygen/red{pixel_x = 3},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/prison)
+"aes" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/security/transfer)
"aet" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/hidden,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison)
"aeu" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison)
"aev" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison)
@@ -579,8 +579,8 @@
"alg" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 6},/area/crew_quarters/courtroom)
"alh" = (/obj/structure/stool/bed/chair{dir = 8; name = "Defense"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 6},/area/crew_quarters/courtroom)
"ali" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom)
-"alj" = (/turf/space,/area/maintenance/auxsolarstarboard)
-"alk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/maintenance/auxsolarstarboard)
+"alj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard)
+"alk" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port)
"all" = (/turf/simulated/wall,/area/maintenance/fsmaint2)
"alm" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aln" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
@@ -781,7 +781,7 @@
"apa" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"apb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"apc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 4},/obj/machinery/power/apc{dir = 2; name = "Fitness Room APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"apd" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/fsmaint)
+"apd" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/internals/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/fsmaint)
"ape" = (/obj/machinery/atmospherics/unary/portables_connector/visible{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/fsmaint)
"apf" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"apg" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
@@ -1023,10 +1023,10 @@
"atI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"atJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/fpmaint2)
"atK" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
-"atL" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"atL" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/obj/machinery/iv_drip,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"atM" = (/obj/structure/computerframe,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"atN" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/circuitboard/operating,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
-"atO" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"atO" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"atP" = (/obj/item/weapon/airlock_painter,/obj/structure/lattice,/obj/structure/closet,/turf/space,/area/space)
"atQ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"atR" = (/obj/machinery/atmospherics/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
@@ -1201,9 +1201,9 @@
"axe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry)
"axf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/hallway/secondary/entry)
"axg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry)
-"axh" = (/obj/structure/closet/wardrobe/white,/obj/item/clothing/shoes/jackboots,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"axh" = (/obj/structure/closet/wardrobe/white,/obj/item/clothing/shoes/jackboots,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"axi" = (/obj/structure/table/glass,/obj/item/weapon/hemostat,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
-"axj" = (/obj/structure/table/glass,/obj/item/weapon/restraints/handcuffs/cable/zipties,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"axj" = (/obj/structure/table/glass,/obj/item/weapon/restraints/handcuffs/cable/zipties,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"axk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"axl" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"axm" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
@@ -2101,9 +2101,9 @@
"aOu" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor,/area/space)
"aOv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison)
"aOw" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel,/area/storage/primary)
-"aOx" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
+"aOx" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/security/transfer)
"aOy" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison)
-"aOz" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/space)
+"aOz" = (/obj/machinery/atmospherics/binary/pump{dir = 4; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Armory"; req_access_txt = "2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/security/transfer)
"aOA" = (/obj/structure/table,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -31},/obj/item/clothing/head/cakehat,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aOB" = (/obj/structure/stool,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
"aOC" = (/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
@@ -2297,7 +2297,7 @@
"aSi" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency2)
"aSj" = (/obj/machinery/light/small,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency2)
"aSk" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2)
-"aSl" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency2)
+"aSl" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency2)
"aSm" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/storage/tools)
"aSn" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel,/area/storage/tools)
"aSo" = (/obj/structure/table,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plasteel,/area/storage/tools)
@@ -2740,7 +2740,7 @@
"baJ" = (/obj/structure/table,/obj/item/stack/wrapping_paper,/obj/item/stack/wrapping_paper,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 1},/area/quartermaster/office)
"baK" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/turf/simulated/floor/plasteel{icon_state = "arrival"; dir = 5},/area/quartermaster/office)
"baL" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"baM" = (/obj/machinery/atmospherics/binary/pump{dir = 4; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Armory"; req_access_txt = "2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/space)
+"baM" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 1},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/pen,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
"baN" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"baO" = (/turf/simulated/floor/wood,/area/bridge/meeting_room)
"baP" = (/turf/simulated/floor/fancy/carpet,/area/bridge/meeting_room)
@@ -2882,9 +2882,9 @@
"bdv" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/plasteel{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
"bdw" = (/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
"bdx" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/hallway/secondary/exit)
-"bdy" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 4"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bdy" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 4"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bdz" = (/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/hallway/secondary/entry)
-"bdA" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 3"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
+"bdA" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 3"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"bdB" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry)
"bdC" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/entry)
"bdD" = (/turf/simulated/wall,/area/maintenance/disposal)
@@ -3165,7 +3165,7 @@
"biS" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency)
"biT" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency)
"biU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency)
-"biV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency)
+"biV" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency)
"biW" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"biX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"biY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
@@ -3225,7 +3225,7 @@
"bka" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/medical/medbay)
"bkb" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bkc" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/britcup{desc = "Kingston's personal cup."},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
-"bkd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar)
+"bkd" = (/obj/structure/closet/secure_closet/injection,/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "Prisoner Transfer Centre"; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
"bke" = (/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Medbay Foyer"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/cell_charger,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bkf" = (/obj/machinery/power/apc{dir = 8; name = "Medbay Security APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/checkpoint/medical)
"bkg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/security/checkpoint/medical)
@@ -3800,7 +3800,7 @@
"bvd" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter)
"bve" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/teleporter)
"bvf" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/teleporter)
-"bvg" = (/obj/structure/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter)
+"bvg" = (/obj/structure/rack,/obj/item/weapon/tank/internals/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter)
"bvh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bvi" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Medbay"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/medical/medbay)
"bvj" = (/obj/machinery/door/window/eastleft{name = "Medical Delivery"; req_access_txt = "5"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/medical/medbay)
@@ -3939,7 +3939,7 @@
"bxM" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper)
"bxN" = (/obj/structure/stool/bed/chair,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper)
"bxO" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper)
-"bxP" = (/obj/structure/closet/wardrobe/pjs,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Medbay Treatment Center"; dir = 4; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bxP" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Medbay Treatment Center"; dir = 4; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bxQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bxR" = (/obj/effect/landmark/start{name = "Medical Doctor"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bxS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
@@ -4003,7 +4003,7 @@
"byY" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper)
"byZ" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper)
"bza" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/sleeper)
-"bzb" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bzb" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bzc" = (/obj/machinery/light,/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel,/area/medical/sleeper)
"bzd" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/medical/sleeper)
"bze" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench{pixel_x = 5; pixel_y = -5},/turf/simulated/floor/plasteel,/area/medical/sleeper)
@@ -4053,7 +4053,7 @@
"bzW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bzX" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bzY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
-"bzZ" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
+"bzZ" = (/obj/structure/sign/directions/security{dir = 1; icon_state = "direction_sec"; pixel_x = 32; pixel_y = 40; tag = "icon-direction_sec (NORTH)"},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = 32; pixel_y = 32; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/evac{dir = 4; icon_state = "direction_evac"; pixel_x = 32; pixel_y = 24; tag = "icon-direction_evac (EAST)"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central)
"bAa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bAb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"bAc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/status_display{pixel_y = -32},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
@@ -4131,7 +4131,7 @@
"bBw" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bBx" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/camera{c_tag = "Medbay Storage"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bBy" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bBz" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bBz" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bBA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/sleeper)
"bBB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitebluecorner"},/area/medical/medbay)
"bBC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -4195,7 +4195,7 @@
"bCI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bCJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bCK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bCL" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bCL" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bCM" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medbay Storage"; req_access_txt = "45"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bCN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay)
"bCO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -4272,7 +4272,7 @@
"bEh" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/weapon/storage/belt/medical{pixel_x = 0; pixel_y = 2},/obj/item/clothing/tie/stethoscope,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bEi" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bEj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bEk" = (/obj/structure/disposalpipe/segment,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bEk" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bEl" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = -30; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay South"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bEm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bEn" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/medical/cmo)
@@ -4340,9 +4340,9 @@
"bFx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitehall"},/area/medical/sleeper)
"bFy" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/sleeper)
"bFz" = (/obj/structure/table/glass,/obj/machinery/camera{c_tag = "Medbay Cryogenics"; dir = 2; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel,/area/medical/sleeper)
-"bFA" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bFA" = (/obj/machinery/vending/wallmed{pixel_x = 28; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bFB" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/structure/window/reinforced/fulltile,/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
-"bFC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bFC" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bFD" = (/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/crew_quarters/hor)
"bFE" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bFF" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/door_control{id = "medpriv4"; name = "Privacy Shutters"; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -4405,16 +4405,16 @@
"bGK" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/sleeper)
"bGL" = (/obj/machinery/camera{c_tag = "Telescience Test Chamber"; dir = 1; network = list("SS13","RD")},/obj/machinery/light,/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/engine,/area/toxins/explab)
"bGM" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 1},/area/medical/sleeper)
-"bGN" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel,/area/medical/sleeper)
+"bGN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bGO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bGP" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bGQ" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bGQ" = (/obj/structure/closet/crate/freezer,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plasteel,/area/medical/sleeper)
"bGR" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bGS" = (/obj/structure/table,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/beaker/large/charcoal,/obj/item/weapon/reagent_containers/glass/beaker/large/epinephrine,/obj/item/weapon/reagent_containers/glass/beaker/large/styptic,/obj/item/weapon/reagent_containers/glass/beaker/large/silver_sulfadiazine,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bGT" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bGU" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/o2{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bGV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/brute{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
-"bGW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bGS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bGT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bGU" = (/obj/structure/table,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = -30; pixel_z = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bGV" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bGW" = (/obj/machinery/light,/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bGX" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bGY" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bGZ" = (/obj/machinery/door/airlock/medical{name = "Patient Room"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
@@ -4480,7 +4480,7 @@
"bIh" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bIi" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bIj" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bIk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall,/area/medical/sleeper)
+"bIk" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/storage/firstaid/brute{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
"bIl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bIm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bIn" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/shieldwallgen{req_access = list(55)},/turf/simulated/floor/plating,/area/toxins/xenobiology)
@@ -4717,7 +4717,7 @@
"bMK" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos)
"bML" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space)
"bMM" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/wall/r_wall,/area/medical/virology)
-"bMN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
+"bMN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/sleeper)
"bMO" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/machinery/camera{c_tag = "Virology Break Room"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bMP" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"bMQ" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
@@ -4795,7 +4795,7 @@
"bOk" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bOl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology)
"bOm" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab)
-"bOn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed{pixel_x = 28; pixel_y = 0},/obj/machinery/camera{c_tag = "Medbay Recovery Room"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bOn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/medical/sleeper)
"bOo" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/toxins/misc_lab)
"bOp" = (/turf/simulated/wall,/area/toxins/misc_lab)
"bOq" = (/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -4806,11 +4806,11 @@
"bOv" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating,/area/construction)
"bOw" = (/obj/structure/closet/crate,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/construction)
"bOx" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/construction)
-"bOy" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 1},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/pen,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
+"bOy" = (/obj/structure/table,/obj/item/device/electropack,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/item/clothing/head/helmet,/obj/item/device/assembly/signaler,/obj/machinery/light/small,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer)
"bOz" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/construction)
"bOA" = (/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"bOB" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 5},/area/hallway/primary/aft)
-"bOC" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/toxin{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/sleeper)
+"bOC" = (/turf/simulated/wall/r_wall,/area/medical/medbay)
"bOD" = (/obj/structure/dispenser{pixel_x = -1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bOE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos)
"bOF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos)
@@ -4862,11 +4862,11 @@
"bPz" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft)
"bPA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Construction Area Maintenance"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/construction)
"bPB" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/construction)
-"bPC" = (/obj/structure/closet/secure_closet/injection,/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "Prisoner Transfer Centre"; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
+"bPC" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/aisat)
"bPD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/construction)
"bPE" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction)
"bPF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/construction)
-"bPG" = (/obj/structure/table,/obj/item/device/electropack,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/item/clothing/head/helmet,/obj/item/device/assembly/signaler,/obj/machinery/light/small,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
+"bPG" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/aisat)
"bPH" = (/turf/simulated/floor/plasteel{icon_state = "caution"; dir = 4},/area/hallway/primary/aft)
"bPI" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/clothing/tie/stethoscope,/obj/machinery/vending/wallmed{pixel_y = 28},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay)
"bPJ" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
@@ -4923,7 +4923,7 @@
"bQI" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/hazardvest,/turf/simulated/floor/plating,/area/construction)
"bQJ" = (/obj/structure/table,/obj/item/stack/cable_coil{amount = 5},/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/construction)
"bQK" = (/obj/structure/table,/turf/simulated/floor/plating,/area/construction)
-"bQL" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/table,/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
+"bQL" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -8; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/item/clothing/mask/breath{pixel_x = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bQM" = (/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = -32},/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos)
"bQN" = (/obj/machinery/computer/station_alert,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/door_control{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 24; pixel_y = 4; req_access_txt = "24"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "caution"},/area/atmos)
"bQO" = (/obj/structure/table,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 7},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/machinery/light{dir = 8},/obj/item/device/multitool,/turf/simulated/floor/plasteel,/area/atmos)
@@ -5408,7 +5408,7 @@
"bZZ" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port)
"caa" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/maintenance/aft)
"cab" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/aft)
-"cac" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/aft)
+"cac" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/aft)
"cad" = (/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft)
"cae" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft)
"caf" = (/obj/item/clothing/head/hardhat,/turf/simulated/floor/plating/airless,/area/space)
@@ -5695,7 +5695,7 @@
"cfA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cfB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cfC" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"cfD" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating/airless,/area/solar/port)
+"cfD" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; on = 1},/turf/simulated/floor/plating/airless,/area/space)
"cfE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
"cfF" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
"cfG" = (/obj/structure/lattice/catwalk,/turf/space,/area/solar/port)
@@ -5717,7 +5717,7 @@
"cfW" = (/obj/machinery/light{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
"cfX" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
"cfY" = (/obj/machinery/door/poddoor/preopen{id = "telelab"; name = "test chamber blast door"},/obj/machinery/door/firedoor/heavy,/turf/simulated/floor/engine,/area/toxins/explab)
-"cfZ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/clothing/mask/breath{step_x = 0; step_y = 0},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
+"cfZ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/clothing/mask/breath{step_x = 0; step_y = 0},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
"cga" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
"cgb" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/engineering)
"cgc" = (/turf/simulated/wall,/area/engine/engineering)
@@ -5921,7 +5921,7 @@
"cjS" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
"cjT" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Incinerator Interior Airlock"; req_access_txt = "12"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator)
"cjU" = (/obj/machinery/atmospherics/pipe/simple/insulated,/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
-"cjV" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1},/turf/simulated/floor/plating/airless,/area/space)
+"cjV" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard)
"cjW" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cjX" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"cjY" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -6009,7 +6009,7 @@
"clC" = (/obj/structure/closet/radiation,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering)
"clD" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/airlock_painter,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
"clE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering)
-"clF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
+"clF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
"clG" = (/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"clH" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; luminosity = 2; on = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"clI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 0; pressure_checks = 2; pump_direction = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
@@ -6139,7 +6139,7 @@
"coc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/engine/engineering)
"cod" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"coe" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
-"cof" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/plasma,/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
+"cof" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/internals/plasma,/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering)
"cog" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering)
"coh" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering)
"coi" = (/obj/structure/particle_accelerator/particle_emitter/left,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -6263,7 +6263,7 @@
"cqw" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Room"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
"cqx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/tcommsat/computer)
"cqy" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
-"cqz" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/starboard)
+"cqz" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
"cqA" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity West"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cqB" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity East"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cqC" = (/obj/item/device/radio/intercom{dir = 8; freerange = 1; name = "Station Intercom (Telecoms)"; pixel_x = 0; pixel_y = 26},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel,/area/tcommsat/computer)
@@ -6289,27 +6289,27 @@
"cqW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/aft)
"cqX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/hallway/primary/aft)
"cqY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/hallway/primary/aft)
-"cqZ" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/space)
-"cra" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/space)
+"cqZ" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/aisat)
+"cra" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/aisat)
"crb" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/aisat)
"crc" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/aisat)
"crd" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
-"cre" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/space)
+"cre" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/aisat)
"crf" = (/obj/structure/window/reinforced,/turf/space,/area/space)
"crg" = (/turf/simulated/wall,/area/turret_protected/aisat_interior)
"crh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior)
"cri" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"crj" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/space)
+"crj" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/aisat)
"crk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior)
-"crl" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/space)
+"crl" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
"crm" = (/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/aisat)
-"crn" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-warndark (NORTH)"; icon_state = "warndark"; dir = 1},/area/space)
+"crn" = (/obj/machinery/door_control{id = "teledoor"; name = "AI Satellite Teleport Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "17;65"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
"cro" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat)
"crp" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"crq" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
-"crr" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
+"crq" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology)
+"crr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/sign/directions/security{dir = 4; icon_state = "direction_sec"; pixel_x = 32; pixel_y = -24; tag = "icon-direction_sec (EAST)"},/obj/structure/sign/directions/evac{dir = 4; icon_state = "direction_evac"; pixel_x = 32; pixel_y = -32; tag = "icon-direction_evac (EAST)"},/obj/structure/sign/directions/engineering{pixel_x = 32; pixel_y = -40},/turf/simulated/floor/plasteel,/area/hallway/primary/port)
"crs" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
-"crt" = (/obj/machinery/door_control{id = "teledoor"; name = "AI Satellite Teleport Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "17;65"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/space)
+"crt" = (/obj/structure/sign/directions/evac{dir = 4; icon_state = "direction_evac"; pixel_x = 32; pixel_y = 28; tag = "icon-direction_evac (EAST)"},/obj/structure/sign/directions/security{dir = 1; icon_state = "direction_sec"; pixel_x = 32; pixel_y = 36; tag = "icon-direction_sec (NORTH)"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
"cru" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/aisat)
"crv" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "AI Satellite Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat)
"crw" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior)
@@ -6471,6 +6471,9 @@
"cuw" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
"cux" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
"cuy" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure)
+"cuz" = (/obj/docking_port/stationary{dir = 2; dwidth = 11; height = 22; id = "whiteship_ss13"; name = "SS13 Arrival Docking"; width = 35},/turf/space,/area/space)
+"cuA" = (/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = 32; pixel_y = -24; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/science{dir = 4; icon_state = "direction_sci"; pixel_x = 32; pixel_y = -32; tag = "icon-direction_sci (EAST)"},/obj/structure/sign/directions/engineering{pixel_x = 32; pixel_y = -40},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
+"cuB" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/directions/engineering{pixel_x = -32; pixel_y = -40},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_x = -32; pixel_y = -24; tag = "icon-direction_med (EAST)"},/obj/structure/sign/directions/evac{dir = 4; icon_state = "direction_evac"; pixel_x = -32; pixel_y = -32; tag = "icon-direction_evac (EAST)"},/turf/simulated/floor/plasteel,/area/hallway/primary/central)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6540,20 +6543,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaanaaoaapaaqaaraasaataauaavaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaiaawaaxaayaaxaaxaaxaazaauaaAaaiaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaaiaaBaaCaaDaaEaaFaasaasaauaaGaaiaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNaaNaaNaaNaaaaaIaaiaaJaasaasaasaasaaKaasaasaaLaaMaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNaaNaaNaaNaaaaaiaaiaaQaaKaasaasaaRaaSaaKaasaaTaaUaaiaaaaaVaafaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNaaNaaNaaNaaaaaiaaZaasaasaasaaKabaabbaasaasabcabdaaiaaiaaiaafaaaaaaaaaaaaaaaaafaaaaaVaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabeabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNaaHaaOaaWaaPaaXabiaasabjaasaasaasaasaasaasaauaasabkablaaiaafaafaafaafaafaafaafaafabmabmabnabmabmaboaboabpabpabpaboaboaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNabgaaYabrabhabsabuaasaasabvabwabxaasabyabzabAaasabBabCaaiaafaaaaafaafaafaafaaaaafabnabDabEabFabGaboabHabIabJabKabLaboaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafabMaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaabfabfabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNabgabNabPabOabsabSabTabSabSabSabUabSabSabSabVabSabSabWaaiachachachachachachachachabmabXabEabYabDaboabZacaacbacbaccaboaaaaafacdaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaafaafaaaaceaaaacfaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNabgabQacgabRabsackaasaclabSacmacnacoabSacpacqacrabSacsaaiacMacNacOacOacPacQacRacSactacuabEacvabDabpacwacxacyacbaczaboaaaaafacAacBacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaafaaaaafaaaaaaaceaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacCaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaNaaHaciacDacjacEacHaasacIabSacJacnacIabSacKacqacIabSacLaaiacMadkadladladladladmadnactacTabEacvabDabpacUacVacWacbacXaboaafaafacAacYacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadaaaaacZacZacZacZacZaafabfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaiaaJaasaasaasaasaaKaasaasaaLaaMaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaQaaKaasaasaaRaaSaaKaasaaTaaUaaiaaaaaVaafaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaZaasaasaasaaKabaabbaasaasabcabdaaiaaiaaiaafaaaaaaaaaaaaaaaaafaaaaaVaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabeabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaOaaWaaNaaXabiaasabjaasaasaasaasaasaasaauaasabkablaaiaafaafaafaafaafaafaafaafabmabmabnabmabmaboaboabpabpabpaboaboaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaYabraaPabsabuaasaasabvabwabxaasabyabzabAaasabBabCaaiaafaaaaafaafaafaafaaaaafabnabDabEabFabGaboabHabIabJabKabLaboaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafabMaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaabfabfabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabNabPabOabsabSabTabSabSabSabUabSabSabSabVabSabSabWaaiachachachachachachachachabmabXabEabYabDaboabZacaacbacbaccaboaaaaafacdaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaafaafaaaaceaaaacfaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabQacgabRabsackaasaclabSacmacnacoabSacpacqacrabSacsaaiacMacNacOacOacPacQacRacSactacuabEacvabDabpacwacxacyacbaczaboaaaaafacAacBacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaafaaaaafaaaaaaaceaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacCaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaciacDacjacEacHaasacIabSacJacnacIabSacKacqacIabSacLaaiacMadkadladladladladmadnactacTabEacvabDabpacUacVacWacbacXaboaafaafacAacYacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadaaaaacZacZacZacZacZaafabfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadbadbadbadbaafaafaaaadcaaaaafaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhaaHaaHaaHacFaddacGabsadfadgadhabSadfadiadhabSadfadjadhabSabSaaiafnaRFaNFadVaNFadWbhdbiGactadoabEacvabDaboadpadqadradsadtaboabnabmaduacBacAacAadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadcaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtadeadEadDadGadFadIadHadKadJadMadLadOadNadUadLaepadPadQadRaaiadSadTaNFboSaNFadXadYadZaeaabEaebaecabmaboaedaboaeeaboaefaboaegaehabmaeiacAaejaekaekaelaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaaeoaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtaeqaesaeraeuaetaewaevafiaexavkaifaexaexaexaifaOyaOvaeyaezaaiaeAaeBaeCaeDaeEaeFaeGaeHactaeIaeJaeKabmaeLaeMaeNaeOaePaeQaeNaeRaeSaeTaeUaeVaeWaeXaeYaeZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTGaOzbaMaRfbfTbfPabSbiEafjafkaflafmbNoafoafpafpafpabSafqafraaiafsaftafuafvafwafxafyafzactafAafBafCabmafDafEafFafGafHafIafJafKafLabmafMacAafNaekaekafOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtabtabtbOybPGbPCabSaaiadhafQadfafRafRafRafRafRafRafRafSafTafUafVafWafXafYafZagaagbagcafUagdageagfaggaghagiafFagjafHagkaglagmabmaduacAacAacAadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaabtabtabtabtabtaaiagnagoagpafRagqagragsagtaguafRagvagwagxagyagzagAagBagaagCagbagDagEagFagGagHagIagJagKagLagMagNagOagPagQagRagSagTagUacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadcaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHabhadeadDadGadFadIadHadKadJadMadLadOadNadUadLaepadPadQadRaaiadSadTaNFboSaNFadXadYadZaeaabEaebaecabmaboaedaboaeeaboaefaboaegaehabmaeiacAaejaekaekaelaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaaeoaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHadEaeqaeraeuaetaewaevafiaexavkaifaexaexaexaifaOyaOvaeyaezaaiaeAaeBaeCaeDaeEaeFaeGaeHactaeIaeJaeKabmaeLaeMaeNaeOaePaeQaeNaeRaeSaeTaeUaeVaeWaeXaeYaeZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOxaesaOzaRfbfTbfPabSbiEafjafkaflafmbNoafoafpafpafpabSafqafraaiafsaftafuafvafwafxafyafzactafAafBafCabmafDafEafFafGafHafIafJafKafLabmafMacAafNaekaekafOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaHaaHbaMbOybkdaaHaaiadhafQadfafRafRafRafRafRafRafRafSafTafUafVafWafXafYafZagaagbagcafUagdageagfaggaghagiafFagjafHagkaglagmabmaduacAacAacAadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaHaaHaaHaaHaaHaaiagnagoagpafRagqagragsagtaguafRagvagwagxagyagzagAagBagaagCagbagDagEagFagGagHagIagJagKagLagMagNagOagPagQagRagSagTagUacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaiagVagWagXafRagYagZahaahbahcafRagvahdaheahfahgahhahiahjahjahkahlahmahnahoahpahqahrahsahrahtahuahuahvahwabmabmaeUahxacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRIagWahyafRagYagZahzahbahAafRahBahCahDahEahFahGahHahIahJahKahLahMahNahOahPahQahRahSahTahUahVahWahXahYahZaiaaibaicaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfacfafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaiaieagWaigafRaihaiiaiiaijahcafRaikailafUaimainaioaipaipaiqairafUafUaisaitaduaduaduabmabmabmabmabmabmabmabmaiuaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6561,9 +6564,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaiTaiUaiVaiWaiXaiYaiZajaajbajcajdajeajfajgajhajiajjajkajjajjajjajjajjajjajlajjajiajmajkajnajoajpajqajrajsajtajuajvajwaiuaivaiwacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadzaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaeZaeZaeZaelaaaaafaizajyajzajAajBajCajDajEajFajGajHajIajJajKajLajIajJajMajLajIajJajNajOajOajOajPahCajQajRajSajTajUajVajWajVajVajVajXajYaiPaiuaivaiwaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafaafadzaafaafaafaafaafabfabfabfaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaiSafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZakaakbakcajZaiyaiyakdakeakfakgakhaiAafRakiafRafRakjakkaklakmaknakoaklakmaknakpakqakmakraksakmaktakuakmakvakwakxaiAakyakzaiPakAaiPakBakCaiPaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaakDaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaakEaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaakFakGakHakIakJakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaljalkaljaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaakEaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaakFakGakHakIakJakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaaljaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafalnaloalnaafaafaafaafabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalpalqalrajZaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaalnalPalnaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalRajZaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaljalMamkalMaljaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaalnalPalnaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalRajZaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalnalnammalnalnaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakFamnalQamoajZaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaafamDamEamFamGamDamHamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZamIalQalQamJamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamPamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamDanganhaniamDanjamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZankankankajZaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6584,27 +6587,27 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaekaekaCXaOualQaCZaDaaDbaDcaDdaDealQaDgaDfavMaBGaDhaAvaDiaDjaDkaDlaDmaDnayuaDoazEazEazEazEaDpaDqbRJaDsaDtaDuaBYaBYaBYaBYaBYaBYaBYaAEaaaazNaDvaDwaDxaDyaDzazNaaaaxoaxuaxvaDAaDBaDCaDDaDEaxvapNaDFaxxaxxaDGaATaDHaATaDIaxxaxxaDJaDKaxKaDLaxKayQamwayRacAaeUapTapTapTapTapTaDMaDNaDOaDPaDQaDRaDRaDRaDSayZaDTayZaDUaDVaDWaBdaBeaApallallallallallallallallallallallallallaDXallallallallawTaBtaDYaDZaEaaDZaEbaEcaEdaEdaEeaEfaEfaEfaEfaEfaEgaEhaEiaEiaEiaEiaEiaEiaBDaEjaEkaElaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaEmaEmaEnalQaEoalQaEoalQaEoalQaEoalQaDgaEpavMaBGaEqaAvaEraEsaEtaEuaEvaEwayuaExazEaEyaEzaEzaEAaEBaECaEDaEEaEFaEGaEGaEGaEGaEGaEHaEIaAEaafazNaEJaDwaEKaELaEMazNaafaxoaENaEOaEPaEQaDCaERaESaETaEUaEVaxKaEWaEXaDJaDJaDJaEYaEZaxKaFaaFaaxKaDJaxKaFbaoeaFcacAaeUaeUaeUaeUaeUamXawvaFdaFeaFfaFgaFeaFhaFeaFiaFeaFjayZaFkaFlaFmaBdaFnaFoaFpaFqaFraFsaFtaFuaFuaFuaFuaFvaFwaFuaFuaFxaFyaFzaFAaBpaFBaFCaFDaFEaFFaFEaFGaFHaEfaEfaFIaEfaFJaFKaFLaEfaEiaFMaEiaFNaFOaFPaFQaFRaFSaFTaFUaFVaFWaFXaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQalQaGaalQaEoalQaEoaGbaEoalQaEoalQaDgaEpavMaBGaGcaAvaAvaGdaGeaGfaGgaAvayuayuayuayuaGhazEazEaGiayuaGjaGkaBYaBYaBYaGlaBYaBYaBYaGmaAEaaaazNazNaGnaGoaGnazNazNaaaaxoaxuaxvaGpaGqaGraGsaGtaxvapNaGuaxKaGvaEXaDJaDJaDJaEYaGwaxKaAgaAgaxKaCsaxKaGxaGyaGzacAamXacAacAacAacAacAaGAaGBayZaGCaAmayZaGDayZaGEayZaGFayZaGGaGHaFmaBdaGIaGJaGKaGLaGMaGMaGNaGMaGMaGOaGMaGPaGQauwauwauwauwaGRaGSaGTaGUaGVamlaGWaGWaGWaGWaGXaEfaGYaGZaHaaHbaHcaHdaEfaHeaHfaEiaHgaHhaHiaHjaFRaHkaEjaEkaCTaHlaHmaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaHnaHnaHoalQaEoalQaEoalQaEoalQaEoalQaDgaEpavMaHpaHqaHraHsaHsaHtaHuaxaaHvaHwaHxaHyayuaHzazEazEaHAayuaHBaHCaBYaHDaHEaOwaHGaHHaHIaHJaAEaaaaafaaaaHKaHLaHKaaaaafaaaaxoaxuaxvaDCaHMaHNaHOaHPaxvapNasJaxKaHQaHRaDJaDJaDJaHSaHTaxKaaaaaaaHUaHVaHWaHXaHYaHZaIaaIbaHUaaaaaaaIcaIdaIeaIfayZaIgaAmaAmaAmaCxaAmaAmaAmayZaBdaIhaIiaBdaBdaApaIjaIkaIkaIlaImaInaIkaIoaIkaIpaIqaIpaIraIpaIsaGWaGWaItaGWaGWaGWaGWaIuaIvaGWaGXaEfaGZaIwaIxaIyaIzaIAaEfaIBaICaIDaIEaIFaIGaIHaIIaIJaBAaIKaFVaFWaILaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaHnaHnaHoalQaEoalQaEoalQaEoalQaEoalQaDgaEpavMaHpaHqaHraHsaHsaHtaHuaxaaHvaHwaHxaHyayuaHzazEazEaHAayuaHBaHCaBYaHDaHEaOwaHGaHHaHIaHJaAEaaaaafaaaaHKaHLaHKaaaaafaaaaxoaxuaxvaDCaHMaHNaHOaHPaxvapNasJaxKaHQaHRaDJaDJaDJaHSaHTaxKaaaaaaaHUaHVaHWaHXaHYbzZaIaaIbaHUaaaaaaaIcaIdaIeaIfayZaIgaAmaAmaAmaCxaAmaAmaAmayZaBdaIhaIiaBdaBdaApaIjaIkaIkaIlaImaInaIkaIoaIkaIpaIqaIpaIraIpaIsaGWaGWaItaGWaGWaGWaGWaIuaIvaGWaGXaEfaGZaIwaIxaIyaIzaIAaEfaIBaICaIDaIEaIFaIGaIHaIIaIJaBAaIKaFVaFWaILaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaekaekaCXaCYalQalQalQalQalQalQaIMalQaDgaINavMaBGaxaaIOaIPaIPaIPaIPaIPaIPaIPaIQaxaayuaIRaISaIRayuayuaITaIUaIVaADaADaADaADaIVaIWaIXaAEaIYaIZaIZaJaaJbaJaaIZaIZaJcaxoaJdaxvaJeaxvaJfaJfaJgaxvaJhaJiaxKaxKaxKaAgaDHaAgaxKaxKaxKaHUaHUaHUaJjaHYaHYaHYaHYaHYaJkaHUaHUaHUaIcaJlaIeaJmayZayZayZayZayZayZayZayZayZayZaJnaJoaJpaJqaJraJsaJtaJuaIkaJvaImaJwaJxaJwaIpaJyaJzaIpaJAaIpaJBaJCaJDaJEaJFaJFaJFaJGaJHaJIaGWaGXaEfaJJaIwaJKaIyaIzaJLaEfaJMaJNaJOaJPaJQaJRaJSaJTaJUaJVaJWaCTaHlaHmaFYaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaekaJXaekaeZaeZaeZaeZaekaBEaJYafOaqpaJZaxaaKaaKbaKbaKcaKbaKdarpaKeaKfaxaaKgaKhaKiaKiaKjaKiaKkaKlaKiaKiaKiaKiaKiaKiaKiaKmaKnaKoaKpaKqaKqaKraKsaKqaKqaKqaKtaKuaKvaKraKqaKqaKqaKwaGyaKxaHYaKyaKzaHZaIaaIaaIaaHXaHYaHYaKAaHYaKBaKCaKDaKEaKFaKGaKHaKIaHYaHYaKAaKJaKKaKLaKMaKNaKOaKPaKQaHYaKRaHYaBdaKSaKTaKUaJoaKVaKWaKXaKYaKZaLaaIkaLbaLcaLdaLeaLfaIpaLgaJzaLhaLiaIpaGWaLjaLkaLlaLmaLnaLoaLpaLqaLraGWaGXaEfaLsaLtaLuaLvaLwaLxaEfaLyaLzaEiaLAaLAaLAaLAaEiaLBaCRaJWaCTaBDaBDaBDaLCaLCaLCaLDaLDaLDaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaylavMavMavMavMavMavMaylavMaaaaqpaAuaLEaKaaLFaLGaLHaLHaLIarpaLJaKfaLKaLLaKhaLMaLNaLOaLPaLQaLRaKiaKiaKiaKiaKiaKiaKiaKmaKiaKhaKiaKiaKiaLSaLTaLUaLUaLUaLUaLVaLUaLWaLUaLUaLXaKhaGyaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaKAaHYaLYaLZaMaaMbaMcaMdaMeaMfaHYaHYaKAaHYaHYaHYaHYaHYaHYaHYaHYaHYaMgaHYaBdaKUaKUaKUaMhaMiaMjaMkaMlaMmaMnaIkaMoaImaMpaIkaIkaIpaMqaJzaMraLiaMsaIpaGWaGWaGWaGWaGWaGWaMtaMuaMvaGWaGXaEfaMwaGZaMxaMyaGZaMzaEfaEiaEiaEiaEiaEiaEiaMAaEiaEjaOxaEkaCTaMCaMDaBDaMEaMFaMGaMHaMIaLDaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaztaqpavMatBavMaNTaNUaNVaNWavMatBavMavMaqpaBGaxaaKaaMJaMKaLHaLHaLIarpaMLaKfaxaaLLaKhaKiaMMaMNaMNaMNaMOaMPaMQaMNaMRaMNaMNaMNaMSaMNaMTaMNaMNaMNaMUaMVaMWaMXaMXaMYaMZaNaaNbaNcaKiaNdaKhaGyaHYaNeaHYaNfaNfaNfaNfaNfaNfaNfaNfaNgaNfaNfaNfaNfaNfaNfaNfaNfaNfaNfaNfaNhaNfaNfaNfaNfaNfaNfaNfaNfaHYaHYaHYaBdaNiaNiaNiaNiaNiaNjaNkaJsaKZaNlaIkaNmaNnaNoaIkaNpaIpaNqaNraNsaLiaNtaIpaGWaNuaNvaNwaNxaNwaNyaNzaNAaGWaGXaEfaNBaNBaNCaNDaNEaNEbqoaEfaNGaNHaNIaBDaNJaNKaNLaEjaEjaNMaNNaBDaNOaBDaNPaNQaNRaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaylavMavMavMavMavMavMaylavMaaaaqpaAuaLEaKaaLFaLGaLHaLHaLIarpaLJaKfaLKaLLaKhaLMaLNaLOaLPaLQaLRaKiaKiaKiaKiaKiaKiaKiaKmaKiaKhaKiaKiaKiaLSaLTaLUaLUaLUaLUaLVaLUaLWaLUaLUaLXaKhaGyaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaKAaHYaLYaLZaMaaMbaMcaMdaMeaMfaHYaHYaKAaHYaHYaHYaHYaHYaHYaHYaHYaHYaMgaHYaBdaKUaKUaKUaMhaMiaMjaMkaMlaMmaMnaIkaMoaImaMpaIkaIkaIpaMqaJzaMraLiaMsaIpaGWaGWaGWaGWaGWaGWaMtaMuaMvaGWaGXaEfaMwaGZaMxaMyaGZaMzaEfaEiaEiaEiaEiaEiaEiaMAaEiaEjaEjaEkaCTaMCaMDaBDaMEaMFaMGaMHaMIaLDaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaztaqpavMatBavMaNTaNUaNVaNWavMatBavMavMaqpaBGaxaaKaaMJaMKaLHaLHaLIarpaMLaKfaxaaLLaKhaKiaMMaMNaMNaMNaMOaMPaMQaMNaMRaMNaMNaMNaMSaMNaMTaMNaMNaMNaMUaMVaMWaMXaMXaMYaMZaNaaNbaNcaKicrraKhaGyaHYaNeaHYaNfaNfaNfaNfaNfaNfaNfaNfaNgaNfaNfaNfaNfaNfaNfaNfaNfaNfaNfaNfaNhaNfaNfaNfaNfaNfaNfaNfaNfaHYaHYaHYaBdaNiaNiaNiaNiaNiaNjaNkaJsaKZaNlaIkaNmaNnaNoaIkaNpaIpaNqaNraNsaLiaNtaIpaGWaNuaNvaNwaNxaNwaNyaNzaNAaGWaGXaEfaNBaNBaNCaNDaNEaNEbqoaEfaNGaNHaNIaBDaNJaNKaNLaEjaEjaNMaNNaBDaNOaBDaNPaNQaNRaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafarpavMaylavMaBGaxaaxaaMBavMaylavMaNXaNYaNZaxaaKaaOaaOaaKcaOaaKdarpaObaKfaxaaOcaOcaOcaOdaOcaOeaOeaOeaOeaOeaOfaOgaOeaOhaOeaOeaOeaOiaOjaOkaOjaOlaOmaOnaKiaKiaOoaOpaOqaOraKlaKiaNdaOsaOsaHYaHYaHZaHUaHUaHUaHUaHUaHUaHUaHUaOtbUPbUObUQbUObUObUObVMbUObWHbUObXtaOtaHUaHUaHUaHUaHUaHUaHUaHUaHXaHYaHYaIkaOAaOBaOCaOCaOCaOCaOCaJsaODaOCaIkaOEaOFaOGaIpaIpaIpaOHaOIaIpaIpaIpaIpaGWaNwaOJaOKaOKaOKaOLaOMaNwaGWaGXaEfaONaGZaNCaNDaGZaGZaOOaEfaOPaOQaORaBDaEjaOSaOTaOUaOUaOVaOWaOXaOYaBDaOZaPaaNRaPbaNRaPcaPdaPdaPcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaPeaxaavNaNZaxaaxaaPfavNaxaaPeaNZaxaaxaaxaaPgaPhaPhaPhaPhaPhaPhaPhaPiaxaaOcaPjaOcaPkaOeaPlaPmaPnaPoaPpaPmaPqaPraPsaPtaPuaPvaOiaPwaPxaPyaOlaPzaOnaOnaPAaOnaOnaOsaPBaPCaPDaPEaOsaOsaPFaHYaHZaHUaaaaaaaaaaaaaaaaaaaaaaOtaPGaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaOtaaaaaaaaaaaaaaaaaaaaaaHUaHXaHYaPRaIkaPSaOCaOCaOCaOCaOCaPTaJsaODaPUaPVaJsaPWaPXaIpaPYaPZaQaaQbaQcaQdaQeaQfaIpaNwaQgaQhaQhaQhaQiaQjaNwaGWaQkaEfaQlaQlaNCaNDaQmaQmaQnaEfaEfaQoaEfaBDaQpaNKaNLaQqaQqaNMaNNaBDaBDaBDaLDaQraQsaQtaLDaLDaLDaLDaQuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaavMaQvaQwaQwaQwaQwaQwaQwaQwaQwaQvaQwaQxaxaaxaaLLaxaaQyaQzaxaaQAaQBaxaaQCaQDaOcaQEaOcaPkaOeaQFaPmaQGaPmaPmaPmaPqaQHaPmaPmaPmaPvaOiaQIaPxaPxaOlaPzaOnaQJaQKaQKaQLaOsaQMaQNaQOaQPaQQaQRaHYaHYaHZaHUaaaaaaaaaaaaaOtaOtaOtaOtaQSaQTaQUaQVaQWaQXaQYaQZaRaaRbaRcaOtaOtaOtaOtaaaaaaaaaaaaaHUaHXaHYaHYaRdaOCaRebkdaRgaRgaRhaRiaRjaRkaRlaRmaRnaRoaRpaRqaRraRraRsaRtaRuaRuaRvaRraRwaRxaRyaRzaRAaRBaRCaQjaNwaGWaGXaEfaGZaGZaNCaNDaGZaGZaGZaRDaREaGZbqpaBDaRGaRHaRIaQqaQqaRJaRKaRLaBDaRMaRNaPaaNRaROaNRaRPaPdaPdaRQaRRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaavMaQvaQwaQwaQwaQwaQwaQwaQwaQwaQvaQwaQxaxaaxaaLLaxaaQyaQzaxaaQAaQBaxaaQCaQDaOcaQEaOcaPkaOeaQFaPmaQGaPmaPmaPmaPqaQHaPmaPmaPmaPvaOiaQIaPxaPxaOlaPzaOnaQJaQKaQKaQLaOsaQMaQNaQOaQPaQQaQRaHYaHYaHZaHUaaaaaaaaaaaaaOtaOtaOtaOtaQSaQTaQUaQVaQWaQXaQYaQZaRaaRbaRcaOtaOtaOtaOtaaaaaaaaaaaaaHUaHXaHYaHYaRdaOCaReaRgaRgaRgaRhaRiaRjaRkaRlaRmaRnaRoaRpaRqaRraRraRsaRtaRuaRuaRvaRraRwaRxaRyaRzaRAaRBaRCaQjaNwaGWaGXaEfaGZaGZaNCaNDaGZaGZaGZaRDaREaGZbqpaBDaRGaRHaRIaQqaQqaRJaRKaRLaBDaRMaRNaPaaNRaROaNRaRPaPdaPdaRQaRRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaqpaqpavMavMavMavMavMavMavMavMaqpaqparpaLLaRSaRTaRTaRUaRTaRTaRTaRVaRTaRTaRTaOcaQEaRWaRXaOeaRYaPmaRZaSaaSbaScaSdaSaaPmaPmaPmaSeaOiaSfaSgaShaOlaPzaOnaSiaSjaSkaSlaOsaSmaSnaSoaSpaSqaQRaHYaHYaHZaHUaHUaIcaSraOtaOtaSsaStaSuaSvaSwaSxaSyaSzaSxaSAaSxaSxaSBaSCaSDaSEaSFaOtaOtaSraIcaHUaHUaHXaHYaHYaIkaSGaJsaOCaOCaOCaOCaSHaOCaSIaSJaSKaSLaSMaSNaSOaSPaSQaSRaSSaSTaSUaSVaSPaSWaSXaSYaSZaTaaTbaSZaTcaTdaGWaGXaEfaTeaTeaNCaNDaTfaGZaGZaTgaGZaThaTiaBDaTjaTkaTlaQqaQqaTmaTnaEjaBDaToaNRaPaaNRaROaTpaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaymaxbaTqaRTaTraTsaTtaTuaTtaTvaTraTtaRTaQEaQEaTwaTxaOeaTyaPmaTzaTAaTBaTCaTDaSaaPmaPmaPmaPvaOiaOiaOiaOiaOlaPzaOnaOnaOnaOnaOnaOsaTEaQOaQOaQOaQOaQRaHYaHYaHZaIaaIaaTFaTGaTHaOtaTIaTJaTKaTLaTMaTLaTNaTOaTPaTQaTRaTSaTTaTRaTUaTVaTWaOtaTXaTGaTYaTZaIaaHXaHYaHYaRdaOCaJsaUaaOCaUbaOCaUaaOCaODaPUaUcaOCaOCaOCaUdaUeaUfaUgaUhaUiaUjaUkaUlaIpaUmaUnaUoaQhaUpaQhaUqaUraGWaUsaEfaEfaEfaNCaNDaUtaUuaGZaUvaUwaJKaUxaBDaEjaUyaRIaQqaQqaRJaUzaUAaBDaUBaNRaPaaUCaUDaUEaLDaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUFavMavMaBGaUGaUHaUIaUJaUKaULaUMaUNaTraTtaRTaUOaUPaUQaOcaOeaURaUSaUTaUUaUTaUVaUWaUVaUVaUVaUXaUYaOeaUZaVaaVbaVcaVdaVeaVfaVgaOcaVhaOsaViaVjaVkaVlaVlaQRaHYaHYaHYaHYaHYaVmaVnaVoaVpaVqaVraVsaVtaVuaVvaVwaVxaVyaVzaVAaVBaVCaVDaVsaVEaVFaVGaVHaVIaVJaVKaVLaVMaHYaHYaIkaVNaVOaVPaVQaOCaVRaVSaVQaODaPUaVTaVTaVUaVVaIpaUeaUeaUeaVWaUeaUeaUkaVXaIpaNwaUnaQhaQhaUpaQhaVYaNwaGWaVZaWaaWbaWcaWdaWeaWfaWfaWfaWfaWfaWfaWgaWhaWiaWiaWiaWiaWiaWjaWkaWlaWhaWmaWnaWoaWpaNRaWqaLDaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWraWsatBaWsaxaaxaaRTaWtaWuaWvaWvaWvaWwaWxaWyaRTaWzaQEaUQaWAaWAaWAaWBaWCaWAaWDaWEaWFaWGaWHaWHaWIaWJaOeaWKaWLaWMaWNaWOaWPaWPaWQaWRaWRaWSaWSaWSaWSaWSaWTaOsaHYaHYaWUaWVaWWaWXaWYaWZaOtaXaaXbaXcaXdaXeaXfaXfaXgaXhaXiaXjaXkaXlaXmaXcaXnaXaaOtaWZaWYaXoaXpaWVaXqaHYaHYaRdaOCaXraXsaOCaOCaOCaXsaOCaODaOCaPUaPUaOCaOCaXtaXuaXvaUeaUeaUeaUeaXwaXxaIpaXyaXzaQhaXAaXBaXCaXzaXDaGWaXEaXFaXFaXGaXHaXIaXJaXKaXLaXJaXJaXJaXMaXNaXOaXPaXPaXPaXPaXPaXQaXRaXNaXSaXTaXUaXVaNRaXWaLDaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavMavMaBGaxaaXXaTraXYaWvaWvaWvaXZaYaaTraRTaYbaYcaUQaWAaYdaYeaYfaYgaWAaYhaYiaYjaOeaYkaYlaYmaRZaOeaYnaYoaYpaYpaYpaYpaYqaYpaYpaYraYsaYsaYsaYtaYsaYuaYvaKAaKAaYwaYxaYxaYxaYxaYxaYxaYyaYzaYAaYBaXgaYCaYDaYDaYEaYFaYDaYCaXiaYGaYHaYIaYJaYHaYHaYHaYHaYHaYHaYKaKAaKAaIkaYLaYMaYNaYOaOCaOCaOCaYPaYQaYRaOCaYSaYTaYUaIpaIpaIpaYVaYWaYWaYWaIpaIpaIpaYXaQhaQhaYYaYZaZaaZbaYYaGWaZcaXFaZdaEfaZeaZfaZgaZhaZiaZjaTgaUuaZkaBDaZlaEjaZmaQqaQqaZmaEjaZnaBDaZoaZpaZqaROaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaZraNZaZsaRTaTtaZtaTtaTraZuaZvaZwaTtaRTaZxaZyaZzaWAaWAaWAaZAaZBaWAaZCaZDaZEaOeaYkaYlaYmaRZaOeaYnaYoaYpaZFaZGaZGaZGaZHaYpaZIaZJaZKaZLaYvaYvaYvaYvaHYaHYaZMaZNaZOaZPaZQaZRaZSaZTaZUaZVaZWaZXaYDaYDaZYaZZaZYaYDaYDbaababbacbadbaebafbagbahbaibajaYHaXqaHYaHYaIkaIkaIkaIkaIkbakaRdbakbalbamaIkaIkaIkaIkaIkbanbaobaobaobaobaobaobapbaobanaYYbaqbaqaYYbaraXFaXFaXFbanaZcaXFaZdaEfaEfaEfbasbatbasaEfbasaEfaEfaBDaBDbaubaubaubaubaubauaBDaBDbavaNRbawaROaNRaNRaRQaPdaPdaRQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaqpaqpavMavMavMavMavMavMavMavMaqpaqparpaQyaxaaRTaRTaRUaRTaRTaRTaRVaRTaRTaRTbaxbaybazaWAbaAbaBaZAbaCaWAbaDbaEbaDaOeaYkaYlaYmaRZaOeaYnaYoaYpaZGbaFbaFaZGbaFaYpaZIbaGbaHbaHbaIbaJbaKaYvbaLaHYaWUbXubaNbaObaPbaQbaQbaRbaSbaTaZWbaUaYDaYDaZYbaVaZYaYDaYDbaWbabbaXbaYbaZbbabbbbbcbajbbdaYHaXqbbeaHYaGybbfaXFaXFaXFaXFaXFaXFaXFaXFbbgaXFaXFaXFaXFbbhaXFaXFaXFaXFaXFaXFaXFaXFbbfaXFaXFaXFaXFbaraXFaXFaXFbbibbjaXFaXFbbkaXFaXFaXFbblaXFaXFaXFaXFaXFbbhbbmaXFaXFaXFaXFaXFaXFbbfbbnaRNaNRbbobbpbbqbbraLDaLDaLDaQuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaqpaqpavMavMavMavMavMavMavMavMaqpaqparpaQyaxaaRTaRTaRUaRTaRTaRTaRVaRTaRTaRTbaxbaybazaWAbaAbaBaZAbaCaWAbaDbaEbaDaOeaYkaYlaYmaRZaOeaYnaYoaYpaZGbaFbaFaZGbaFaYpaZIbaGbaHbaHbaIbaJbaKaYvbaLaHYaWUbXubaNbaObaPbaQbaQbaRbaSbaTaZWbaUaYDaYDaZYbaVaZYaYDaYDbaWbabbaXbaYbaZbbabbbbbcbajbbdaYHaXqbbecrtaGybbfaXFaXFaXFaXFaXFaXFaXFaXFbbgaXFaXFaXFaXFbbhaXFaXFaXFaXFaXFaXFaXFaXFbbfaXFaXFaXFaXFbaraXFaXFaXFbbibbjaXFaXFbbkaXFaXFaXFbblaXFaXFaXFaXFaXFbbhbbmaXFaXFaXFaXFaXFaXFbbfbbnaRNaNRbbobbpbbqbbraLDaLDaLDaQuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavQavPavPavPavPavPavPavPavPavQavPbbsbbtaxabbuaRWbbvaWPaWPaWPbbwbbxbbyaOcbbzbbAbbBaWAaWAaWAbbCbbDaWAaOeaOeaOeaOeaYkaYlbbEbbFaOeaYnaYoaYpaZGbbGaZGbaFbbHaYpaZIbbIbaHbaHbaHbbJbbKaYvbbLaHYaWUbXvbbMbaObbNbbObbPbbQbbRbbSaZWbbTaZYaYDbbUbbVbbUaYDaZYbbWbabbbXbbYbbZbcabcbbbcbajbajaYHbccaHYaHYaGybbfaXFaXFaXFaXFaXFaXFaXFaXFbcdaXFaXFaXFaXFaXFaXFbcebcfbcfbcfbcgaXFaXFbbfaXFaXFaXFaXFbaraXFaXFbchaWbbciaWbaWbaWbaWbaWbaWbbcjaWbaWbaWbaWbaWbaWbaWbaWbaWbaWbaWbaWbbckbclbcmbcnbcnbcoaROaNRaNRbcpaPdaPdbcpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafavMawZaxaawZaxbaxaaxaaxcawZaxaawZaxbaxabcqaHqbcrbcsbctbcrbcrbcrbcubcvaOcaOcaOcbcwaUQaWAaYdbcxbcybczaWAbcAbcBbcAaOeaOeaOebcCbcDaOcaYnaYoaYpbcEaZGbaFbcFbcGaYpaZIaYvbcHbaHbaHbcIbcJbcKbcLaHYaWUbXvbcMbaObbNbcNbcObcPbaSbaOaZWbcQbcRaYDbcSbcTbcUaYDbcVbcWbabbcXbcYbcZbdabdabdbbajbdcaYHbddbdeaHYaGybbfaXFaXFbdfaXFbdgbdhbdhbdhbdibdhbdhbdhbdjaXFaXFaXFaXFaXFaXFbdkbdlbdmbbfaXFaXFaXFaXFbarbdnbdobdpbdqbdraXFaXFaXFaXFaXFbdsbdtaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFbbfbdubdvbdwbdxaROaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafavMawZaxaawZaxbaxaaxaaxcawZaxaawZaxbaxabcqaHqbcrbcsbctbcrbcrbcrbcubcvaOcaOcaOcbcwaUQaWAaYdbcxbcybczaWAbcAbcBbcAaOeaOeaOebcCbcDaOcaYnaYoaYpbcEaZGbaFbcFbcGaYpaZIaYvbcHbaHbaHbcIbcJbcKbcLaHYaWUbXvbcMbaObbNbcNbcObcPbaSbaOaZWbcQbcRaYDbcSbcTbcUaYDbcVbcWbabbcXbcYbcZbdabdabdbbajbdcaYHbddbdecuAaGybbfaXFaXFbdfaXFbdgbdhbdhbdhbdibdhbdhbdhbdjaXFaXFaXFaXFaXFaXFbdkbdlbdmbbfaXFaXFaXFaXFbarbdnbdobdpbdqbdraXFaXFaXFaXFaXFbdsbdtaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFbbfbdubdvbdwbdxaROaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpavMbdyavMaBGaxaaxabdzavMbdAavMayqbdBbdCbdCbdDbdEbdFbdGbdHbdIbdJbdKbdLbdMbdMbdNbdOaWAaWAaWAbdPbdQaWAaOcaOcaOcaOcbdRaVbbdSbdTaVbbdUaYoaYpbdVaZGaZGbdWbdXaYpbdYaYvbdZbaHbaHbeabebbecbedaHYaWUaYxbaObeebaPbaPbefbaRbaSbegbehaXfbeibejbekbekbekbelbemaXkbenbeobepbeqberbajbesbajbetaYHaXqaHYaHYbeubeubeubeubeubeubeubevbewbewbexbeybeybevbezbezbezbezbezbeAbeAbeBbeCbeAbeAbeAbeAbeDaXFbeEbeFbeGbeHbeIaXFaXFaXFbeJbeJbeKbeKbeKbeKbeKbeLbeMbeMbeMbeNbeMbeObePbeMbeMbeQbeRbeRbeRbeRbeSbeTbeUbeVaLDaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaztaqpazuatBavMaymaynbeWbeXavMatBazuavMaqpaztarpbdDbeYbeZbeZbeZbfabdJbfbbfcbfdbfdbfebffaWAaYdbfgbdPbfhaWAbfibfiaQEaQEbfjbfkbflbfmbflbflbfnaYpbfobfpaZGaZGbdXbfqbfraYvbfsbaHbaHbeabftbfubedaHYbfvaYxbfwaYAbfxbfybfzbfAbaSbfBaYxaafbfCbfDbfDbfDbfEbfFbfGaafaYHbfHbfIbfJbfKbajbfLbajbfMaYHaXqaHYbfNbeubfObotbfQbfRbfSbeubqnbfUbfVbfWbfXbfXbfXbfYbfZbgabgbbezbgcbgdbgebgdbgdbgfbggbeAbeGbghbeGbeGbeGbgibeIbeIbgjbeIbgkbgkbeKbglbgmbgnbeKbgobgpbgobeKbgqbgrbgqbeRbgsbgtbgsbeRbgubgvbeRbgwbgxaLDaLDaLDaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafavMbdyavMavMavMavMavMavMbdAavMaafaafaafaaabdDbgybdDbgzbeZbgAbgBbcraVbbgCbgDbgEbgFbgGbgGbgGbgGbgGbgGbgHbgIbgJbfdbgKbgLaYpaYpaYpaYpaYpaYpbgMaYpaYpaYpbgNbgObgPbgQbgRbaHbaHbeabgSbecbedaHYbgTaYxbgUaYAaYAaYAaYAbfAbaSbgVaYxaafbfCbfDbgWbgXbgYbfDbgZaafaYHbhabbYbhbbhcbajbesbajbajaYHaXqaHYaHYbeubqqbhebhfbhgbhhbhibfXbhjbfXbhkbfXbfXbhlbfYbhmbhnbhobezbhpbgdbhqbgdbhpbhrbgdbeAbhsbhtbhubhvbeGbhwbeIbhxbhybhzbhAbhAbeKbhBbhCbhDbhEbhFbhGbhHbeKbhIbhJbhKbeRbhLbhMbhLbhNbhObhObeRbhPbgxaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaabdDbhQbhRbhSbhTbhTbhUbhVaWPbhWaOcbhXbhYbhZbhZbhZbiabiabiabiabiabiabiabibbgNbicbidbiebifbigbihbiibijaYpbikbilbimbinbinbiobaHbaHbeabaHaYvbedaHYaWUbipbiqbirbisbitaYAbiubaSaYxaYxaafbfCbfDbgXbfDbgXbfDbgZaafaYHaYHbivbcZbiwbajbixbiybizaYHaXqaHYbiAbiBbiCbiDbqrbiFbrWbiHbfXbiIbiJbiKbiLbiLbiMbfYbiNbhnbiObezbhpbgdbhqbiPbhpbiQbiRbeAbiSbiTbiUbiVbeGbgibeIbiWbiXbiXbiYbiZbjabjbbjcbjcbjcbjdbjebjfbeKbjgbhJbjhbeRbjibjjbjkbjlbjmbjnbeRbhPbgxbjobjobjobjoaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaacuzaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaabdDbhQbhRbhSbhTbhTbhUbhVaWPbhWaOcbhXbhYbhZbhZbhZbiabiabiabiabiabiabiabibbgNbicbidbiebifbigbihbiibijaYpbikbilbimbinbinbiobaHbaHbeabaHaYvbedaHYaWUbipbiqbirbisbitaYAbiubaSaYxaYxaafbfCbfDbgXbfDbgXbfDbgZaafaYHaYHbivbcZbiwbajbixbiybizaYHaXqaHYbiAbiBbiCbiDbqrbiFbrWbiHbfXbiIbiJbiKbiLbiLbiMbfYbiNbhnbiObezbhpbgdbhqbiPbhpbiQbiRbeAbiSbiTbiUbiVbeGbgibeIbiWbiXbiXbiYbiZbjabjbbjcbjcbjcbjdbjebjfbeKbjgbhJbjhbeRbjibjjbjkbjlbjmbjnbeRbhPbgxbjobjobjobjoaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaabdDbjpbdDbjqbjrbjrbjsbdDbjtbjtaOcbjubjvbjubjubjubjvbjuaOcaOcaYpaYpaYpbjwbgNbjxbjxbjybjxbjxbjxbiibjxbjzbjAbjBbjCbjDbjEbjEbjEbjEbjFbjGbjHbjIbjJbjKbjLbjMbjNbjObjPaYAbfAbaSaYxaafaafbfCbfDbgYbjQbgWbjRbgZaafaafaYHbjSbjTaYHaYHaYHaYHbjUaYHbjVaHYaHYbeubjWbhebjXbhgbhhbjYbfXbjZbkabkbbkcbtmbkebezbkfbkgbkhbezbhpbgdbkibkjbhpbkkbgdbeAbeGbeGbeGbeGbeGbgibeIbklbkmbknbkobkpbkqbkrbksbktbktbkubkvbkwbeKbkxbhJbkybeRbkzbkAbkBbkCbkDbkEbeRbhPbkFbkGbkHbkIbkHaaaaaaaafaaaaafaaaaafaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaabdDbkJbhRbkKbjrbkLbkMbdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkNbkObkPbkQbkRbkSbkSbkTbkSbkSbkSbkUbkSbkVbkWbkXbkYbkZbecbecbecblaaYvblbaYvblcbldaKAbipbleblfblfblfblfblgblhbliaafaaabljblkbllbfDbfDblmbgZaaaaafblnbloblpblqblrblsblnbltblnbluaHYaHYbeublvbhectCblwblxbeublybjZbkablzblAbfXblBbezblCblDblEbezblFblGblHblIblJblKblLblMblNblOblNblNblNblPbeIblQbhyblRblSblTbkqblUblVblWblWblXblYblZbeKbmabgrbmbbeRbmcbmdbmebkCbhObmfbeRbhPbmgbmhbmibmibmibmibmibmibmjaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaabdDbmkbhRbhRbhRbdDbdDbdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkNbmlbjxbmmbmnbmobmnbmnbmnbmnbmnbmpbmnbmqbmrbmsbmtbmubmvbecbmwbaHbmxbmybmzbedbmAbmBbipbipblibmCbmDbmEbmFbmGbliaaaaaabfCbmHbmIbmJbmIbmKbgZaaaaaablnbmLbmMbmNblnbmOblnbltblnbluaHYaHYbeubmPbhebjXbmQbmRbeubmSbmTbmUbmVbmWbfXbmXbezbfYbmYbmZbezbeAbnabeAbeBbnbbncbncbncbncbncbncbncbncbgibeIbndbkmbknbnebnfbngbnhbnibnibniblXbkvbnjbnkbnlbnmbnnbnobnpbnqbnpbnrbhObnsbeRbntbnubnubnubnubnubnubnubnvbgxbjobjobjoaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6617,22 +6620,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbkNaYpbkNbkNbkNbwibwibwibwibwjbwkbwkbwibwibwlbwlbwmbwnbuQbwobwpbwqbwrbuQbsnbqHaHZaIcaIcbliblibwsbliblibwtbliaHUaHUaHUbwubwvbsubwwbwxaHUaHUaHUbpubpubpubpubpubpubpubpubpubvhaHYbwybtXbtXbtXbwzbtXbtXbtXbwAbvpbwBbwCbwDbwEbwFbwGbwHbwIbwDbhkbjZbsPbwJbwKbwLbwMbwNbwObrAbrAbrAbwPbwQbwRbwSbwTbwTbwTbwTbwUbwTbwTbwTbwVbwVbwWbwXbwYbwYbwZbxabqibuxbxbbxcbxdbxebxfbxgbxhbrVbrVbFBbFBbFBbrVcfYbrVbtnbgxbsdbsebjobjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibxkbxlbxmbxnbxobxpbwkbxqbxrbxsbxtbxubxvbxwbxxbxybuQbsnbqHaHYaHYaHYbxzaKQbxAaKAbxBbxCbxDaVLaVLaVLbxEbxFbxGbxHbxIaHYaHYaHYaHYaKQaHYaKAaHYaHYaHYbxzaHYbvhaHYbxJbtXbxKbxLbxMbxNbxObtXbxPbxQbxRbxSbwDbwEbwEbxTbxUbxVbwDbhkbxWbsPbrAbxXbxYbxZbwQbyabybbycbydbncbncbeHbyebwTbyfbygbyhbyibyjbykbwTbylbymbynbyobypbwYbyqbyrbysbytbyubyvbywbyxbyybyzbxhchfchfchfchfchfchfchfbrVbtnbgxbsdbsebjoaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwkbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObxxbyPbuQbsnbyQaHYaHYaHYaHYaHYaHYaKAaHYbqHaHYaHYaHYaHYaHYbyRbySbyTaHYaHYaHYaHYaHYaHYaHYaKAbyUaHYaHYaHYaHYbvhbyVbyWbtSbyXbyYbyZbyYbzabtXbzbbvpbvqbzcbtXbzdbzebzfbzgbzhbtXbhkbjZbsPbsPbsPbsPbsPbncbncbncbncbncbncbzibgibzjbwTbzkbzlbzmbznbzobzpbwTbzqbzrbzsbztbzubwYbyqbzvbzwbzxbzybzzbzzbzzbzAbzBbxhchfchfctEctDchfchfchfbrVbtnbgxbsdbsebjobjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibzEbzFbzGbzHbzIbzJbwkbxrbxrbzKbzLbuRbzMbzNbzObzPbuQbzQbzRbzSbzSbzSbzTbzSbzSbzUbzSbzVaHYbzWbzXbzYbzYbzZbAabAbbAcbAdbAeaVLaVLbAfaVLbAgbAhaVLbAibAjbAkbAlaHYaHYbtXbAmbAnbAobtWbApbtXbtWbAqbArbtXbtXbtXbtXbtXbtXbtXbtXbhkbjZbfXbAsbAtbAubAvbAwbAxbAybAzbAAbAwbzibgibABbwTbACbADbAEbAFbAGbAHbwTbAIbAJbAKbALbAMbwYbyqbANbAObuybAPbAQbARbASbATbAUbxhchfchfchfbGLchfchfchfbrVbtnbqtbAWbqvbqwbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibzEbzFbzGbzHbzIbzJbwkbxrbxrbzKbzLbuRbzMbzNbzObzPbuQbzQbzRbzSbzSbzSbzTbzSbzSbzUbzSbzVaHYbzWbzXbzYbzYcuBbAabAbbAcbAdbAeaVLaVLbAfaVLbAgbAhaVLbAibAjbAkbAlaHYaHYbtXbAmbAnbAobtWbApbtXbtWbAqbArbtXbtXbtXbtXbtXbtXbtXbtXbhkbjZbfXbAsbAtbAubAvbAwbAxbAybAzbAAbAwbzibgibABbwTbACbADbAEbAFbAGbAHbwTbAIbAJbAKbALbAMbwYbyqbANbAObuybAPbAQbARbASbATbAUbxhchfchfchfbGLchfchfchfbrVbtnbqtbAWbqvbqwbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibwibwkbwkbwkbwkbwibwibAXbAYbAZbBabuQbuQbuQbuQbuQbuQbBbbBcaIcaIcaIcaIcbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbBebBfbBgbBhbBhbBhbBhbBhbBibBhbBhbBjbBhbyebBkbyeaIdaJlbBlbtXbBmbBnbBobBpbBqbtXbBrbxQbBsbBtbBubBvbBwbBxbBybBzbBAbBBbBCbBDbBDbBEbBFbBGbBHbBIbBJbBKbBLbAwbzibgibBMbBMbBMbBMbBMbBMbBMbBMbBMbBNbBNbBNbBNbBNbBNbBObBPbBQbuybuybuybuybuybuybuybxhbrVbrVbrVbrVbrVbrVbrVbrVbtnbgxbBRbBSbjobjoaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTaaaaaaaaaaafaaaaaabwlbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfaaaaaaaafaaabBdbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbBhbCsbCtbCubCvbCwbCvbCvbCxbCybCzbCAbyebyebyebyebtXbCBbCCbCDbCCbCEbtXbCFbvpbCGbCHbCIbCJbCIbCIbCKbCLbCMbCNbCObCObCObCPbCQbvlbCRbCSbCTbCUbCVbAwbzibgibBMbCWbCWbCWbCXbCWbCWbCWbBMbCYbCYbCZbCYbCYbBNbDabDbbqibDcbDdbDebDfbDgbDhbJqbDjbDkbDlbDmbDnbDobDpbDqbDqbDrbDsbDdbDdbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaekaeZaekaelaaaaafaaabwlbwlbDtbxrbDubDvbDwbDxbDybDybDzbDAbDBbDCaafbDDbDEbDFbDGbDHbDIbDJbDIbDKbDIbDIbDIbBdbDLbDMbDNbBhbDObDPbDQbDRbDSbCvbDTbBjbBhbDUbDVbDWbDXbDYbDZbEabEbbCCbEcbCCbxQbEdbEebEfbEgbtXbEhbEibCCbCCbEjbEkbmSbmSbmSbmSbmSbElbEmbpGbEnbEobEpbBKbEqbAwbzibgibBMbCWbCWbCWbCWbCWbCWbCWbBMbErbEsbEtbEubEvbBNbEwbExbEybEzbEAbEBbECbEDbEDbEDbEDbEEbEFbEGbDnbjobEHbEIbEJbEJbEKbELbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZbEPbEQbEPajZbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbOnbtXbFAbCCbCCbCCbOCbFCbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbGabGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQaHnalQaeZbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGNbtXbGObGPbGQbtXbGRbGSbGUbGTbGVbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybHzbHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalQbHJbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbIkbmSbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdbIAbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbIHbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZbEPbEQbEPajZbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhbFkbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbFAbtXbFCbCCbCCbCCbCCbGNbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbGabGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQaHnalQaeZbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbGTbGVbGUbIkbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbBKbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybHzbHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZalQalQalQbHJbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbMNbMNbMNbMNbMNbMNbOnbOCbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdbIAbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbIHbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaHnaHnaHnaeZbERbIObIPbIQbIRbxrbxrbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobEHbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMbJUbJVbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajZamIbJWbJXajZbERbERbERbwlbwlbERbERbERbwlbwlbwlaaaaaaaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebtnbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaekbLiaekafOaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBbLCbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbLIbLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWbLXbLYbLZbMabMbbMcbDnbMdbtnbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMbMNbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebtnbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUbMUbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebtnbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebtnbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebtnbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbOsbGnbOtbGnbOubBcaaaaaaaaaaaabJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbPbbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbtnbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbPxbGnbGnbGnbPybBcaaaaaaaaaaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbQBbQCbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbRdbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbCWbCWbRhbRibKKbRjbKKbRkbRlbCWbCWbCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbjobRxbRybjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbRzaafaafaafbBcbBcbBcbBcbBcbBcbBcbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbRybjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaabBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbRdbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbCWbCWbRhbRibKKbRjbKKbRkbRlbCWbCWbCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbjobRxbRybjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafbRzaafaafaafbBcbBcbBcbBcbBcbBcbBcbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbRybjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabStbSubSubSubSubSvbSwbSwbSxbSybSzbSAbSBbSCbSDbSEbBcbGnbGnbGnbGnbGnbGnbGnbSFbSGbSHbSIbSJbSKbSKbSKbSKbSLbSMbSMbSMbSNcqubSObDybDybSPbBccqnbMqbOAbSQbSRbSSbSTbRQbRQbSUbSVbRQbRQbSWbSXbSYbMFbSZbTabTbbTcbMFbTdbTebTfbOUaafbOVbTgbThbTibMKbMLbNPbTjbTkbTkbTkbTlbLFbTmbQZbTnbTobTpbTqbTrbTsbTsbTtbLFbKvbBMbItbItbItbItbTubTvbRjbTwbTubItbItbItbItbItbTxbTybTzbTAbTBbTCbTCbTCbTCbTDbOmbSqbSqbTEbPvbTFbSsbRybjobjobjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabTGbTGbJYbGnbTHbTIbTJbTKbTLbBcbTMbJYbJYbJYbJYbJYbJYbJYbJYbDCbTNbTObTObTObTObTObTObTObTObTPbTPcqxbTPbTPbTQbTRbBccqnbMqbOAbSQbTSbTTbTUbTVbPSbTWbTXbPSbPSbTYbTZbUabUbbUcbUdbUebUfbMFbTdbUgbUhbQabQbbNLbUibRYbRYbMKbMLbNPbUjbyebyebyebNYbLFbUkbMUbMUbUlbUmbUnbUobUpbUobUnbLFbKvbBMbQjbQkbQkbUqbQmbKKbQnbQobUrbUsbCWbCWbCWbItbUtbUubUvbUwbRnbRpbUxbUybUzbUAbOpbSqbSqbSqbPvbTFbSsbRybsebsebjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUBbUCbUDbGnbUEbTIbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjbyebUZbzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWbVibCWbVjbRibKKbRjbKKbRkbVkbCWbVibCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbVybjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6647,32 +6650,32 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaaaaaaaaaaaabBcccRbBcbGnbGnbBcaafaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhbRPcdiaafaafaafaafaafaafbMLcdjcdjcdjcdkcdlcdjcdjcdjcdmbyecdncdncdocdncdnbyebABbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbZbbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccdwbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdLcdMcdNcdOcdPcdQcdRbMFcdScdTcdUbLuaafaafaaaaaaaaaaaacdVcdWcdXcdYcdZceacebceccdjcedceecefcegcehccBccBbzibzibZGbntceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqcercesbjobjocetceoceuceocevbRybjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacexaaaaaaaaacexaaaaaaaaacexaaaaaaaafcducducduceycezceAceBceCbGnceDceEceFceEceEceEceEceEceEceEceEceEceEceGceHbRGceIceJceKceKceKceKceKceKceKceKceKceKceKceKceKceKccTccUceLceMceNceOcePceQceRceSceTceKbLuceUbLuceVbLuceUbLuceVbLuceWbLuceWbLuaafaafaaaaaaaaaaaacdjceXceYceZcfacfbcfccfdcdjcedcfeccBcffcfgcfhcfibDZcfjcfkcflcflcflcflcflcflcflcfmcfncflcflcflcflcflcflcfocfpcfqbmicfrcfscftcftcftcfucfvcfwcfxcfycfzcftcftcfAcfBbjocaUbsecfCbjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcfDcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaaaaaaaaaaaaaaaaaaaaacdjcgqcgrcgscgtcgucgvcgwcdjbzicgxcgycgzcgAcgBbDZcgCcgDbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbXkbXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafalkcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaaaaaaaaaaaaaaaaaaaaacdjcgqcgrcgscgtcgucgvcgwcdjbzicgxcgycgzcgAcgBbDZcgCcgDbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbXkbXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacgLaaaaaaaaacgLaaaaaaaaacgLaaaaaaaafcducducducgMcgNcgOcdvbGnbGnbGnbGnbBcaaaaaaaafaaaaaaaafaaaaaaaafaaabBccgPbBccgQcgRceKcgScgTcgUcgVcgWcgXceRceRceRcgYcgZchachbcgXccUchcchdchecgictIccUchgchhchiceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaaacdjchmchnchochpchqchrchschtchuchubFMchvchwbFMchxbyebyebyeaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjochybLebjochzbZabjoaaaaaaaaaaaabjobsebZachAchBchBchCchDchBaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcaafaafchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacihciichncijcikcilcimcincdjaafbyecczciobNPbNPbyebyeaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcaaaaaachGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcjgcjhcjicdjaafaafaafcjjaaaaaaaafaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkbXkbXkbjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnbBcaaaaaachGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaaaaaaaaaaaacdjcdjcdjcjQcjRcjScjTcjUcjRaafaaaaafcjVaaaaaaaaaaaaaaaabtaafaafaafaafaafaafaaaaaaaaaaaaaaaaaabXkbsecjWbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcaafaafchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaaaaaaaaaaaaaaaaaaaaaaaackBcjRckCckDckEcjRaafaaaaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkckFbsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnbBcaaaaaachGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaaaaaaaaaaaacdjcdjcdjcjQcjRcjScjTcjUcjRaafaaaaafcfDaaaaaaaaaaaaaaaabtaafaafaafaafaafaafaaaaaaaaaaaaaaaaaabXkbsecjWbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcaafaafchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaaaaaaaaaaaaaaaaaaaaaaaackBcjRckCckDckEcjRaafaafaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkckFbsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZXckIbZZaaabZXckIbZZaaabZXckIbZZaaaabfaaaaaaaafaafaaaaaaaaaaaaaaabJYbGnbJYaaaaaachGckJckKckLckMckNchGchGchGceKckOckkckPceKceKceKceKceKckQceRckRciHceSceRceRceRckSckTckUceSceSciHceRckVceRceRckWckXceKaafaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjSckZcjUcjRaaaaafaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkbsebuEbjoclabsebsebsebsebsebsebsebjoaafaaaaaaaaaaafaaackGclbckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaabfaaaaaaaaaaafaafaaaaaaaaaaaabJYbGnbJYaaaaaachGclccldcleclfclgclhclicljclhclkcllclmclncloclpclqclrclschLcqqcluclvclwclxclyclzclyclzclAclBclCchLchLclDchLclEclFceKceKceKceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaackYcjRclGclHclIclJaafaafaafaafaafaaeaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaabXkbXkbXkbjocipbjobjoclKclLbLebMdbjobjoaafaaaaaaaaaaafaaackGckHckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaabfaaaaaaaaaaafaafaaaaaaaaaaaabJYbGnbJYaaaaaachGclccldcleclfclgclhclicljclhclkcllclmclncloclpclqclrclschLcqqcluclvclwclxclyclzclyclzclAclBclCchLchLclDchLclEclFceKceKceKceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaackYcjRclGclHclIclJaaaaafaafaafaafaaeaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaabXkbXkbXkbjocipbjobjoclKclLbLebMdbjobjoaafaaaaaaaaaaafaaackGckHckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccmuaekaekaelaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcmYaeXaeYaeZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaaaaaaaaaaaaafcnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBcbRAbBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccnAaekaekafOaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacjVaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafcnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcmYaeXaeYaeZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaaaaaaaaaaaaafcnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBcbRAbBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccnAaekaekafOaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafcnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBccgPbGncnEbBcaafchGchGchGchGchGaafaaaaaaaafceKcnFceRcnGcnHcnHcnIcgccgccnJceKcnKcnLcnLcnLceKcnMcnNcnOcnPcnQceKcnLcnLcnLcnKceKcnJcgccnRceSceRceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaafaaaaaaaafaaaabfaaaaaaaafaaaaafaaaaaacnSaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcotcoubHMbBcbBccovcovcovcovcovcovcovcovcgcceKcowcoxcoycozcowceKceKceKcnJceKceKcogcogcogcogcoAcoBcoCcoBcoDcogcogcogcogceKceKcnJceKckkcoEcoFcoGcoHceRcoIcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYbJYbJYbJYbBcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcoPcoQcoRaaaaaaaaacogcogcogcogcogcogcogcogcogaaaaaaaaacoScoTcoUcoVcoWclyclycoXcoYcoZcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaabfacfcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpdcpbceKcpecpfceKcgccgccpgcgcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaaaaaaaaaafaaaaaaaaacosaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcphcpicpjaafaafaafcpkaaaaaaaaaaaacpkaaaaaacpkaafaafaafcplcpmcpnceKcpocdIcgcaafaaacppcpqaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpraaaaaaaafaaaaaaaaaaaaaaacpsaaaaaaaaaaafaaaaaacpccpccpbceKaagaagaagaafaaacptcpucpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpycpzaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpAcpBcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpCcpDceKaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacptcpEcpqcnDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafcpkaafaafcpGcpHcpIaafcpJaaaaafaaaaaacpccpFceKceKaaaaaaaagaafaafcnDaafaafcnDaafaafaafaafaafaafaafaafaafaafaafaafcnDaafcpKcpEcpzaafaafachachachachachaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaafaaaaaaaaacpLaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcpMceKcpNcpcaaaaaaaafaaaaaaaafcpOcpPcpQaafaaaaaaaafaaaaaacpccpRceKcpMaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcnDaaaaaacpScpEcpqaaaachcracqZcreachaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacmxaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafaaacpTaafcpUcpVcpWaafaafcpkaafaaaaaacpccpFceKceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacpXcpYcpqachcrlcrjcrnachaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcpZcqacpZcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpCcpDcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpAcpBceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcpXcqbachcrrcrqcrtachaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacmxaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafcpkaafaafcpGcpHcpIaafcpJaaaaafaaaaaacpccpFceKceKaaaaaaaagaafaafcnDaafaafcnDaafaafaafaafaafaafaafaafaafaafaafaafcnDaafcpKcpEcpzaafaafcqhcqhcqhcqhcqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaafaaaaaaaaacpLaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcpMceKcpNcpcaaaaaaaafaaaaaaaafcpOcpPcpQaafaaaaaaaafaaaaaacpccpRceKcpMaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcnDaaaaaacpScpEcpqaaacqhbPGbPCcqZcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacmxaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafaaacpTaafcpUcpVcpWaafaafcpkaafaaaaaacpccpFceKceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacpXcpYcpqcqhcrecracrjcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcpZcqacpZcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpCcpDcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpAcpBceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcpXcqbcqhcrlcqvcrncqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacmxaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccqcaaaaaacqdaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacpccpccpbceKaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecqfcqhcrucqwcrvcqhcqecqeaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaceKcqicpicpjaafaafaafcpkaaaaaacpkaaaaaaaaaaaacpkaafcqjaafcplcpmcqkceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagcnDaafaafaafaafcqecrCcrycrHcrEcrLcrKcrMcqeaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaabfabfabfabfabfaafaafaaacmxaaaaafaafabfabfabfabqabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcqscpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpccqsceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecrOcrycrPcqvcrQcqLcrTcqLaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcqzaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcqscpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpccqsceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecrOcrycrPcqvcrQcqLcrTcqLaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcjVaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcqscpccqAaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaacqBcpccqsceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecsgcrWcshcqOcsmcslcsncqeaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachWceKceKceKcpcaafaafaafaafaaaaaaaaaaaaaaaaafaafaafaafcpcceKceKceKchWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecqecqecsQcsqcsRcqecqecqeaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacqsceKceKceKceKceKceKceKceKceKceKceKceKceKceKceKceKceKcqsaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafaaacsTcqgcrPcsUcsXcqgcsTaaaaagaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm
index aad3f63fc51..d831d1ba2ae 100644
--- a/_maps/map_files/generic/z2.dmm
+++ b/_maps/map_files/generic/z2.dmm
@@ -204,8 +204,8 @@
"dV" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/simulated/shuttle/plating,/area/space)
"dW" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "supply dock loading door"},/turf/simulated/shuttle/plating,/area/space)
"dX" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/space)
-"dY" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/space)
-"dZ" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/space)
+"dY" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall/interior{icon_state = "swall_f5"},/area/space)
+"dZ" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall/interior{icon_state = "swall_f9"},/area/space)
"ea" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/space)
"eb" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/space)
"ec" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/space)
@@ -233,12 +233,12 @@
"ey" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control)
"ez" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/shuttle/plating,/area/space)
"eA" = (/turf/unsimulated/wall/fakedoor{name = "Centcom Security"},/area/centcom/evac)
-"eB" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/obj{anchored = 1; icon_state = "floor3"; layer = 1; name = "floor"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/space)
+"eB" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall/interior{icon_state = "swall_f10"},/area/space)
"eC" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"eD" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/space)
"eE" = (/obj/machinery/computer/emergency_shuttle,/turf/simulated/shuttle/floor,/area/space)
"eF" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
-"eG" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/obj{anchored = 1; icon_state = "floor3"; layer = 1; name = "floor"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space)
+"eG" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall/interior{icon_state = "swall_f6"},/area/space)
"eH" = (/obj/machinery/door/poddoor{id = "CentComPort"; name = "security door"},/turf/unsimulated/floor{dir = 1; icon_state = "loadingarea"},/area/centcom/control)
"eI" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"eJ" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac)
@@ -287,7 +287,7 @@
"fA" = (/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = 6},/obj/machinery/flasher_button{id = "shuttle_flasher"; pixel_x = -24; pixel_y = -6},/turf/simulated/shuttle/floor4,/area/space)
"fB" = (/turf/simulated/shuttle/floor4,/area/space)
"fC" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/simulated/shuttle/floor,/area/space)
-"fD" = (/obj/structure/rack,/obj/item/weapon/shield/riot,/obj/item/weapon/shield/riot,/turf/unsimulated/floor{tag = "icon-warning"; icon_state = "warning"; dir = 2; heat_capacity = 1},/area/centcom/ferry)
+"fD" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
"fE" = (/obj/structure/stool,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"fF" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"fG" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/space)
@@ -301,9 +301,9 @@
"fO" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"fP" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"fQ" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
-"fR" = (/obj/structure/rack,/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine/loyalpin,/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine/loyalpin,/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
+"fR" = (/obj/structure/table/reinforced,/obj/item/weapon/soap/nanotrasen,/obj/item/device/flash/handheld,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
"fS" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"fT" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
+"fT" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/device/flashlight/seclite,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
"fU" = (/obj/machinery/door/airlock/centcom{name = "Dressing Room"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/ferry)
"fV" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/control)
"fW" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/control)
@@ -323,9 +323,9 @@
"gk" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency,/obj/docking_port/stationary{dir = 4; dwidth = 9; height = 11; id = "emergency_away"; name = "Centcom"; width = 22},/turf/simulated/shuttle/plating,/area/space)
"gl" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/shuttle/floor,/area/space)
"gm" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/shuttle/floor,/area/space)
-"gn" = (/obj/structure/rack,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"go" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/storage/box/flashbangs,/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"gp" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/space)
+"gn" = (/obj/structure/table/reinforced,/obj/item/weapon/extinguisher,/obj/item/device/flash/handheld,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"go" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor,/area/space)
+"gp" = (/turf/unsimulated/floor{icon_state = "floor"},/area/space)
"gq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/space)
"gr" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/space)
"gs" = (/turf/unsimulated/floor{name = "plating"},/area/space)
@@ -337,8 +337,8 @@
"gy" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"gz" = (/turf/unsimulated/wall,/area/syndicate_mothership)
"gA" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/ferry)
-"gB" = (/obj/machinery/door/airlock/centcom{name = "Equipment Room"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"gC" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/plating,/area/space)
+"gB" = (/obj/structure/table/reinforced,/obj/item/weapon/extinguisher,/obj/item/device/flashlight/seclite,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"gC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
"gD" = (/obj/machinery/computer/shuttle/ferry/request,/turf/simulated/shuttle/floor,/area/space)
"gE" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/space)
"gF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/ferry)
@@ -348,40 +348,40 @@
"gJ" = (/obj/structure/flora/grass/brown,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
"gK" = (/obj/structure/flora/tree/pine,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
"gL" = (/obj/structure/flora/grass/both,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
-"gM" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/weapon/weldingtool/largetank,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"gN" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"gO" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser,/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"gP" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"gQ" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/rcd,/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"gR" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/weapon/weldingtool/largetank,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"gS" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor,/area/space)
+"gM" = (/obj/structure/closet/crate,/turf/simulated/shuttle/floor,/area/space)
+"gN" = (/obj/structure/table/reinforced,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"gO" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space)
+"gP" = (/obj/machinery/door/poddoor{id = "deathmechs"; name = "combat exosuit bay"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space)
+"gQ" = (/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/space)
+"gR" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"gS" = (/turf/unsimulated/floor{tag = "icon-blue"; icon_state = "blue"; dir = 2; heat_capacity = 1},/area/space)
"gT" = (/obj/machinery/door/airlock/shuttle,/obj/docking_port/mobile{dir = 8; dwidth = 2; height = 12; id = "ferry"; name = "ferry shuttle"; travelDir = 180; width = 5},/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_away"; name = "unknown"; turf_type = /turf/unsimulated/floor; width = 5},/turf/simulated/shuttle/floor,/area/space)
"gU" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/ferry)
"gV" = (/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/ferry)
"gW" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/ferry)
"gX" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall,/area/centcom/evac)
-"gY" = (/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"gZ" = (/turf/simulated/shuttle/wall{icon_state = "swallc1"; dir = 2},/area/space)
+"gY" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/space)
+"gZ" = (/turf/unsimulated/floor{tag = "icon-yellow"; icon_state = "yellow"; dir = 2},/area/space)
"ha" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 5},/area/centcom/ferry)
-"hb" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"hb" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/turf/unsimulated/floor{icon_state = "floor"},/area/space)
"hc" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
-"hd" = (/obj/machinery/mech_bay_recharge_port,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"he" = (/obj/mecha/combat/gygax,/turf/unsimulated/floor{icon_state = "recharge_floor"; name = "mech bay recharge floor"; tag = "icon-recharge_floor"},/area/centcom/ferry)
-"hf" = (/obj/mecha/working/ripley,/turf/unsimulated/floor{icon_state = "recharge_floor"; name = "mech bay recharge floor"; tag = "icon-recharge_floor"},/area/centcom/ferry)
-"hg" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port (WEST)"; icon_state = "recharge_port"; dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hh" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space)
+"hd" = (/obj/machinery/door/airlock/glass_large{name = "Medical Equipment"; req_access_txt = "104"},/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"he" = (/obj/machinery/door/airlock/glass_large{name = "Security Equipment"; req_access = null; req_access_txt = "103"; req_one_access = null},/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"hf" = (/obj/machinery/door/airlock/glass_large{name = "Engineering Equipment"; req_access_txt = "106"},/turf/unsimulated/floor{icon_state = "floor"},/area/space)
+"hg" = (/obj/structure/table/reinforced,/obj/item/weapon/melee/baton/loaded{pixel_x = -3; pixel_y = 0},/obj/item/weapon/melee/baton/loaded{pixel_x = 4; pixel_y = 0},/obj/item/weapon/reagent_containers/hypospray/combat/nanites{pixel_x = 4},/obj/item/weapon/reagent_containers/hypospray/combat/nanites,/turf/unsimulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/space)
+"hh" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health{pixel_x = -2; pixel_y = -1},/obj/item/weapon/defibrillator/combatdefibrillator/loaded,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health{pixel_x = -2; pixel_y = -1},/obj/item/weapon/defibrillator/combatdefibrillator/loaded,/turf/unsimulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4; heat_capacity = 1},/area/space)
"hi" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/space)
"hj" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/ferry)
"hk" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/evac)
-"hl" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"hl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/space)
"hm" = (/turf/unsimulated/wall/fakeglass,/area/centcom/ferry)
"hn" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/shuttle/plating,/area/space)
"ho" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/shuttle/floor,/area/space)
-"hp" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/weapon/weldingtool/largetank,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hq" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/syringes,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hr" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
+"hp" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/pulse,/obj/item/weapon/shield/riot/tele{pixel_x = 3; pixel_y = -3},/obj/item/weapon/shield/riot/tele{pixel_x = 3; pixel_y = -3},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4; heat_capacity = 1},/area/space)
+"hq" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/glasses/meson,/obj/item/weapon/melee/baton/loaded,/turf/unsimulated/floor{tag = "icon-yellow (WEST)"; icon_state = "yellow"; dir = 8},/area/space)
+"hr" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/device/multitool,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd{matter = 200; name = "military rapid-construction-device (RCD)"},/obj/item/clothing/shoes/magboots,/turf/unsimulated/floor{tag = "icon-yellow (EAST)"; icon_state = "yellow"; dir = 4; heat_capacity = 1},/area/space)
"hs" = (/turf/unsimulated/wall,/area/centcom/holding)
-"ht" = (/obj/machinery/door/airlock/centcom{name = "ERT Ready Room"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"ht" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/syringes{pixel_x = -3; pixel_y = -3},/obj/item/weapon/gun/syringe/rapidsyringe,/turf/unsimulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/space)
"hu" = (/obj/machinery/door/airlock/centcom{name = "Centcom"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac)
"hv" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo"},/turf/simulated/shuttle/floor,/area/space)
"hw" = (/obj/machinery/status_display,/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/space)
@@ -390,13 +390,13 @@
"hz" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/ferry)
"hA" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/centcom/ferry)
"hB" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/centcom/ferry)
-"hC" = (/obj/machinery/suit_storage_unit/ertMed,/turf/unsimulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/centcom/ferry)
-"hD" = (/obj/structure/rack,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/fire{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/reagent_containers/hypospray/combat/nanites,/obj/item/weapon/defibrillator/combatdefibrillator/loaded,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hE" = (/obj/structure/rack,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hF" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hG" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hH" = (/obj/structure/rack,/obj/item/device/aicard,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/obj/item/device/flash/handheld,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hI" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry)
+"hC" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/brute,/turf/unsimulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4; heat_capacity = 1},/area/space)
+"hD" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/box/flashbangs{pixel_x = -4; pixel_y = -4},/obj/item/weapon/storage/box/handcuffs{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/box/flashbangs{pixel_x = -4; pixel_y = -4},/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/space)
+"hE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/security,/obj/item/weapon/melee/baton/loaded,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/hud/security/sunglasses,/obj/item/weapon/storage/belt/security,/obj/item/weapon/melee/baton/loaded,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/hud/security/sunglasses,/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4; heat_capacity = 1},/area/space)
+"hF" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/storage/box/metalfoam,/obj/item/weapon/stock_parts/cell/high,/turf/unsimulated/floor{tag = "icon-yellow (WEST)"; icon_state = "yellow"; dir = 8},/area/space)
+"hG" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/device/multitool,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd{matter = 90; name = "military rapid-construction-device (RCD)"},/obj/item/clothing/shoes/magboots,/turf/unsimulated/floor{tag = "icon-yellow (EAST)"; icon_state = "yellow"; dir = 4; heat_capacity = 1},/area/space)
+"hH" = (/turf/unsimulated/floor{name = "plating"},/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/space)
+"hI" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall/interior{icon_state = "swall_f9"},/area/space)
"hJ" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/space)
"hK" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/space)
"hL" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
@@ -404,15 +404,15 @@
"hN" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/space)
"hO" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/shuttle/plating,/area/space)
"hP" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/space)
-"hQ" = (/obj/machinery/mech_bay_recharge_port{on = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hR" = (/obj/mecha/medical/odysseus,/turf/unsimulated/floor{icon_state = "recharge_floor"; name = "mech bay recharge floor"; tag = "icon-recharge_floor"},/area/centcom/ferry)
-"hS" = (/obj/machinery/door/poddoor{name = "Emergency Response Team Armoury"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hT" = (/obj/structure/closet/syndicate/ertEngi,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hU" = (/obj/structure/closet/syndicate/ertMed,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hV" = (/obj/structure/closet/syndicate/ertSec,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hW" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hX" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"hY" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/weapon/soap/nanotrasen,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"hQ" = (/turf/unsimulated/floor{name = "plating"},/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space)
+"hR" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"hS" = (/obj/machinery/door/airlock/centcom{name = "briefing room"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"hT" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -10; tag = "icon-sink (WEST)"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"hU" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"hV" = (/obj/structure/dresser,/obj/structure/mirror{pixel_x = 0; pixel_y = 30},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"hW" = (/obj/structure/closet/secure_closet/ertCom,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"hX" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"hY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 5},/obj/item/weapon/pen/blue,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/ferry)
"hZ" = (/turf/unsimulated/wall,/area/tdome/tdomeobserve)
"ia" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/tdome/tdomeobserve)
"ib" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/tdome/tdomeobserve)
@@ -431,8 +431,8 @@
"io" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership)
"ip" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/both,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
"iq" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/tree/pine,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
-"ir" = (/obj/machinery/door/airlock/glass_large{name = "Medical Equipment"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"is" = (/obj/machinery/door/airlock/glass_large{name = "Miscellaneous Equipment"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"ir" = (/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"is" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/centcom/ferry)
"it" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
"iu" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
"iv" = (/turf/unsimulated/wall/fakeglass,/area/tdome/tdomeobserve)
@@ -449,17 +449,17 @@
"iG" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership)
"iH" = (/obj/item/weapon/storage/fancy/crayons,/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"iI" = (/obj/machinery/washing_machine,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
-"iJ" = (/obj/structure/lattice,/turf/space,/area/space)
-"iK" = (/obj/structure/table/reinforced,/obj/item/ammo_box/a357,/obj/item/ammo_box/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"iL" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/clothing/glasses/hud/security/night,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"iM" = (/obj/structure/rack,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/belt/security,/obj/item/device/flash/handheld,/obj/item/weapon/grenade/flashbang,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"iN" = (/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/ferry)
-"iO" = (/turf/unsimulated/floor{tag = "icon-bluecorner (EAST)"; icon_state = "bluecorner"; dir = 4},/area/centcom/ferry)
-"iP" = (/turf/unsimulated/floor{tag = "icon-blue (NORTH)"; icon_state = "blue"; dir = 1},/area/centcom/ferry)
-"iQ" = (/turf/unsimulated/floor{tag = "icon-bluecorner (NORTH)"; icon_state = "bluecorner"; dir = 1},/area/centcom/ferry)
-"iR" = (/turf/unsimulated/floor{tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; dir = 4},/area/centcom/ferry)
-"iS" = (/turf/unsimulated/floor{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/centcom/ferry)
-"iT" = (/turf/unsimulated/floor{tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; dir = 1},/area/centcom/ferry)
+"iJ" = (/obj/structure/reagent_dispensers/water_cooler,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"iK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/ferry)
+"iL" = (/obj/structure/closet/secure_closet/ertEngi,/obj/structure/extinguisher_cabinet{pixel_x = 28},/turf/unsimulated/floor{tag = "icon-darkbrown (EAST)"; icon_state = "darkbrown"; dir = 4},/area/centcom/ferry)
+"iM" = (/obj/machinery/vending/cigarette{products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/random = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"iN" = (/obj/structure/sign/map/left,/turf/unsimulated/floor{tag = "icon-light_on"; icon_state = "light_on"},/area/centcom/ferry)
+"iO" = (/obj/structure/sign/map/right,/turf/unsimulated/floor{tag = "icon-light_on"; icon_state = "light_on"},/area/centcom/ferry)
+"iP" = (/obj/structure/closet/secure_closet/ertSec,/turf/unsimulated/floor{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/area/centcom/ferry)
+"iQ" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"iR" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"iS" = (/obj/structure/table/wood,/obj/item/weapon/storage/box/drinkingglasses,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"iT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"iU" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
"iV" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
"iW" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve)
@@ -482,7 +482,7 @@
"jn" = (/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"jo" = (/obj/structure/stool/bed/chair/comfy/teal,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"jp" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/wiki/engineering_hacking,/obj/item/weapon/book/manual/robotics_cyborgs,/obj/item/weapon/book/manual/engineering_singularity_safety,/obj/item/weapon/book/manual/detective,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
-"jq" = (/obj/machinery/door/airlock/centcom{name = "Commander's Room"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
+"jq" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = -5},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey{pixel_x = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"jr" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/tdome/tdomeobserve)
"js" = (/obj/structure/lattice,/turf/space/transit,/area/wizard_station)
"jt" = (/obj/item/weapon/shard{color = "#008000"},/turf/unsimulated/floor{tag = "icon-cultdamage5"; icon_state = "cultdamage5"},/area/wizard_station)
@@ -499,14 +499,12 @@
"jE" = (/mob/living/simple_animal/hostile/retaliate/bat{desc = "A Syndicate experiment in weaponized space carp technology. Its fangs seem to have been intentionally dulled down to prevent accidents."; faction = list("syndicate"); harm_intent_damage = 5; health = 50; icon_dead = "carp_dead"; icon_gib = "carp_gib"; icon_living = "carp"; icon_state = "carp"; name = "Cayenne"; real_name = "Cayenne"; response_disarm = "lightly brushes aside"; response_help = "pets"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"jF" = (/obj/machinery/door/airlock/centcom{name = "Study"; opacity = 1; req_access_txt = "150"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"jG" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
-"jH" = (/obj/machinery/suit_storage_unit/ertCom,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"jI" = (/obj/structure/closet/syndicate/ertCom,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"jJ" = (/turf/unsimulated/floor{tag = "icon-redcorner"; icon_state = "redcorner"; dir = 2},/area/centcom/ferry)
-"jK" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/centcom/ferry)
-"jL" = (/turf/unsimulated/floor{tag = "icon-redcorner (WEST)"; icon_state = "redcorner"; dir = 8},/area/centcom/ferry)
-"jM" = (/turf/unsimulated/floor{tag = "icon-yellowcorner"; icon_state = "yellowcorner"; dir = 2},/area/centcom/ferry)
-"jN" = (/turf/unsimulated/floor{tag = "icon-yellow"; icon_state = "yellow"; dir = 2},/area/centcom/ferry)
-"jO" = (/turf/unsimulated/floor{tag = "icon-yellowcorner (WEST)"; icon_state = "yellowcorner"; dir = 8},/area/centcom/ferry)
+"jH" = (/obj/structure/closet/secure_closet/ertMed,/turf/unsimulated/floor{tag = "icon-darkblue"; icon_state = "darkblue"; dir = 2},/area/centcom/ferry)
+"jI" = (/obj/structure/closet/secure_closet/ertSec,/turf/unsimulated/floor{tag = "icon-darkred"; icon_state = "darkred"; dir = 2},/area/centcom/ferry)
+"jJ" = (/obj/structure/closet/secure_closet/ertEngi,/obj/structure/extinguisher_cabinet{pixel_y = -28},/turf/unsimulated/floor{tag = "icon-darkbrown"; icon_state = "darkbrown"; dir = 2},/area/centcom/ferry)
+"jK" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"jL" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
+"jM" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/mask/gas,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"jP" = (/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/tdome/tdomeobserve)
"jQ" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/tdome/tdomeobserve)
"jR" = (/turf/unsimulated/floor{dir = 10; icon_state = "green"},/area/centcom/evac)
@@ -527,15 +525,12 @@
"kg" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (NORTHWEST)"; icon_state = "podhatch"; dir = 9},/area/syndicate_mothership)
"kh" = (/obj/structure/dresser,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"ki" = (/obj/structure/table/wood,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
-"kj" = (/obj/machinery/door/airlock/glass_large{name = "Security Equipment"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"kk" = (/obj/machinery/door/airlock/glass_large{name = "Engineering Equipment"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
"kl" = (/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/tdome/tdomeobserve)
"km" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/tdome/tdomeobserve)
"kn" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome/tdomeobserve)
"ko" = (/turf/unsimulated/floor{icon_state = "green"; dir = 6},/area/tdome/tdomeobserve)
"kp" = (/turf/unsimulated/wall/fakedoor{name = "Centcom"},/area/centcom/evac)
"kq" = (/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon_state = "processor"; name = "byond random number generator"},/turf/unsimulated/floor{tag = "icon-cultdamage7"; icon_state = "cultdamage7"},/area/wizard_station)
-"kr" = (/obj/item/weapon/gun/energy/pulse_rifle,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station)
"ks" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"kt" = (/obj/structure/showcase{desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; icon = 'icons/mob/mob.dmi'; icon_state = "nim"; name = "wizard of yendor showcase"},/turf/unsimulated/floor{tag = "icon-cultdamage4"; icon_state = "cultdamage4"},/area/wizard_station)
"ku" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
@@ -545,13 +540,6 @@
"ky" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"kz" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = 5; pixel_y = -2; step_x = 0},/obj/item/toy/cards/deck/syndicate{icon_state = "deck_syndicate_full"; pixel_x = -6; pixel_y = 6},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"kA" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (WEST)"; icon_state = "podhatch"; dir = 8},/area/syndicate_mothership)
-"kB" = (/obj/mecha/combat/marauder{operation_req_access = null},/turf/unsimulated/floor{icon_state = "recharge_floor"; name = "mech bay recharge floor"; tag = "icon-recharge_floor"},/area/centcom/ferry)
-"kC" = (/obj/machinery/door/poddoor{name = "Death Squad Equipment Room"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"kD" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"kE" = (/obj/machinery/suit_storage_unit/ertSec,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/ferry)
-"kF" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/belt/security,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot/tele,/obj/item/device/flash/handheld,/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine/loyalpin,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"kG" = (/obj/machinery/suit_storage_unit/ertEngi,/turf/unsimulated/floor{tag = "icon-yellow (WEST)"; icon_state = "yellow"; dir = 8},/area/centcom/ferry)
-"kH" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/glasses/meson,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/device/multitool,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/rcd{matter = 200; name = "military rapid-construction-device (RCD)"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
"kI" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 6; icon_state = "fakewindows2"},/area/wizard_station)
"kJ" = (/obj/effect/forcefield,/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Bridge"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"kK" = (/turf/unsimulated/wall/normal{tag = "icon-uranium6"; icon_state = "uranium6"},/area/wizard_station)
@@ -559,7 +547,6 @@
"kM" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/syndicate_mothership)
"kN" = (/turf/unsimulated/floor,/area/syndicate_mothership)
"kO" = (/obj/machinery/door/poddoor/shutters{id = "nukeop_ready"; name = "shuttle dock"},/turf/unsimulated/floor,/area/syndicate_mothership)
-"kP" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/glasses/meson,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/device/multitool,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/rcd{matter = 90; name = "military rapid-construction-device (RCD)"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
"kQ" = (/turf/space,/area/tdome/tdomeobserve)
"kR" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{tag = "icon-cultdamage6"; icon_state = "cultdamage6"},/area/wizard_station)
"kS" = (/obj/effect/decal/cleanable/blood/splatter,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station)
@@ -572,11 +559,6 @@
"kZ" = (/obj/machinery/computer/telecrystals/uplinker,/turf/unsimulated/floor{tag = "icon-podhatch (SOUTHWEST)"; icon_state = "podhatch"; dir = 10},/area/syndicate_mothership)
"la" = (/obj/structure/urinal{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"lb" = (/obj/structure/toilet{pixel_y = 8},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/door/window{name = "Tactical Toilet"; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
-"lc" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/weapon/weldingtool/largetank,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"ld" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"le" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack,/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"lf" = (/obj/structure/table/reinforced,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/hud/security/sunglasses,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
-"lg" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/cell/high,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/clothing/shoes/magboots,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
"lh" = (/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/wizard_station)
"li" = (/turf/unsimulated/wall/fakedoor{name = "Squad 4 Pod"},/area/wizard_station)
"lj" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/wizard_station)
@@ -586,7 +568,7 @@
"ln" = (/obj/effect/forcefield,/turf/unsimulated/floor{tag = "icon-cultdamage"; icon_state = "cultdamage"},/area/wizard_station)
"lo" = (/obj/structure/stool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"lp" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
-"lq" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; travelDir = 180; width = 18},/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"}; width = 18},/turf/simulated/shuttle/plating,/area/space)
+"lq" = (/obj/structure/table,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"lr" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/space)
"ls" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 5},/area/syndicate_mothership)
"lt" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/structure/table/wood,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership)
@@ -648,7 +630,6 @@
"mx" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{tag = "icon-gravsnow_corner (NORTH)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 1},/area/syndicate_mothership)
"my" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{tag = "icon-gravsnow_corner (NORTH)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 1},/area/syndicate_mothership)
"mz" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"mA" = (/obj/machinery/door/airlock/centcom{name = "Deathsquad Equipment Room"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry)
"mB" = (/turf/unsimulated/wall,/area/tdome/arena)
"mC" = (/obj/machinery/igniter,/turf/simulated/floor/plasteel,/area/tdome/arena)
"mD" = (/turf/simulated/floor/plasteel,/area/tdome/arena)
@@ -671,8 +652,6 @@
"mU" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"mV" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"mW" = (/obj/structure/stool,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"mX" = (/obj/structure/rack,/obj/item/clothing/suit/space/deathsquad,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/clothing/mask/gas/sechailer/swat,/obj/item/clothing/head/helmet/space/deathsquad,/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"mY" = (/obj/structure/rack,/obj/item/clothing/suit/space/deathsquad,/obj/item/weapon/gun/energy/pulse_rifle,/obj/item/clothing/mask/gas/sechailer/swat,/obj/item/clothing/head/helmet/space/deathsquad,/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
"mZ" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
"na" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/arena)
"nb" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
@@ -691,7 +670,7 @@
"no" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"np" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"nq" = (/obj/structure/closet/syndicate/personal,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/syndicate_mothership)
-"nr" = (/obj/structure/table,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"nr" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; travelDir = 180; width = 18},/obj/docking_port/stationary{area_type = /area/syndicate_mothership; dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"}; width = 18},/turf/simulated/shuttle/plating,/area/space)
"ns" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
"nt" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
"nu" = (/turf/unsimulated/wall/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station)
@@ -733,13 +712,10 @@
"oe" = (/turf/unsimulated/floor{tag = "icon-cultdamage4"; icon_state = "cultdamage4"},/area/wizard_station)
"of" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"og" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
-"oh" = (/obj/structure/rack,/obj/item/weapon/c4,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pinpointer,/obj/item/weapon/shield/energy,/obj/item/clothing/glasses/thermal,/obj/item/weapon/tank/emergency_oxygen,/obj/item/ammo_box/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/storage/backpack/security,/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
-"oi" = (/obj/structure/rack,/obj/item/weapon/c4,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/pinpointer,/obj/item/weapon/shield/energy,/obj/item/clothing/glasses/thermal,/obj/item/weapon/tank/emergency_oxygen,/obj/item/ammo_box/a357,/obj/item/weapon/gun/projectile/revolver/mateba,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/storage/backpack/security,/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/ferry)
"oj" = (/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Corridor A"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"ok" = (/turf/unsimulated/wall/normal{tag = "icon-uranium15"; icon_state = "uranium15"},/area/wizard_station)
"ol" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Corridor A"},/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
"om" = (/obj/structure/table,/obj/item/robot_parts/r_arm,/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
-"on" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"oo" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgicaldrill,/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
"op" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/space)
"oq" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/space)
@@ -833,6 +809,7 @@
"qa" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding)
"qb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"qc" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding)
+"qd" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/space/transit/horizontal,/area/space)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeafaeaeaeaeaeag
@@ -844,7 +821,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaqaiaiajakakakakakajalalalalalajavatatatawap
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajavatatatawap
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajavatatatawap
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaqaiaqaiajakakakakakajalaralaralajavatatatawap
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacqdacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaqaiaqaiajakakakakakajalaralaralajavatatatawap
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacaxacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaiaiaiaiaiajakakakakakajalalalalalajayazazazaAap
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaBaCaCaCaCaCaDaCaCaCaCaCaDaCaCaCaCaCaDaCaCaCaCaCaE
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaFaFaGaHaHajaIaIaIaIaIajaJaKaKaKaLajaMaNaNaNaOap
@@ -965,13 +942,13 @@ abababababababababababababababababababababababababababababababababababababababab
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcWcJdIdfcOdJdKcDcXabababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcBdzcVdLcVdIcBababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdMdNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcBdOdPdQdRdScBababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdTdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcWdsdsdsdsdscXababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdUdGdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdVdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdWdNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdGdHdHdHdHdHdGdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdXdYdHdHdHdZeadwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwebecedededeceedwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwefegegegehdwdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcWdsdsdsdsdscXabababababababababababaDfRfDgnfTgpgpgpgpgpgpgCgBgNgpgpgOgpabababababababababdwdGdHdHdHdHdUdGdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgPgOgOgOgQgQgQgQgQgQgQgOgOgOgOgOgOgRabababababababababdwdGdHdHdHdHdHdVdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaDgpgSgSgpgpgpgYgYgpgpgpgZgZgpgpgBhbabababababababababdwdGdHdHdHdHdHdWdNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaDaDhdgpaDaDaDhegpaDaDaDhfgpaDaDaDaDabababababababababdwdGdHdHdHdHdHdGdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaDhggpgphhaDhlgpgphpaDhqgpgphraDabababababababababababdwdXeBdHdHdHeGeadwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaDhtgpgphCaDhDgpgphEaDhFgpgphGaDabababababababababababdwebecedededeceedwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDabababababababababababdwdwefegegegehdwdwababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdwdwdwdwdwdwdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
@@ -980,45 +957,45 @@ abababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababepepepepepepepepepepepepepepepepepabababeieqeremeseteieoeoeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababepeuepeuepeuepeuepeuepeuepeuepeuepabababeievemememeweieoeoeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababepepepepepepepepepepepepepepepepepabababeiexemememeyeieoeoeoeoeoeoekababababdAezezezezezdCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababepeuepeuepeuepeuepeuepeuepeuepeuepabababeiexemememeyeieoekekeAekekekabababdAeBeCeDeEeDeFeGdCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababepeuepeuepeuepeuepeuepeuepeuepeuepabababeiexemememeyeieoekekeAekekekabababdAdZeCeDeEeDeFdYdCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababepepepepepepepepepepepepepepepepepabababeieieHeieieIeieoekeJeJeJeKekabababdGeLeMdHdHdHeNeOdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeiePeQeRePeieoekeJeJeJeJekabababdGeSeTeUeVdHeNeWdGababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeieXeYeZePeieoekeJfafbfcekababdAfddBdBfedBfffgdBfddCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhababeiePeQfifjeieoekfkflfmfnekababdGfofofoezfpdHfqfrfsezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhabababababababababababababababababababfhftfufvfhaDeieifweieieieieiekeJeJeJeJfxfyfzdGfAfBfBfCdHdHdHdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfDfDfDfhfhababababababababababababababababababfhfEfFfFfhfGfHemfIfIfIfIfHfJekeJeJeJeJfKfLfKfMfBfNfNezfOfPfQdHfqezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfRfSfSfSfTfhababababfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfUfhfhfJfVemfWfXfYfIfVfJekfxfzfZfxfyfyfzdXdBdBdBgafQfQfQdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfRfSfSfSfTfhababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbgcgdfSgefhfJfVgfemememggfVfJekghgigigjfKfLfKgkdHgldHdHdHdHdHdHgmdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababfhgnfSfSfSgofhababababfhgbgpdBdBgqdBdBdBezdBdBgrgsgtgdgugefhfJfVexemememeygvfJekghgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzabababababababababababababababfhfhfhfhgAgBgAfhfhfhfhababfhgCgaeNgDgEgEgEgEgEgEgEgqgFgGgdgugefhfJgvexemememeseieQekgHgigigjekababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgJgIgIgIgKgLgIgIgIgKgIgIgIgIgIgIgKgIgIgzabababababababababababababababfhgMgNgOfSfSfSgPgQgRfhababfhgCgSdHdHdHdHdHdHdHdHdHgTgUgVgdgugWfhgAfherememememememgigigigigjgXababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgJgIgIgIgIgIgIgIgIgIgIgIgKgIgIgIgIgIgKgIgIgIgIgIgzabababababababababababababababgAfSfSgYfSfSfSgdfSfSfhababfhgCgZeDeDeDeDeDeDeDeDeDgqgFhagdgufShbfSfSemememememememgigigigigjekababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhcgIgIgIgIgIgJgIgIgLgKgIgIgKgIgIgKgLgIgKgIgzabababababababababababababababfhhdhegYfSfSfSgdhfhgfhababfhgbhhdBdBgqdBdBdBezdBdBhigsgtgdguhjfhgAfhgfemememggeieQekhkgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgKgLgIgIgKgIgLgzabababababababababababababababfhfhfhfhfSfShlfhfhfhfhababfhgbgbgbgbgbgbgbgbgbgbgbgbgbhmgdfSgefhfJfHevemememewfHfJekghgigigjfKfLfKhndHhodHdHdHdHdHdHgmdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgIgIgIgLgIgKgLgIgKgIgzabababababababababababababababfhhphqhrfSfSfSfhabababababhshshshshshshshshshshshshshshshshtfhhsfJfVevemememewfVfJekfxfzhufxfyfyfzdXdBdBhvdBhwezhxezezeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIhyhyhyhyhyhyhygIgIgIgIgIgIgIgKgIgIhcgLgIgIgIgzabababababababababababababababgAfSfSgYfSfSfSfhhzhAhAhBfhfhfhfhfhfhfhhCfSfShDfhhEhFhGhHfhhIfhhsfJgvevemememewgvfJekgigigigjfKfLfKhnhJhJhJhKdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhMhNhOhOhOhOhOhNhPgIgIgIgIhcgIhygJhygJgIgKgIgKgzabababababababababababababababfhhQhRgYfSfSfSfSfSfSfSfShSfShThUhVhWfhhCfSfShDfhhXfSfShYfhhIfhhshZhZiaibicidiehZhZekgigigigjfxfyfzdGhJhJhJhJdGfqfqfqifdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNigihiiijikililhNimgIgIhygzgziniogzgzhyipiqhygzabababababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfSfSfSfSfSfhfhirfSfhfhfhisfSfhfhhIfhhsitiuiviwixiyiviuiuekgiiziAiBekababdGiCiCiDiDdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNiEihihiFihihihhNimgIiGgzgziHiIiIiHgzgzgzgzgzgzgzgzababababababababababababababiJabababiJababfhiKiLiMgAfSiNiNiNfSfSiOiPiPiQfSiRiSiSiTfShIfhhsiuiUiViwixiyiViWiuekgiiXiYiZekababebfeedededededededfeeeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajajbjcjdaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNjeihihihjfihjghNimhciGgzjhjijijijijjjkjljmjnjojpgzababababababababababababababiJabababiJababgAfSfSfSjqfSiNiNiNfShIhIhIhIhIhIhIhIhIhIhIhIfhhsjriujriwixiyjriujrekgigigigiekabababebegegegegegegegeeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsaajtjujvjwjxaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIjyhNhNhNjzhNhNhNjAgIgIjBgzjCjijDjDjEjijijijFjGjGjGgzababababababababababababababiJabababiJababfhjHfSjIgAfSfSiNfSfSfSjJjKjKjLfSjMjNjNjOfSfSfhhsjPiuiuiwixiyiuiujQekjRjSjSjTekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsjUjVjWjvjXjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNjZihkahNkbhyhyhykcgzjijDkdkejDjikfkgjmkhkigzgzabababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfSfSfSfSfSfhfhkjfSfhfhfhkkfSfhfhfhfhhsklkmkmiwixiyknknkoekekkpekekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajYkqkrjXksktjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNkuihkvhNkwkxkxkxiogzjijDkykzjDjikfkAgzgzgzgzababababababababababababababfhhdkBgYfSfSfSfSfSfSfSfSkCfShThUhVkDfhkEfSfSkFfhkGfSfSkHfhababhshZhZhZhZixhZhZhZhZekeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajwjxkIkJkIkKkLaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhMhNhNhNhNhNkuihkvhNkMkNkNkNkNkOjijijijijijikfkAgzgzgzgzababababababababababababababgAfSfSgYfSfSfSfhhzhAhAhBfhfhfhfhfhfhfhkEfSfSkFfhkGfSfSkPfhababababababhZixhZkQkQkQeoeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjskLkRkSkTjwaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihkVhNkuihkvhNkWkXinkxiogzkYjDjDjDjijikfkZgzlalbgzgzabababababababababababababfhlcldlefSfSfSfhababababababababababfhfSlflffSfhfSlglgfSfhhZhZhZhZhZhZhZichZhZhZhZhZhZhZhZekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaaaalhliljlklllmjvlnjsaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihlolphNkuihkvhNhNlqlrhPlsgzltlulvlulujijijilwlxlxlygzabababababababababababababfhfhfhfhfSfShlfhababababababababababfhfhfhfhfhfhfhfhfhfhhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaaaalBlClDlElFlljvlGlHlIjsjsaaaaaaaaaaaaaaaaababababababgzlJgIhNkUihihlKhNihihihhNihihihhNjBgzlLlMlLlLlNjijijigzlOlPlygzabababababababababababababfhhdkBgYfSfSfSfhabababababababababababababababababababablQlzlzlzlRlzlzlzlzlzlzlzlRlzlzlzlQababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaajsaaljlSlSlTlljvlUlGlIaalVlWaaaaaaaaaaaaaaababababababgzgIgIhNkUihihihlXihihihlYihihihhNiGgzgzkglZmambgzmcjigzgzgzgzgzabababababababababababababgAfSfSgYfSfSfSfhababababababababababababababababababababhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaalnjsaaaajsmdmejWmfjWlnjsjsaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihihmgihihihmhihihmihNmjmjlsgzgzgzgzgzmkmkmlmmmnmogzabababababababababababababfhlcldlefSfSfSfhababababababababababababababababababababhZidmpmpmpmpmpmpmpmpmpmpmpmpmpibhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaakKmqmrmsmtmumtmtmqmvmsmtmtmumtmtaajsaaaaaaaaaaababababababgzgIhMhNhNhNhNhNhNmwihihhNhNhNhNhNhNhPmxmxmxmylsgzmzmzmzmzmzmzgzabababababababababababababfhfhfhfhgAmAgAfhfhabababababababababababmBmBmBmBmBmBmBmBmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBmBmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvmImJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababfhmXfSfSfSmYfhabababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaanhnijvjvninhmMmMjvjvjvjvnjnhnknllSlSnmaaaaaaaaababababababgzgIhNihihihloihnnihihihnoihloihlonphNgIhcgKgJhcgznqnqnqnqnqnrgzabababababababababababababababfhmXfSfSfSmYfhabababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaanunvjvlGjvnwlUlGjvnxjvjvnynunznAnBnCnDnEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababfhmXfSfSfSmYfhabababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaanMnijvjWlUnNjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababfhfhgAfSgAfhfhabababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaajdnZjvjvnZjdoajvlGjWjvjvoajdobocodoeaaaaaaaaaaababababababgzgIhNihihihhNhNhNofogihhNhNhNihihihhNgIgIgJgIiGgzababababababababababababababababababababababfhohfSfSfSoifhabababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaajwmqojmsmtokmtmqkIolkImsmtokmtmqjsjsjsaaaaaaaaababababababgzgIhNomonoohNgIhNopopophNgIhNiloqorhNgIgIgIgIiGgzababababababababababababababababababababababfhohfSfSfSoifhabababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaamdlGaajsaajsoslmmdaaaajsaaaaaaaajsaaaaaaaaababababababgzgIhNopopophNgIjyotegoujAgIhNopopophNgIgIgIgIiGgzababababababababababababababababababababababfhohfSfSfSoifhabababababababababababmBmBmBovovovovovmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBovovovovovmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
-ababababababababababaaaaaaaaaaaaaaaaaajsjsaaowlGaaoxoymdjsaalUaaaaaaaaaaaaaaaaaaababababababgzgIjyotegoujAgIgIgIgIgIgIgIjyotegoujAgIgIgIgIiGgzababababababababababababababababababababababfhfhfhfhfhfhfhabababababababababababababmBozozozozozmBoAoBoBoBoBoBoBoBoBoBoBoBoBoBoCmBoDoDoDoDoDmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhftfufvfhaDeieifweieieieieiekeJeJeJeJfxfyfzdGfAfBfBfCdHdHdHdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfEfFfFfhfGfHemfIfIfIfIfHfJekeJeJeJeJfKfLfKfMfBfNfNezfOfPfQdHfqezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfUfhfhfJfVemfWfXfYfIfVfJekfxfzfZfxfyfyfzdXdBdBdBgafQfQfQdHfqdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbgcgdfSgefhfJfVgfemememggfVfJekghgigigjfKfLfKgkdHgldHdHdHdHdHdHgmdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfhgbhHdBdBgqdBdBdBezdBdBgrgsgtgdgugefhfJfVexemememeygvfJekghgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababfhhHhIeNgDgEgEgEgEgEgEgEgqgFgGgdgugefhfJgvexemememeseieQekgHgigigjekababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgJgIgIgIgKgLgIgIgIgKgIgIgIgIgIgIgKgIgIgzababababababababababababababababababababababababababababfhgodHdHdHdHdHdHdHdHdHdHgTgUgVgdgugWfhgAfherememememememgigigigigjgXababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgJgIgIgIgIgIgIgIgIgIgIgIgKgIgIgIgIgIgKgIgIgIgIgIgzababababababababababababababababababababababababababababfhhQeBgMgMeDeDeDeDeDeDeDgqgFhagdgufShRfSfSemememememememgigigigigjekababezfPdHgwgxdHgwgxdHgyezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhcgIgIgIgIgIgJgIgIgLgKgIgIgKgIgIgKgLgIgKgIgzababababababababababababababababababababababababababababfhgbhQdBdBgqdBdBdBezdBdBhigsgtgdguhjfhgAfhgfemememggeieQekhkgigigjfxfyfzdGfPdHgwgxdHgwgxdHgydGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgKgLgIgIgKgIgLgzababababababababababababababababababababababababababababfhgbgbgbgbgbgbgbgbgbgbgbgbgbhmgdfSgefhfJfHevemememewfHfJekghgigigjfKfLfKhndHhodHdHdHdHdHdHgmdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgJgIgIgIgIgIgLgIgKgLgIgKgIgzababababababababababababababababababababababababababababfhfhfhfhfhfhfhhzhAhAhBfhfhfhfhfhhSfhfhfJfVevemememewfVfJekfxfzhufxfyfyfzdXdBdBhvdBhwezhxezezeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIhyhyhyhyhyhyhygIgIgIgIgIgIgIgKgIgIhcgLgIgIgIgzabababababababababababababababababababababababababababababababfhhThVhUhUhUhUhUhUhWhYhXhUhUhUfhfJgvevemememewgvfJekgigigigjfKfLfKhnhJhJhJhKdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhMhNhOhOhOhOhOhNhPgIgIgIgIhcgIhygJhygJgIgKgIgKgzabababababababababababababababababababababababababababababababfhhUhUhUhUirirhUhUhUhUhUhUhUisfhhZhZiaibicidiehZhZekgigigigjfxfyfzdGhJhJhJhJdGfqfqfqifdGabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNigihiiijikililhNimgIgIhygzgziniogzgzhyipiqhygzabababababababababababababababababababababababababababababababfhiJhUhUiKiKiKiKhUhUhUhUhUhUiLfhitiuiviwixiyiviuiuekgiiziAiBekababdGiCiCiDiDdGfrfqfqhLezabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNiEihihiFihihihhNimgIiGgzgziHiIiIiHgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababfhiMhUiriKiNiOiKirhUhUhUhUhUiPfhiuiUiViwixiyiViWiuekgiiXiYiZekababebfeedededededededfeeeabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajajbjcjdaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIhNjeihihihjfihjghNimhciGgzjhjijijijijjjkjljmjnjojpgzabababababababababababababababababababababababababababababfhiQhUiriKiKiKiKhUhUhUhUhUhUiRfhjriujriwixiyjriujrekgigigigiekabababebegegegegegegegeeababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsaajtjujvjwjxaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIjyhNhNhNjzhNhNhNjAgIgIjBgzjCjijDjDjEjijijijFjGjGjGgzabababababababababababababababababababababababababababababfhiShUhUhUirirhUhUhUhUhUhUhUiTfhjPiuiuiwixiyiuiujQekjRjSjSjTekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsjUjVjWjvjXjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNjZihkahNkbhyhyhykcgzjijDkdkejDjikfkgjmkhkigzgzabababababababababababababababababababababababababababababfhjqhUhUhUhUhUhUhUjHjJjIjKiTjLfhklkmkmiwixiyknknkoekekkpekekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajYkqlGjXksktjYaaaaaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIhNkuihkvhNkwkxkxkxiogzjijDkykzjDjikfkAgzgzgzgzababababababababababababababababababababababababababababababfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhfhhZhZhZhZixhZhZhZhZekeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajwjxkIkJkIkKkLaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhMhNhNhNhNhNkuihkvhNkMkNkNkNkNkOjijijijijijikfkAgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababhZixhZkQkQkQeoeoeoeoeoekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjskLkRkSkTjwaaaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihkVhNkuihkvhNkWkXinkxiogzkYjDjDjDjijikfkZgzlalbgzgzabababababababababababababababababababababababababababababababababababababababababkQhZhZhZhZhZhZhZichZhZhZhZhZhZhZhZekekababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaaaalhliljlklllmjvlnjsaaaaaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihlolphNkuihkvhNhNnrlrhPlsgzltlulvlulujijijilwlxlxlygzabababababababababababababababababababababababababababababababababababababababababhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaaaalBlClDlElFlljvlGlHlIjsjsaaaaaaaaaaaaaaaaababababababgzlJgIhNkUihihlKhNihihihhNihihihhNjBgzlLlMlLlLlNjijijigzlOlPlygzababababababababababababababababababababababababababababababababababababababababablQlzlzlzlRlzlzlzlzlzlzlzlRlzlzlzlQababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaajsaaljlSlSlTlljvlUlGlIaalVlWaaaaaaaaaaaaaaababababababgzgIgIhNkUihihihlXihihihlYihihihhNiGgzgzkglZmambgzmcjigzgzgzgzgzabababababababababababababababababababababababababababababababababababababababababhZlzlAlAlAlAlAlzlzlzlAlAlAlAlAlzhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaalnjsaaaajsmdmejWmfjWlnjsjsaaaaaaaaaaaaaaaaababababababgzgIgIhNkUihihihmgihihihmhihihmihNmjmjlsgzgzgzgzgzmkmkmlmmmnmogzabababababababababababababababababababababababababababababababababababababababababhZidmpmpmpmpmpmpmpmpmpmpmpmpmpibhZababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaakKmqmrmsmtmumtmtmqmvmsmtmtmumtmtaajsaaaaaaaaaaababababababgzgIhMhNhNhNhNhNhNmwihihhNhNhNhNhNhNhPmxmxmxmylsgzmzmzmzmzmzmzgzabababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBmBmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBmBmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaamEmFjvjvmFmEmGmHjvjvjvmImJmEmKmLlnmMjsjsaaaaaaababababababgzgIhNmNmNmOmPmQhNihihihhNmRmSmTmUmVhNgIgJgIgIgLjmmzmzmzmzmzmWgzabababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaanhnijvjvninhmMmMjvjvjvjvnjnhnknllSlSnmaaaaaaaaababababababgzgIhNihihihloihnnihihihnoihloihlonphNgIhcgKgJhcgznqnqnqnqnqlqgzabababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaanunvjvlGjvnwlUlGjvnxjvjvnynunznAnBnCnDnEaaaaaaababababababgzgIhNnFihihihihnGihihihnHihihihihihhNgIgIgIgKiGgzgzgzgzgzgzgzgzabababababababababababababababababababababababababababababababababmBmZnanbnbnInbnbncndmDmDmDmDmDnJnKnJmDmDmDmDmDnencnfnfnLnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaanMnijvjWlUnNjWjvjvnOjvjvjvnMnPnQnmnRlhaaaaaaaaababababababgzgIhNnFihihnSnThNnUnVnUhNnWnXihihihhNgIgKgIhciGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDnJnYnJmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaajdnZjvjvnZjdoajvlGjWjvjvoajdobocodoeaaaaaaaaaaababababababgzgIhNihihihhNhNhNofogihhNhNhNihihihhNgIgIgJgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnsnbnsnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfntnfntnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaajwmqojmsmtokmtmqkIolkImsmtokmtmqjsjsjsaaaaaaaaababababababgzgIhNomjMoohNgIhNopopophNgIhNiloqorhNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmZnanbnbnbnbnbncndmDmDmDmDmDmDmDmDmDmDmDmDmDnencnfnfnfnfnfnangmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaamdlGaajsaajsoslmmdaaaajsaaaaaaaajsaaaaaaaaababababababgzgIhNopopophNgIjyotegoujAgIhNopopophNgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababmBmBmBovovovovovmBmCmDmDmDmDmDmDmDmDmDmDmDmDmDmCmBovovovovovmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
+ababababababababababaaaaaaaaaaaaaaaaaajsjsaaowlGaaoxoymdjsaalUaaaaaaaaaaaaaaaaaaababababababgzgIjyotegoujAgIgIgIgIgIgIgIjyotegoujAgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababababmBozozozozozmBoAoBoBoBoBoBoBoBoBoBoBoBoBoBoCmBoDoDoDoDoDmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajsjsaaoElGoFaaaaaajsaaaaaaaaaaaaaaaaababababababgzgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIgIiGgzababababababababababababababababababababababababababababababababababababababababababmBmBmBmBmBmBmBoGoHoHoHoHoHoIoJoKoHoHoHoHoHoGmBmBmBmBmBmBmBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajsmumqoLmsmujsaajsjsaaaaaaaaaaaaaaababababababgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababababababababababababababababababababababoMoGoGoGoNoGoOoOoOoOoOoGoNoGoGoGoMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaamEoPoQoRmEownllFoSoTjsaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoMoMoUoMoMoMoMoVoWoXoMoMoMoMoUoMoMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
diff --git a/_maps/map_files/generic/z3.dmm b/_maps/map_files/generic/z3.dmm
index 1772dc5b7cb..745e704fc30 100644
--- a/_maps/map_files/generic/z3.dmm
+++ b/_maps/map_files/generic/z3.dmm
@@ -5,87 +5,76 @@
"ae" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/derelict/ship)
"af" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/derelict/ship)
"ag" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"ah" = (/obj/machinery/light{dir = 1},/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"ah" = (/obj/machinery/door/airlock/shuttle,/obj/docking_port/mobile{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship"; name = "NT Medical Ship"; travelDir = 180; width = 35},/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_home"; name = "Deep Space"; width = 35},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"ai" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/derelict/ship)
"aj" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/derelict/ship)
-"ak" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/space,/area/derelict/ship)
+"ak" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (EAST)"; icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating,/area/space)
"al" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/derelict/ship)
-"am" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"an" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"ao" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/derelict/ship)
-"ap" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/derelict/ship)
-"aq" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/ship)
-"ar" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space,/area/derelict/ship)
+"am" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"an" = (/obj/structure/table,/obj/item/weapon/screwdriver,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"ao" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/space)
+"ap" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/space)
+"aq" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/plating,/area/space)
+"ar" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f15"; icon_state = "swall_f15"},/area/space)
"as" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/derelict/ship)
-"at" = (/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"at" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/space)
"au" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/derelict/ship)
-"av" = (/turf/simulated/shuttle/plating,/area/derelict/ship)
-"aw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/shuttle/plating,/area/derelict/ship)
+"av" = (/obj/machinery/computer/pod{id = "oldship_gun"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aw" = (/turf/simulated/shuttle/plating,/area/space)
"ax" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"ay" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"az" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aA" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/derelict/ship)
-"aB" = (/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aC" = (/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aD" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/floor/plating,/area/derelict/ship)
-"aE" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/derelict/ship)
-"aF" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/space,/area/derelict/ship)
-"aG" = (/obj/structure/table,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"ay" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f13"; icon_state = "swall_f13"},/area/space)
+"az" = (/obj/structure/rack,/obj/item/clothing/suit/space/hardsuit/medical,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aA" = (/obj/machinery/mass_driver{dir = 4; icon_state = "mass_driver"; id = "oldship_gun"},/turf/simulated/shuttle/plating,/area/space)
+"aB" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/plating,/area/space)
+"aC" = (/obj/machinery/door/poddoor{id = "oldship_gun"; name = "pod bay door"},/turf/simulated/shuttle/plating,/area/space)
+"aD" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f12"; icon_state = "swall_f12"},/area/space)
+"aE" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (EAST)"; icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating,/area/space)
+"aF" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f17"; icon_state = "swall_f17"},/area/space)
+"aG" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/plating,/area/space)
"aH" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/derelict/ship)
-"aI" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aJ" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aK" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aL" = (/obj/machinery/door/window,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aM" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"aI" = (/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aJ" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f14"; icon_state = "swall_f14"},/area/space)
+"aK" = (/obj/structure/rack,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aL" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aM" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f11"; icon_state = "swall_f11"},/area/space)
"aN" = (/obj/structure/lattice,/turf/space,/area/space)
-"aO" = (/obj/structure/table,/obj/item/weapon/gun/energy/laser/retro,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aP" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aQ" = (/obj/structure/table,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aR" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"aO" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aP" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/shuttle/plating,/area/space)
+"aR" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"aS" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/space)
"aT" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/space)
"aU" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/space)
"aV" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/space)
-"aW" = (/obj/structure/table,/obj/item/device/analyzer,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aX" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"aY" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"aW" = (/obj/machinery/door/window,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aX" = (/obj/structure/table,/obj/item/weapon/gun/energy/laser/retro,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"aY" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"aZ" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/space)
-"ba" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/space)
+"ba" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bb" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
-"bc" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/space)
+"bc" = (/obj/machinery/computer/shuttle/syndicate/whiteship,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bd" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/space)
-"be" = (/obj/machinery/door/window/northright,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bg" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"be" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bf" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bg" = (/obj/structure/table,/obj/item/weapon/tank/internals/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bh" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bi" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/derelict/ship)
"bj" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/derelict/ship)
-"bk" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/space)
-"bl" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/space)
-"bm" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bk" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bl" = (/obj/machinery/door/window/northright,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bm" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bn" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/space)
"bo" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/space)
"bp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/space)
-"bq" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"br" = (/obj/item/weapon/shard,/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bs" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bt" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bu" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bv" = (/obj/structure/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bw" = (/obj/structure/rack,/obj/item/clothing/suit/space/hardsuit/medical,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/hardsuit/medical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bx" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"by" = (/obj/machinery/power/apc{cell_type = 5000; dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bz" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bA" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/derelict/ship)
+"bq" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f18"; icon_state = "swall_f18"},/area/space)
+"br" = (/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bs" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bt" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bu" = (/turf/simulated/shuttle/wall{tag = "icon-swall_f16"; icon_state = "swall_f16"},/area/space)
+"bv" = (/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bw" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
+"bx" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space)
"bB" = (/obj/item/trash/cheesie,/turf/space,/area/space)
-"bC" = (/obj/machinery/door/poddoor{id = "oldship_gun"; name = "pod bay door"},/turf/simulated/shuttle/plating,/area/derelict/ship)
-"bD" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id = "oldship_gun"},/turf/simulated/shuttle/plating,/area/derelict/ship)
-"bE" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/plating,/area/derelict/ship)
-"bF" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bG" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/derelict/ship)
-"bH" = (/obj/machinery/computer/pod{id = "oldship_gun"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bI" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bJ" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bK" = (/turf/simulated/floor/plating/airless,/area/space)
"bL" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"bM" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
@@ -298,27 +287,27 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacadaeaaaaaaaaaaaaaaabaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacafagagahagaiajadaeaaaaaaaaabajakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalamagagagagagaganaiaoaeaaaaabapaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoajasagagagagatagagagauaoaeabapavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoafamaiacadawawawacacaxajajajalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauafagayagazaAaBagaCagagagagagagaDavaEacaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAagagagagazaAagagagagagagagagagauacaoaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawagagagagaGaAagagaHaxacacasagaIaAaJaiajadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawagagagagagaAagagaAagaKaLaAagagaAaMagagaiaoaeaaabadacacacacacacacadaeaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaOazagagagawagagaAaPaQaIaAagagawagagagagaiaoacaoafagagagaRagagagaialaNaaaaaSaTaUaUaUaUaUaUaUaTaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaWaXagagagaYagagaAagagagaAagagaYagagagagagaxagaxagagagagagagagagagaxaNaaaNaZbabbbbbbbbbbbbbbbcbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawazazagagagawagagaAbebfagaAagagawagagagagaHaoacaoasagagagagagagbgaHalaNaNaNbhbbbbbbbbbbbbbbbbbbbhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawagagagagagaAagagaiacacaxafagagaAagagagaHaobiaabjajacacacacacacacajbiaaaaaNaZbkbbbbbbbbbbbbbbblbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawagagagagbmauasagagagagagagagagaAagaHadajbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaabnboaUaUaUaUaUaUaUbobpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAbqbrbsagaHaoajacacadasagagagagauacaobiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauasbtbuaHaoafbvbwbxaialbyagaCbzaDavbAacakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjajadacaoafagagagagagaAagagaHadalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCbDbEagagagagagagaxbFaHaobibjbGavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjacalbHagagagagagauadaobiaaaabjbGaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjadasagbIbJaHaoajbiaaaaaaaabjadaFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjajacacacajbiaaaaaaaaaaaaaabjbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaVaaaaaaaaaaaaaSahaUaUaUaUaUaUbhaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakboaVaaaaaaaaaSbdbbbbamanbbbbbbbbaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaparaVaaaaaSatbdbbbbbbbbbbbbbbavaZaUaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqapawaraVaSatayaoazbbbbbbbbbbbbbbaBaAaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqapawawaZboaybbaoazbbbbbbbbbbaDataUboaTaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaabadacacacacacacacadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaUaFawaGbbaIbbaZaJaKbbbbbbaDatayaLaLaMbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaNauafagagagagagagagaialaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSataUbdbbbbbbaMboaUaUbhaTataybbaOaOaPaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaxagagagagagagagagagaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaTboaybbaobbbbbbbbbbbbbbbbaMbdbbbbbbbbbbaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNauasagagagagagagagaHalaaaaaSaTaUaUaUaUaUaUaUaTaVaaaSataybbbbbbaobbbbaDaUaUbhaJbbbbaobbbbbbbbbbaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaabjajacacacacacacacajbiaaaaataybbbbbbbbbbbbbbaMataUataybbbbbbbbaQbbbbaoaWaRbbaobbbbaQbbbbbbaYaXaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhbbbbbbbbbbbbbbbbbbbhbbbhbbbbbbbbbbbabbbbaobbbbbbaobbbbbabbbbbbbebcaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataJbbbbbbbbbbbbbfaDataUataJbbbbbbbbaQbbbbaobbbgbbaobbbbaQbbbbbbaYaYaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnboaUaUaUaUaUaUaUbobpaabnataJbbbbbbaobbbbaobbbkblaobbbbaobbbbbbbbbbaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnboaTaJbmaobbbbaMbhaUaUaybbbbaoaYbbbbbbbbaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnataUbdbbbbbbbbbbbbbbbbbbaoaYbbbbbbbbaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaUbqawaGbbbbbbbbbbbbaIbbbraoaYbbbsbbaDbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqapawawaZaTaTaTbhaUaUaQaQaQboaUaJbtaDatbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqapawbubpbnatbdbbbbbbbvbbbbbbbbaMaTatbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqapbubpaaaabnataJbwbbbbbbbbbbbbbtaZbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaTbpaaaaaaaabnboaTaJbbbxbbbbaDaUbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnbpaaaaaaaaaaaaaabnboaUaUaUaUbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/generic/z4.dmm b/_maps/map_files/generic/z4.dmm
index 938e9451dbf..64df1473ee8 100644
--- a/_maps/map_files/generic/z4.dmm
+++ b/_maps/map_files/generic/z4.dmm
@@ -497,7 +497,7 @@
"jC" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless,/area/space)
"jD" = (/obj/structure/grille,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
"jE" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/airless,/area/space)
-"jF" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/arrival)
+"jF" = (/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_z4"; name = "KSS13: Derelict"; width = 35},/turf/space,/area/space)
"jG" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary)
"jH" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/hallway/primary)
"jI" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
@@ -729,7 +729,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecIcIcIdbfCfDdfdbdddfdfdfdcdbdfdffEfzdddBcIcIcIaeaeflfdfffFfFfdfgfGfHfHfdfdaebjaeaeaebjbjfxbwbjblbkfxfyfIblbwbkbwbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecIcIdddcfJdfdfdbfKdbdcdddodpdofKfLdcdccIcIaaaafrfMfdfffFfffffgfgfgfdfdaaaaaaaeaaaabjbkbkbwbjfNfNfNfNfNfNfOfOfObjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgdfdgaeaefDecevdBdBdBfPdxdxdydbdbdBcIcIaafrfMfmfdfgfgfgfffQfgfdfdfdaaaeaebjaafRfOfOfOfOfOfOfSfTfUfVfUfWfXfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYaaaaaaaaaaaaaafZaadfdfgaaeaedfgbdBdbdbfadBdBdbdcdddBdBcIcIaaflfFfmfdfdfdfgfdfdfdfdfdfdgcgcbwbwbwfRgdgdgegegffOfSfSfSfUfUfXfXfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYfYfYfYfYfYfYfYfYfYfYfYfYfYaaaaaaaaaaaaaafZaadfdfgaaeaedfgbdBdbdbfadBdBdbdcdddBdBcIcIaaflfFfmfdfdfdfgfdfdfdfdfdfdgcgcbwbwbwfRgdgdgegegffOfSfSfSfUfUfXfXfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYggggggggggggggggggghgggigggifYgjgkgkgkgjglgmgngogjgpaegqaedBdBdbdcdcdcdbdBdBdbdccIcIcIcIaaflfmfffdfgfufffufdfufugrfubjfxfxfxbjfxgegdgfgfgegsfUfUfUfUfUfXfXfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYggggggggggggggggggggggggggggfYgtgtgtgugtgvgwgngngxaeaeaeaecIcIdBgydddbdBcIcIcIcIcIcIaeaefFgzfmfffgfgfffFfufugrfufFgAbwbwgBgBgCgBfNfNfNfNfNfNfUfUgDfUfUfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYgiggggggggggggfYfYfYfYfYgEfYfYgFgtgtgtgtgGgvgwgngngngnaeaecIcIcIcIdfcIcIcIcIcIcIaeaabjfdfFfefffffdfgfffffFfkfkfkfkfkaeaeaeaaaaaagHfygHbjcBfNfSfSfUfSgIfUgJfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -744,23 +744,23 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagWgXgYgZiEgZgYgZgYfYaaaaaafdfgfgfgfgfgfgfgfgfgfgfdiFfghGfgfghHfdiFfgfgfgfgfdfdfdfdfgfgfgfgfgfgiGiliHfdfgfgfffffgiIfkeDaeaaiJiJiJiKeDbwaaiLiLiJiMfNfOfUiNfUfUiOfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYiPfYfYfYfYfYfYfYaaaaaafdfgfgfgfgfgfgfgfgfgfgiQfgfghGfgfgfgfdfgfgfgfgfgfgfgitfgiRilililililiSfghGfdfgfgfgfgfgiTfkeDaeaaaaaaaaaaaaaaaaaaaaaaaagefOfUfOfUfUiUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYaaaaaaaaaaaaaaaaaafdfgfgfdfdfdfgfdfdfdiVfdfgfgiWilililiXililiYililililililiSfgfgfgfgfgfgfgiZfkjafkiTfffdbwaaaeaaaaaaaaaaaaaaaaaaaaaaaajbjcfOfUfOfOfOfOfOfNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfgfgfdjditfgfdjditfgfdjejejejfiVjgfdiFfghGfgfgfgfgfgfgfgfkfkfkfkfkfkjhiZbkbkfkfdfdfdaaaaaaaaaaaaaaaajiaaaaaeaaaeaefOjjjkfUfUhIjkfUfUfNfNfNfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefgfdjlfgjmfdjlfgjlfdjnfgfgfgfgfgfdfgfgjofgfgfgfgfgfgfgfkbkbkjpbkbkjqjrbkblblbwbwbwaaaaaadWaaaaaaaaaaaaaejsjsaeaefOjtfUfUgDfUfUfUfUgDfUfUfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefdfdfdfdfdfdfdfdfdfgfgfgjufgfgfdfdfdfdfdfdfdfdfdjvfdfkbjbjbjbjbkjqjrbkbljpbkjwbwaeaeaaaeaeaeaaaaaaaeaeaeaaaeaajxjyfUfUfUfUgDfUfUfOfUjzfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefFfFfFfFfgjAfFjAfdfgjujljljufgfdbkbjbjbjaeaeaebwbjbjaaaaaaaedwbjbkjBjCjDbkbkjEbwaeaeaeaecDaeaeaeaeaeaaaeaaaaaajxjyjtfUfUfUfUfUfUfOjFfUfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaefFfFjAjGfgjHfdiFfgjIjlfghHfdbjbjaaaaaaaaaeaebjbjaaaaaeaeaeaebjjrbkjJbkjEjEbwaeaaaaaaaaaeaeaeaaaeaaaaaeaaaajxjyfUfUfUfUfUfUfUfOhIjKfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefFfFfFjAfgfdfgfgjljlfgfgfdbkbjaaaaaaaaaeaeaaaaaaaaaeaaaaaabjjrbkjLbkjEjEbwaeaeaaaaaeaeaaaaaaaaaaaaaaaaaajxjMjNjMiaiaiaiaiaiaiaiafNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafFfFfFfdfgfgjujufgfgfdbjaaaaaaaaaaaaaeaaaaaaaaaeaeaejsbjjObkbkbkbkbkjPjQjRblblaeaaaaaaaaaaaaaaaaaaaaaajSgDhVbjbjbjbjaaaaaaaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaefFfgfgfgfgfgfgfgfdbjaaaaaaaaaaaaaeaaaaaaaaaeaaaaaaaajTjUjUjUjUjUjVjWjRaabjaaaaaaaaaaaaaaaadWaaaaaajXjNjYbwaaaabwaaaaaaaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefdfdfdfdfdfdfgfdjZbjaeaaaaaaaaaaaeaaaaaaaaaeaaaaaaaaaaaebjbkbkbkjRkajRaabwaaaaaaaaaaaaaaaaaaaaaaaakbkcaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaafFfFgrfffgjHfdbjaeaeaeaeaebjbjaeaeaeaeaeaaaacDaaaaaebjbjbjbkjRkdkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaafFfmfFfgfgfdbjaeaaaaaabjbjcBbjaaaaaeaeaeaeaeaeaeaeaabjbjbkjRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafFkgfFfffFfgfFbjaaaaaaaaaaaebjbjaaaaaaaaaeaaaaaaaaaeaaaabjbkjRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaeaafFfFfFfgfgfmfdbjaaaaaaaaaaaaaeaaaaaaaaaaaeaaaaaaaaaeaeaeblbljRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaeaefdfFfdfdfdfdbkaaaaaaaaaaaeaeaeaeaaaaaaaeaaaaaaaaaeaaaaaabjjPkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafFfFfFfffmfgfdbjbjaaaaaaaaaeaaaaaeaeaaaaaeaaaaaaaaaeaaaabjbkjPkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaefFfFfFfffdbwbwbjaaaaaeaeaaaaaaaeaeaeaeaeaeaeaeaebjbjbkbkjPkfjRjPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaafFfFfFfmfgfdaaaabwaeaaaeaeaaaaaaaaaeaeaaaaaaaaaabjbkbkbkbkjPkfkhkijPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfgfgfdjditfgfdjditfgfdjejejejfiVjgfdiFfghGfgfgfgfgfgfgfgfkfkfkfkfkfkjhiZbkbkfkfdfdfdaaaaaaaaaaaaaaaajiaaaaaeaaaeaefOjjjkfUfUhIjkfUfNfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefgfdjlfgjmfdjlfgjlfdjnfgfgfgfgfgfdfgfgjofgfgfgfgfgfgfgfkbkbkjpbkbkjqjrbkblblbwbwbwaaaaaadWaaaaaaaaaaaaaejsjsaeaefOjtfUfUgDfUfUfUfUfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefdfdfdfdfdfdfdfdfdfgfgfgjufgfgfdfdfdfdfdfdfdfdfdjvfdfkbjbjbjbjbkjqjrbkbljpbkjwbwaeaeaaaeaeaeaaaaaaaeaeaeaaaeaajxjyfUfUfUfUgDfUjzfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefFfFfFfFfgjAfFjAfdfgjujljljufgfdbkbjbjbjaeaeaebwbjbjaaaaaaaedwbjbkjBjCjDbkbkjEbwaeaeaeaecDaeaeaeaeaeaaaeaaaaaajxjyjtfUfUfUfUfUfUfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaefFfFjAjGfgjHfdiFfgjIjlfghHfdbjbjaaaaaaaaaeaebjbjaaaaaeaeaeaebjjrbkjJbkjEjEbwaeaaaaaaaaaeaeaeaaaeaaaaaeaaaajxjyfUfUfUfUfUfUjKfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefFfFfFjAfgfdfgfgjljlfgfgfdbkbjaaaaaaaaaeaeaaaaaaaaaeaaaaaabjjrbkjLbkjEjEbwaeaeaaaaaeaeaaaaaaaaaaaaaaaaaajxjMjNjMiaiaiaiaiafNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafFfFfFfdfgfgjujufgfgfdbjaaaaaaaaaaaaaeaaaaaaaaaeaeaejsbjjObkbkbkbkbkjPjQjRblblaeaaaaaaaaaaaaaaaaaaaaaajSgDhVbjbjbjbjaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaefFfgfgfgfgfgfgfgfdbjaaaaaaaaaaaaaeaaaaaaaaaeaaaaaaaajTjUjUjUjUjUjVjWjRaabjaaaaaaaaaaaaaaaadWaaaaaajXjNjYbwaaaabwaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefdfdfdfdfdfdfgfdjZbjaeaaaaaaaaaaaeaaaaaaaaaeaaaaaaaaaaaebjbkbkbkjRkajRaabwaaaaaaaaaaaaaaaaaaaaaaaakbkcaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaafFfFgrfffgjHfdbjaeaeaeaeaebjbjaeaeaeaeaeaaaacDaaaaaebjbjbjbkjRkdkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaafFfmfFfgfgfdbjaeaaaaaabjbjcBbjaaaaaeaeaeaeaeaeaeaeaabjbjbkjRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafFkgfFfffFfgfFbjaaaaaaaaaaaebjbjaaaaaaaaaeaaaaaaaaaeaaaabjbkjRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaeaafFfFfFfgfgfmfdbjaaaaaaaaaaaaaeaaaaaaaaaaaeaaaaaaaaaeaeaeblbljRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaeaefdfFfdfdfdfdbkaaaaaaaaaaaeaeaeaeaaaaaaaeaaaaaaaaaeaaaaaabjjPkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafFfFfFfffmfgfdbjbjaaaaaaaaaeaaaaaeaeaaaaaeaaaaaaaaaeaaaabjbkjPkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaefFfFfFfffdbwbwbjaaaaaeaeaaaaaaaeaeaeaeaeaeaeaeaebjbjbkbkjPkfjRjPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaafFfFfFfmfgfdaaaabwaeaaaeaeaaaaaaaaaeaeaaaaaaaaaabjbkbkbkbkjPkfkhkijPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebwjPjQjPjPjPjPkjjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPkkkhkhkhklaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaekmkhkhkhknkhkhkhkhkhkhkokpkqkrksktkukvkhkhkhkhkhkhkhkhkhkhkhkwkxkykmkhkhkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekmkmkmkhkhkhkhkhkhkhkhkzkAkBkCkDkEkFkGkhkhkhkhkhkhkhkhkhkhkhkfkhkhkhkhkhkeaaaaaaaaaakbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm
index 6d9fc6f20dd..201c0a384ca 100644
--- a/_maps/map_files/generic/z5.dmm
+++ b/_maps/map_files/generic/z5.dmm
@@ -210,7 +210,7 @@
"eb" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp)
"ec" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=1-Storage"; location = "Sleeper"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp)
"ed" = (/obj/machinery/light/small{dir = 4},/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp)
-"ee" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
+"ee" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"ef" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp)
"eg" = (/obj/machinery/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
"eh" = (/obj/structure/plasticflaps/mining,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"; temperature = 273.15},/area/mine/laborcamp)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 64c5095397e..e9d95f43aa8 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -97,3 +97,11 @@
#define SOUND_MINIMUM_PRESSURE 10
#define FALLOFF_SOUNDS 1
#define SURROUND_CAP 7
+
+//FONTS:
+// Used by Paper and PhotoCopier (and PaperBin once a year).
+// Used by PDA's Notekeeper.
+// Used by NewsCaster and NewsPaper.
+#define PEN_FONT "Verdana"
+#define CRAYON_FONT "Comic Sans MS"
+#define SIGNFONT "Times New Roman"
diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm
index 5c68c8a5c0e..2b1cffb297f 100644
--- a/code/__DEFINES/stat.dm
+++ b/code/__DEFINES/stat.dm
@@ -30,5 +30,6 @@
#define SHUTTLE_RECALL 1
#define SHUTTLE_CALL 2
#define SHUTTLE_DOCKED 3
-#define SHUTTLE_ESCAPE 4
-#define SHUTTLE_ENDGAME 5
+#define SHUTTLE_STRANDED 4
+#define SHUTTLE_ESCAPE 5
+#define SHUTTLE_ENDGAME 6
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index b933c66686b..9945a13fcad 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -37,12 +37,12 @@
return t
//Removes a few problematic characters
-/proc/sanitize_simple(var/t,var/list/repl_chars = list("\n"="#","\t"="#","�"="�"))
+/proc/sanitize_simple(var/t,var/list/repl_chars = list("\n"="#","\t"="#"))
for(var/char in repl_chars)
var/index = findtext(t, char)
while(index)
t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+1)
- index = findtext(t, char)
+ index = findtext(t, char, index+1)
return t
//Runs byond's sanitization proc along-side sanitize_simple
@@ -147,23 +147,63 @@
return t_out
-//this proc strips html properly, but it's not lazy like the other procs.
-//this means that it doesn't just remove < and > and call it a day. seriously, who the fuck thought that would be useful.
+//this proc strips html properly, this means that it removes everything between < and >, and between "http" and "://"
//also limit the size of the input, if specified to
/proc/strip_html_properly(var/input,var/max_length=MAX_MESSAGE_LEN)
if(!input)
return
- var/opentag = 1 //These store the position of < and > respectively.
- var/closetag = 1
- while(1)
- opentag = findtext(input, "<")
- closetag = findtext(input, ">")
- if(!closetag || !opentag)
- break
- input = copytext(input, 1, opentag) + copytext(input, (closetag + 1))
+
if(max_length)
input = copytext(input,1,max_length)
- return input
+
+ var/sanitized_output
+ var/next_html_tag = findtext(input, "<")
+ var/next_http = findtext(input, "http", 1, next_html_tag)
+
+ //the opening and closing of the expression to skip, e.g '<' and '>'
+ var/opening = non_zero_min(next_html_tag, next_http)
+ var/closing
+
+ sanitized_output = copytext(input, 1, opening)
+
+ while(next_html_tag || next_http)
+
+ //we treat < ... >
+ if(opening == next_html_tag)
+ closing = findtext(input, ">", opening + 1)
+ if(closing)
+ next_html_tag = findtext(input, "<", closing)
+ next_http = findtext(input, "http", closing, next_html_tag)
+ else //no matching ">"
+ next_html_tag = 0
+
+ //we treat "http(s)://"
+ else
+ closing = findtext(input, "://", opening + 1)
+ if(closing)
+ closing += 2 //skip these extra //
+ next_http = findtext(input, "http", closing)
+ next_html_tag = findtext(input, "<", closing, next_http)
+ else //no matching "://"
+ next_http = 0
+
+ //check if we've something to skip
+ if(closing)
+ opening = non_zero_min(next_html_tag, next_http)
+ sanitized_output += copytext(input, closing + 1, opening)
+
+ sanitized_output += copytext(input, opening) //don't forget the remaining text
+
+ return sanitized_output
+
+//strip_html_properly helper proc that returns the smallest non null of two numbers
+//or 0 if they're both null (needed because of findtext returning 0 when a value is not present)
+/proc/non_zero_min(var/a, var/b)
+ if(!a)
+ return b
+ if(!b)
+ return a
+ return (a < b ? a : b)
/*
* Text searches
@@ -388,3 +428,34 @@ var/list/binary = list("0","1")
temp = findtextEx(haystack, ascii2text(text2ascii(needles,i)), start, end) //Note: ascii2text(text2ascii) is faster than copytext()
if(temp) end = temp
return end
+
+
+/proc/parsepencode(t, mob/user=null, signfont=SIGNFONT)
+ if(length(t) < 1) //No input means nothing needs to be parsed
+ return
+
+ t = replacetext(t, "\[center\]", "
")
+ t = replacetext(t, "\[/center\]", "")
+ t = replacetext(t, "\[br\]", "
")
+ t = replacetext(t, "\[b\]", "")
+ t = replacetext(t, "\[/b\]", "")
+ t = replacetext(t, "\[i\]", "")
+ t = replacetext(t, "\[/i\]", "")
+ t = replacetext(t, "\[u\]", "")
+ t = replacetext(t, "\[/u\]", "")
+ t = replacetext(t, "\[large\]", "")
+ t = replacetext(t, "\[/large\]", "")
+ if(user)
+ t = replacetext(t, "\[sign\]", "[user.real_name]")
+ else
+ t = replacetext(t, "\[sign\]", "")
+ t = replacetext(t, "\[field\]", "")
+
+ t = replacetext(t, "\[*\]", "")
+ t = replacetext(t, "\[hr\]", "
")
+ t = replacetext(t, "\[small\]", "")
+ t = replacetext(t, "\[/small\]", "")
+ t = replacetext(t, "\[list\]", "")
+ t = replacetext(t, "\[/list\]", "
")
+
+ return t
\ No newline at end of file
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index aad6401421c..d7a9b4c3afb 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -818,17 +818,13 @@ Turf and target are seperate in case you want to teleport some distance from a t
//Returns sortedAreas list if populated
//else populates the list first before returning it
-/proc/returnSortedAreas()
- if(!sortedAreas.len)
- for(var/area/A in world)
- if(!A.contents.len)
- continue
- if(A.lighting_subarea)
- continue
- sortedAreas.Add(A)
+/proc/SortAreas()
+ for(var/area/A in world)
+ if(A.lighting_subarea)
+ continue
+ sortedAreas.Add(A)
- sortTim(sortedAreas, /proc/cmp_name_asc)
- return sortedAreas
+ sortTim(sortedAreas, /proc/cmp_name_asc)
/area/proc/addSorted()
sortedAreas.Add(src)
diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm
index fe655216354..e8512549c1c 100644
--- a/code/_globalvars/station.dm
+++ b/code/_globalvars/station.dm
@@ -1,4 +1,4 @@
-var/global/obj/effect/datacore/data_core = null
+var/global/datum/datacore/data_core = null
//var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event
//Noble idea, but doing this made GC fail. The gains from waiting on deffering are lost by using del()
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 7225f85733b..e23a1e42479 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -133,29 +133,29 @@
C << "You are not wearing a mask."
return 1
else
- if(istype(C.l_hand, /obj/item/weapon/tank))
+ if(istype(C.l_hand, /obj/item/weapon/tank/internals))
C << "You are now running on internals from the [C.l_hand] on your left hand."
C.internal = C.l_hand
- else if(istype(C.r_hand, /obj/item/weapon/tank))
+ else if(istype(C.r_hand, /obj/item/weapon/tank/internals))
C << "You are now running on internals from the [C.r_hand] on your right hand."
C.internal = C.r_hand
else if(ishuman(C))
var/mob/living/carbon/human/H = C
- if(istype(H.s_store, /obj/item/weapon/tank))
+ if(istype(H.s_store, /obj/item/weapon/tank/internals))
H << "You are now running on internals from the [H.s_store] on your [H.wear_suit]."
H.internal = H.s_store
- else if(istype(H.belt, /obj/item/weapon/tank))
+ else if(istype(H.belt, /obj/item/weapon/tank/internals))
H << "You are now running on internals from the [H.belt] on your belt."
H.internal = H.belt
- else if(istype(H.l_store, /obj/item/weapon/tank))
+ else if(istype(H.l_store, /obj/item/weapon/tank/internals))
H << "You are now running on internals from the [H.l_store] in your left pocket."
H.internal = H.l_store
- else if(istype(H.r_store, /obj/item/weapon/tank))
+ else if(istype(H.r_store, /obj/item/weapon/tank/internals))
H << "You are now running on internals from the [H.r_store] in your right pocket."
H.internal = H.r_store
//Seperate so CO2 jetpacks are a little less cumbersome.
- if(!C.internal && istype(C.back, /obj/item/weapon/tank))
+ if(!C.internal && istype(C.back, /obj/item/weapon/tank/internals))
C << "You are now running on internals from the [C.back] on your back."
C.internal = C.back
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index 690453df1e6..ec70b9aebe2 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -175,6 +175,10 @@ var/const/tk_maxrange = 15
overlays += icon(focus.icon,focus.icon_state)
return
+obj/item/tk_grab/suicide_act(mob/user)
+ user.visible_message("[user] is using \his telekinesis to choke \himself! It looks like \he's trying to commit suicide.")
+ return (OXYLOSS)
+
/*Not quite done likely needs to use something thats not get_step_to
/obj/item/tk_grab/proc/check_path()
var/turf/ref = get_turf(src.loc)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 2c926b33225..ad92db7f1b6 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -47,9 +47,9 @@
var/kick_inactive = 0 //force disconnect for inactive players
var/load_jobs_from_txt = 0
var/automute_on = 0 //enables automuting/spam prevention
- var/minimal_access_threshold = 0 //If the number of players is larger than this threshold, minimal access will be turned on and assistants and security will get maint access
- var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access. Only used if minimal_access_threshold is 0.
- var/jobs_have_maint_access = 0 //Who gets maint access? See defines above. Only used if minimal_access_threshold is 0.
+ var/minimal_access_threshold = 0 //If the number of players is larger than this threshold, minimal access will be turned on.
+ var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access.
+ var/jobs_have_maint_access = 0 //Who gets maint access? See defines above.
var/sec_start_brig = 0 //makes sec start in brig or dept sec posts
var/server
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index 32002394656..178d194afd5 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -215,8 +215,6 @@ var/datum/subsystem/job/SSjob
if(config.minimal_access_threshold)
if(config.minimal_access_threshold > unassigned.len)
config.jobs_have_minimal_access = 0
- config.jobs_have_maint_access |= ASSISTANTS_HAVE_MAINT_ACCESS
- config.jobs_have_maint_access |= SECURITY_HAS_MAINT_ACCESS
else
config.jobs_have_minimal_access = 1
@@ -345,7 +343,7 @@ var/datum/subsystem/job/SSjob
if(job.req_admin_notify)
H << "You are playing a job that is important for Game Progression. If you have to disconnect, please notify the admins via adminhelp."
if(config.minimal_access_threshold)
- H << "As this station was initially staffed with a [config.jobs_have_minimal_access ? "full crew, only your job's necessities" : "skeleton crew, additional access"] have been added to your ID card."
+ H << "As this station was initially staffed with a [config.jobs_have_minimal_access ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] have been added to your ID card."
H.update_hud() // Tmp fix for Github issue 1006. TODO: make all procs in update_icons.dm do client.screen |= equipment no matter what.
return 1
diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm
index bbf78e8db0b..064b8b2b5f5 100644
--- a/code/controllers/subsystem/mobs.dm
+++ b/code/controllers/subsystem/mobs.dm
@@ -15,10 +15,8 @@ var/datum/subsystem/mobs/SSmob
/datum/subsystem/mobs/fire()
var/seconds = wait * 0.1
- var/i=1
for(var/thing in mob_list)
if(thing)
thing:Life(seconds)
- ++i
continue
- mob_list.Cut(i, i+1)
\ No newline at end of file
+ mob_list.Remove(thing)
\ No newline at end of file
diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm
index d492e160170..91025890fc0 100644
--- a/code/controllers/subsystem/shuttles.dm
+++ b/code/controllers/subsystem/shuttles.dm
@@ -15,8 +15,7 @@ var/datum/subsystem/shuttle/SSshuttle
var/emergencyDockTime = 1800 //time taken for emergency shuttle to leave again once it has docked (in deciseconds)
var/emergencyEscapeTime = 1200 //time taken for emergency shuttle to reach a safe distance after leaving station (in deciseconds)
var/area/emergencyLastCallLoc
- var/emergencyAlwaysFakeRecall
- var/emergencyFakeRecall
+ var/emergencyNoEscape
//supply shuttle stuff
var/obj/docking_port/mobile/supply/supply
@@ -104,6 +103,9 @@ var/datum/subsystem/shuttle/SSshuttle
if(SHUTTLE_ESCAPE)
user << "The emergency shuttle is moving away to a safe distance."
return
+ if(SHUTTLE_STRANDED)
+ user << "The emergency shuttle has been disabled by Centcom."
+ return
call_reason = strip_html_properly(trim(call_reason))
diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm
index 745f23e39a7..5c5577a262d 100644
--- a/code/controllers/subsystem/shuttles/emergency.dm
+++ b/code/controllers/subsystem/shuttles/emergency.dm
@@ -47,13 +47,6 @@
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 communcations console." : "" ]", null, 'sound/AI/shuttlecalled.ogg', "Priority")
- if(SSshuttle.emergencyAlwaysFakeRecall)
- if((seclevel2num(get_security_level()) == SEC_LEVEL_RED))
- SSshuttle.emergencyFakeRecall = rand(2, 5) * 0.1
- else
- SSshuttle.emergencyFakeRecall = rand(5, 8) * 0.1
-
-
/obj/docking_port/mobile/emergency/cancel(area/signalOrigin)
if(mode != SHUTTLE_CALL)
return
@@ -84,10 +77,7 @@
mode = SHUTTLE_IDLE
timer = 0
if(SHUTTLE_CALL)
- if(time_left < SSshuttle.emergencyFakeRecall * SSshuttle.emergencyCallTime) //recall due to fake recalls
- cancel()
- SSshuttle.emergencyFakeRecall = 0
- else if(time_left <= 0)
+ if(time_left <= 0)
//move emergency shuttle to station
if(dock(SSshuttle.getDock("emergency_home")))
setTimer(20)
@@ -97,7 +87,10 @@
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")
if(SHUTTLE_DOCKED)
- if(time_left <= 0)
+ if(time_left <= 0 && SSshuttle.emergencyNoEscape)
+ priority_announce("Hostile enviroment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority")
+ mode = SHUTTLE_STRANDED
+ if(time_left <= 0 && !SSshuttle.emergencyNoEscape)
//move each escape pod to its corresponding transit dock
for(var/obj/docking_port/mobile/pod/M in SSshuttle.mobile)
M.enterTransit()
diff --git a/code/controllers/subsystem/shuttles/supply.dm b/code/controllers/subsystem/shuttles/supply.dm
index c7ef12234f5..3aa57e82b16 100644
--- a/code/controllers/subsystem/shuttles/supply.dm
+++ b/code/controllers/subsystem/shuttles/supply.dm
@@ -181,21 +181,19 @@
/proc/forbidden_atoms_check(atom/A)
+ var/list/blacklist = list(
+ /mob/living,
+ /obj/effect/blob,
+ /obj/effect/spider/spiderling,
+ /obj/item/weapon/disk/nuclear,
+ /obj/machinery/nuclearbomb,
+ /obj/item/device/radio/beacon,
+ /obj/machinery/the_singularitygen,
+ /obj/singularity,
+ )
if(A)
- if(istype(A,/mob/living))
+ if(is_type_in_list(A, blacklist))
return 1
- if(istype(A,/obj))
- if(istype(A,/obj/effect/blob))
- return 1
- if(istype(A,/obj/effect/spider/spiderling))
- return 1
- if(istype(A,/obj/item/weapon/disk/nuclear))
- return 1
- if(istype(A,/obj/machinery/nuclearbomb))
- return 1
- if(istype(A,/obj/item/device/radio/beacon))
- return 1
-
for(var/thing in A)
if(.(thing))
return 1
@@ -203,8 +201,6 @@
return 0
-
-
/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob)
if(..())
return
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index e04adb83d04..4014d4eb0eb 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -1,6 +1,5 @@
-/obj/effect/datacore
- name = "datacore"
+/datum/datacore
var/medical[] = list()
var/medicalPrintCount = 0
var/general[] = list()
@@ -25,7 +24,7 @@
var/time = ""
var/dataId = 0
-/obj/effect/datacore/proc/createCrimeEntry(cname = "", cdetails = "", author = "", time = "")
+/datum/datacore/proc/createCrimeEntry(cname = "", cdetails = "", author = "", time = "")
var/datum/data/crime/c = new /datum/data/crime
c.crimeName = cname
c.crimeDetails = cdetails
@@ -34,14 +33,14 @@
c.dataId = ++securityCrimeCounter
return c
-/obj/effect/datacore/proc/addMinorCrime(id = "", var/datum/data/crime/crime)
+/datum/datacore/proc/addMinorCrime(id = "", var/datum/data/crime/crime)
for(var/datum/data/record/R in security)
if(R.fields["id"] == id)
var/list/crimes = R.fields["mi_crim"]
crimes |= crime
return
-/obj/effect/datacore/proc/removeMinorCrime(id, cDataId)
+/datum/datacore/proc/removeMinorCrime(id, cDataId)
for(var/datum/data/record/R in security)
if(R.fields["id"] == id)
var/list/crimes = R.fields["mi_crim"]
@@ -50,7 +49,7 @@
crimes -= crime
return
-/obj/effect/datacore/proc/removeMajorCrime(id, cDataId)
+/datum/datacore/proc/removeMajorCrime(id, cDataId)
for(var/datum/data/record/R in security)
if(R.fields["id"] == id)
var/list/crimes = R.fields["ma_crim"]
@@ -59,14 +58,14 @@
crimes -= crime
return
-/obj/effect/datacore/proc/addMajorCrime(id = "", var/datum/data/crime/crime)
+/datum/datacore/proc/addMajorCrime(id = "", var/datum/data/crime/crime)
for(var/datum/data/record/R in security)
if(R.fields["id"] == id)
var/list/crimes = R.fields["ma_crim"]
crimes |= crime
return
-/obj/effect/datacore/proc/manifest(var/nosleep = 0)
+/datum/datacore/proc/manifest(var/nosleep = 0)
spawn()
if(!nosleep)
sleep(40)
@@ -74,12 +73,12 @@
manifest_inject(H)
return
-/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment)
+/datum/datacore/proc/manifest_modify(var/name, var/assignment)
var/datum/data/record/foundrecord = find_record("name", name, data_core.general)
if(foundrecord)
foundrecord.fields["rank"] = assignment
-/obj/effect/datacore/proc/get_manifest(monochrome, OOC)
+/datum/datacore/proc/get_manifest(monochrome, OOC)
var/list/heads = list()
var/list/sec = list()
var/list/eng = list()
@@ -135,49 +134,49 @@
misc[name] = rank
if(heads.len > 0)
dat += "| Heads |
"
- for(name in heads)
+ for(var/name in heads)
dat += "| [name] | [heads[name]] |
"
even = !even
if(sec.len > 0)
dat += "| Security |
"
- for(name in sec)
+ for(var/name in sec)
dat += "| [name] | [sec[name]] |
"
even = !even
if(eng.len > 0)
dat += "| Engineering |
"
- for(name in eng)
+ for(var/name in eng)
dat += "| [name] | [eng[name]] |
"
even = !even
if(med.len > 0)
dat += "| Medical |
"
- for(name in med)
+ for(var/name in med)
dat += "| [name] | [med[name]] |
"
even = !even
if(sci.len > 0)
dat += "| Science |
"
- for(name in sci)
+ for(var/name in sci)
dat += "| [name] | [sci[name]] |
"
even = !even
if(sup.len > 0)
dat += "| Supply |
"
- for(name in sup)
+ for(var/name in sup)
dat += "| [name] | [sup[name]] |
"
even = !even
if(civ.len > 0)
dat += "| Civilian |
"
- for(name in civ)
+ for(var/name in civ)
dat += "| [name] | [civ[name]] |
"
even = !even
// in case somebody is insane and added them to the manifest, why not
if(bot.len > 0)
dat += "| Silicon |
"
- for(name in bot)
+ for(var/name in bot)
dat += "| [name] | [bot[name]] |
"
even = !even
// misc guys
if(misc.len > 0)
dat += "| Miscellaneous |
"
- for(name in misc)
+ for(var/name in misc)
dat += "| [name] | [misc[name]] |
"
even = !even
@@ -188,7 +187,7 @@
var/record_id_num = 1001
-/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
+/datum/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
if(H.mind && (H.mind.assigned_role != "MODE"))
var/assignment
if(H.mind.assigned_role)
@@ -199,6 +198,11 @@ var/record_id_num = 1001
assignment = "Unassigned"
var/id = num2hex(record_id_num++,6)
+ var/image = get_id_photo(H)
+ var/obj/item/weapon/photo/photo_front = new()
+ var/obj/item/weapon/photo/photo_side = new()
+ photo_front.photocreate(null, icon(image, dir = SOUTH))
+ photo_side.photocreate(null, icon(image, dir = WEST))
//These records should ~really~ be merged or something
//General Record
@@ -207,10 +211,14 @@ var/record_id_num = 1001
G.fields["name"] = H.real_name
G.fields["rank"] = assignment
G.fields["age"] = H.age
+ if(config.mutant_races)
+ G.fields["species"] = H.dna.species.name
G.fields["fingerprint"] = md5(H.dna.uni_identity)
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
G.fields["sex"] = H.gender
+ G.fields["photo_front"] = photo_front
+ G.fields["photo_side"] = photo_side
general += G
//Medical Record
@@ -251,7 +259,166 @@ var/record_id_num = 1001
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
L.fields["identity"] = H.dna.uni_identity
- L.fields["image"] = getFlatIcon(H) //This is god-awful
+ L.fields["image"] = image
locked += L
return
+/datum/datacore/proc/get_id_photo(var/mob/living/carbon/human/H)
+ var/icon/photo = null
+ var/g = (H.gender == FEMALE) ? "f" : "m"
+ if(!config.mutant_races || H.dna.species.use_skintones)
+ photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s")
+ else
+ photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s")
+ photo.Blend("#[H.dna.mutant_color]", ICON_MULTIPLY)
+
+ var/icon/eyes_s
+ if(EYECOLOR in H.dna.species.specflags)
+ eyes_s = icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "[H.dna.species.eyes]_s")
+ eyes_s.Blend("#[H.eye_color]", ICON_MULTIPLY)
+
+ var/datum/sprite_accessory/S
+ S = hair_styles_list[H.hair_style]
+ if(S && (HAIR in H.dna.species.specflags))
+ var/icon/hair_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
+ hair_s.Blend("#[H.hair_color]", ICON_MULTIPLY)
+ eyes_s.Blend(hair_s, ICON_OVERLAY)
+
+ S = facial_hair_styles_list[H.facial_hair_style]
+ if(S && (FACEHAIR in H.dna.species.specflags))
+ var/icon/facial_s = icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
+ facial_s.Blend("#[H.facial_hair_color]", ICON_MULTIPLY)
+ eyes_s.Blend(facial_s, ICON_OVERLAY)
+
+ if(eyes_s)
+ photo.Blend(eyes_s, ICON_OVERLAY)
+
+ var/icon/clothes_s = null
+ switch(H.mind.assigned_role)
+ if("Assistant")
+ clothes_s = icon('icons/mob/uniform.dmi', "grey_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ if("Scientist")
+ clothes_s = icon('icons/mob/uniform.dmi', "toxinswhite_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_tox"), ICON_OVERLAY)
+ if("Station Engineer")
+ clothes_s = icon('icons/mob/uniform.dmi', "engine_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
+ if("Security Officer")
+ clothes_s = icon('icons/mob/uniform.dmi', "security_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY)
+ if("Medical Doctor")
+ clothes_s = icon('icons/mob/uniform.dmi', "medical_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
+ if("Cargo Technician")
+ clothes_s = icon('icons/mob/uniform.dmi', "cargo_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ if("Shaft Miner")
+ clothes_s = icon('icons/mob/uniform.dmi', "miner_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ if("Atmospheric Technician")
+ clothes_s = icon('icons/mob/uniform.dmi', "atmos_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
+ if("Botanist")
+ clothes_s = icon('icons/mob/uniform.dmi', "hydroponics_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY)
+ if("Chemist")
+ clothes_s = icon('icons/mob/uniform.dmi', "chemistrywhite_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_chem"), ICON_OVERLAY)
+ if("Cook")
+ clothes_s = icon('icons/mob/uniform.dmi', "chef_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "chef"), ICON_OVERLAY)
+ if("Janitor")
+ clothes_s = icon('icons/mob/uniform.dmi', "janitor_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ if("Geneticist")
+ clothes_s = icon('icons/mob/uniform.dmi', "geneticswhite_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_gen"), ICON_OVERLAY)
+ if("Virologist")
+ clothes_s = icon('icons/mob/uniform.dmi', "virologywhite_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_vir"), ICON_OVERLAY)
+ if("Roboticist")
+ clothes_s = icon('icons/mob/uniform.dmi', "robotics_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
+ if("Lawyer")
+ clothes_s = icon('icons/mob/uniform.dmi', "bluesuit_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY)
+ if("Clown")
+ clothes_s = icon('icons/mob/uniform.dmi', "clown_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY)
+ if("Mime")
+ clothes_s = icon('icons/mob/uniform.dmi', "mime_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY)
+ if("Bartender")
+ clothes_s = icon('icons/mob/uniform.dmi', "ba_suit_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "armoralt"), ICON_OVERLAY)
+ if("Quartermaster")
+ clothes_s = icon('icons/mob/uniform.dmi', "qm_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ if("Chaplain")
+ clothes_s = icon('icons/mob/uniform.dmi', "chapblack_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ if("Research Director")
+ clothes_s = icon('icons/mob/uniform.dmi', "director_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
+ if("Chief Medical Officer")
+ clothes_s = icon('icons/mob/uniform.dmi', "cmo_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "labcoat_cmo"), ICON_OVERLAY)
+ if("Captain")
+ clothes_s = icon('icons/mob/uniform.dmi', "captain_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY)
+ if("Head of Security")
+ clothes_s = icon('icons/mob/uniform.dmi', "hos_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY)
+ if("Warden")
+ clothes_s = icon('icons/mob/uniform.dmi', "warden_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY)
+ if("Detective")
+ clothes_s = icon('icons/mob/uniform.dmi', "detective_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
+ clothes_s.Blend(icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY)
+ clothes_s.Blend(icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
+ if("Chief Engineer")
+ clothes_s = icon('icons/mob/uniform.dmi', "chief_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
+ clothes_s.Blend(icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
+ if("Head of Personnel")
+ clothes_s = icon('icons/mob/uniform.dmi', "hop_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ if("Librarian")
+ clothes_s = icon('icons/mob/uniform.dmi', "red_suit_s")
+ clothes_s.Blend(icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+
+ if(clothes_s)
+ photo.Blend(clothes_s, ICON_OVERLAY)
+
+ return photo
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index 60f50050301..28b08852240 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -396,7 +396,7 @@ var/list/advance_cures = list(
if(D.symptoms.len > 0)
- var/new_name = input(user, "Name your new disease.", "New Name")
+ var/new_name = stripped_input(user, "Name your new disease.", "New Name")
if(!new_name)
return
D.AssignName(new_name)
diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm
new file mode 100644
index 00000000000..bc63c170960
--- /dev/null
+++ b/code/datums/diseases/advance/symptoms/fire.dm
@@ -0,0 +1,40 @@
+/*
+//////////////////////////////////////
+
+Spontaneous Combustion
+
+ Slightly hidden.
+ Lowers resistance tremendously.
+ Decreases stage tremendously.
+ Decreases transmittablity tremendously.
+ Fatal Level.
+
+Bonus
+ Ignites infected mob.
+
+//////////////////////////////////////
+*/
+
+/datum/symptom/fire
+
+ name = "Spontaneous Combustion"
+ stealth = 1
+ resistance = -4
+ stage_speed = -4
+ transmittable = -4
+ level = 6
+ severity = 5
+
+/datum/symptom/fire/Activate(var/datum/disease/advance/A)
+ ..()
+ if(prob(SYMPTOM_ACTIVATION_PROB))
+ var/mob/living/M = A.affected_mob
+ switch(A.stage)
+ if(4)
+ M.adjust_fire_stacks(5)
+ M.IgniteMob()
+
+ if(5)
+ M.adjust_fire_stacks(10)
+ M.IgniteMob()
+ return
\ No newline at end of file
diff --git a/code/datums/diseases/advance/symptoms/genetics.dm b/code/datums/diseases/advance/symptoms/genetics.dm
index 0c230968227..7720af0449c 100644
--- a/code/datums/diseases/advance/symptoms/genetics.dm
+++ b/code/datums/diseases/advance/symptoms/genetics.dm
@@ -30,11 +30,13 @@ Bonus
/datum/symptom/genetic_mutation/Activate(var/datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 5)) // 15% chance
- var/mob/living/M = A.affected_mob
+ var/mob/living/carbon/M = A.affected_mob
+ if(!check_dna_integrity(M)) return
switch(A.stage)
if(4, 5)
M << "[pick("Your skin feels itchy.", "You feel light headed.")]"
- clean_randmut(M, possible_mutations) // Give them a random good/bad mutation.
+ M.dna.remove_mutation_group(possible_mutations)
+ randmut(M, possible_mutations)
return
// Archive their DNA before they were infected.
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 1280be88102..16e16c914a6 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -58,7 +58,7 @@ Bonus
/datum/symptom/heal/metabolism
- name = "Anti-Bodies Metabolism "
+ name = "Anti-Bodies Metabolism"
stealth = -1
resistance = -1
stage_speed = -1
diff --git a/code/datums/diseases/advance/symptoms/skin.dm b/code/datums/diseases/advance/symptoms/skin.dm
new file mode 100644
index 00000000000..d2bcf627358
--- /dev/null
+++ b/code/datums/diseases/advance/symptoms/skin.dm
@@ -0,0 +1,86 @@
+/*
+//////////////////////////////////////
+Vitiligo
+
+ Extremely Noticable.
+ Decreases resistance slightly.
+ Reduces stage speed slightly.
+ Reduces transmission.
+ Critical Level.
+
+BONUS
+ Makes the mob lose skin pigmentation.
+
+//////////////////////////////////////
+*/
+
+/datum/symptom/vitiligo
+
+ name = "Vitiligo"
+ stealth = -3
+ resistance = -1
+ stage_speed = -1
+ transmittable = -2
+ level = 4
+ severity = 1
+
+/datum/symptom/vitiligo/Activate(var/datum/disease/advance/A)
+ ..()
+ if(prob(SYMPTOM_ACTIVATION_PROB))
+ var/mob/living/M = A.affected_mob
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.skin_tone == "albino")
+ return
+ switch(A.stage)
+ if(5)
+ H.skin_tone = "albino"
+ H.update_body(0)
+ else
+ H.visible_message("[H] looks a bit pale...", "You look a bit pale...")
+
+ return
+
+
+/*
+//////////////////////////////////////
+Revitiligo
+
+ Extremely Noticable.
+ Decreases resistance slightly.
+ Reduces stage speed slightly.
+ Reduces transmission.
+ Critical Level.
+
+BONUS
+ Makes the mob gain skin pigmentation.
+
+//////////////////////////////////////
+*/
+
+/datum/symptom/revitiligo
+
+ name = "Revitiligo"
+ stealth = -3
+ resistance = -1
+ stage_speed = -1
+ transmittable = -2
+ level = 4
+ severity = 1
+
+/datum/symptom/vitiligo/Activate(var/datum/disease/advance/A)
+ ..()
+ if(prob(SYMPTOM_ACTIVATION_PROB))
+ var/mob/living/M = A.affected_mob
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.skin_tone == "african2")
+ return
+ switch(A.stage)
+ if(5)
+ H.skin_tone = "african2"
+ H.update_body(0)
+ else
+ H.visible_message("[H] looks a bit dark...", "You look a bit dark...")
+
+ return
\ No newline at end of file
diff --git a/code/datums/diseases/advance/symptoms/visionloss.dm b/code/datums/diseases/advance/symptoms/vision.dm
similarity index 54%
rename from code/datums/diseases/advance/symptoms/visionloss.dm
rename to code/datums/diseases/advance/symptoms/vision.dm
index c80b5a35d6c..b63a4ee729f 100644
--- a/code/datums/diseases/advance/symptoms/visionloss.dm
+++ b/code/datums/diseases/advance/symptoms/vision.dm
@@ -1,49 +1,89 @@
-/*
-//////////////////////////////////////
-
-Hyphema (Eye bleeding)
-
- Slightly noticable.
- Lowers resistance tremendously.
- Decreases stage speed tremendously.
- Decreases transmittablity.
- Critical Level.
-
-Bonus
- Causes blindness.
-
-//////////////////////////////////////
-*/
-
-/datum/symptom/visionloss
-
- name = "Hyphema"
- stealth = -1
- resistance = -4
- stage_speed = -4
- transmittable = -3
- level = 5
- severity = 4
-
-/datum/symptom/visionloss/Activate(var/datum/disease/advance/A)
- ..()
- if(prob(SYMPTOM_ACTIVATION_PROB))
- var/mob/living/M = A.affected_mob
- switch(A.stage)
- if(1, 2)
- M << "Your eyes itch."
- if(3, 4)
- M << "Your eyes ache."
- M.eye_blurry = 10
- M.eye_stat += 1
- else
- M << "Your eyes burn horrificly!"
- M.eye_blurry = 20
- M.eye_stat += 5
- if (M.eye_stat >= 10)
- M.disabilities |= NEARSIGHT
- if (prob(M.eye_stat - 10 + 1) && !(M.eye_blind))
- M << "You go blind!"
- M.disabilities |= BLIND
- M.eye_blind = 1
- return
\ No newline at end of file
+/*
+//////////////////////////////////////
+
+Hyphema (Eye bleeding)
+
+ Slightly noticable.
+ Lowers resistance tremendously.
+ Decreases stage speed tremendously.
+ Decreases transmittablity.
+ Critical Level.
+
+Bonus
+ Causes blindness.
+
+//////////////////////////////////////
+*/
+
+/datum/symptom/visionloss
+
+ name = "Hyphema"
+ stealth = -1
+ resistance = -4
+ stage_speed = -4
+ transmittable = -3
+ level = 5
+ severity = 4
+
+/datum/symptom/visionloss/Activate(var/datum/disease/advance/A)
+ ..()
+ if(prob(SYMPTOM_ACTIVATION_PROB))
+ var/mob/living/M = A.affected_mob
+ switch(A.stage)
+ if(1, 2)
+ M << "Your eyes itch."
+ if(3, 4)
+ M << "Your eyes ache."
+ M.eye_blurry = 10
+ M.eye_stat += 1
+ else
+ M << "Your eyes burn horrificly!"
+ M.eye_blurry = 20
+ M.eye_stat += 5
+ if (M.eye_stat >= 10)
+ M.disabilities |= NEARSIGHT
+ if (prob(M.eye_stat - 10 + 1) && !(M.eye_blind))
+ M << "You go blind!"
+ M.disabilities |= BLIND
+ M.eye_blind = 1
+ return
+
+
+/*
+//////////////////////////////////////
+
+Ocular Restoration
+
+ Noticable.
+ Lowers resistance significantly.
+ Decreases stage speed moderately..
+ Decreases transmittablity tremendously.
+ High level.
+
+Bonus
+ Restores eyesight.
+
+//////////////////////////////////////
+*/
+
+/datum/symptom/visionaid
+
+ name = "Ocular Restoration"
+ stealth = -1
+ resistance = -3
+ stage_speed = -2
+ transmittable = -4
+ level = 4
+
+/datum/symptom/visionaid/Activate(var/datum/disease/advance/A)
+ ..()
+ if(prob(SYMPTOM_ACTIVATION_PROB * 5))
+ var/mob/living/M = A.affected_mob
+ switch(A.stage)
+ if(4, 5)
+ if (M.reagents.get_reagent_amount("oculine") < 20)
+ M.reagents.add_reagent("oculine", 20)
+ else
+ if(prob(SYMPTOM_ACTIVATION_PROB * 5))
+ M << "[pick("Your eyes feel great.", "You are now blinking manually.", "You don't feel the need to blink.")]"
+ return
diff --git a/code/datums/diseases/advance/symptoms/vitiligo.dm b/code/datums/diseases/advance/symptoms/vitiligo.dm
deleted file mode 100644
index e24be2c36b5..00000000000
--- a/code/datums/diseases/advance/symptoms/vitiligo.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-//////////////////////////////////////
-Vitiligo
-
- Extremely Noticable.
- Decreases resistance slightly.
- Reduces stage speed slightly.
- Reduces transmission.
- Critical Level.
-
-BONUS
- Makes the mob lose skin pigmentation.
-
-//////////////////////////////////////
-*/
-
-/datum/symptom/vitiligo
-
- name = "Vitiligo"
- stealth = -3
- resistance = -1
- stage_speed = -1
- transmittable = -2
- level = 5
- severity = 1
-
-/datum/symptom/vitiligo/Activate(var/datum/disease/advance/A)
- ..()
- if(prob(SYMPTOM_ACTIVATION_PROB))
- var/mob/living/M = A.affected_mob
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(H.skin_tone == "albino")
- return
- switch(A.stage)
- if(5)
- H.skin_tone = "albino"
- H.update_body(0)
- else
- H.visible_message("[H] looks a bit pale...", "You look a bit pale...")
-
- return
\ No newline at end of file
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
index 6c8a80c85d7..2aaea111eb1 100644
--- a/code/datums/diseases/transformation.dm
+++ b/code/datums/diseases/transformation.dm
@@ -61,7 +61,7 @@
affected_mob.mind.transfer_to(new_mob)
else
new_mob.key = affected_mob.key
- qdel(affected_mob)
+ qdel(affected_mob)
diff --git a/code/datums/goon_mutations_disabilities.dm b/code/datums/goon_mutations_disabilities.dm
index decfd10a987..44555ce8c4b 100644
--- a/code/datums/goon_mutations_disabilities.dm
+++ b/code/datums/goon_mutations_disabilities.dm
@@ -31,51 +31,52 @@
/datum/mutation/human/smile/say_mod(var/message)
if(message)
+ message = " [message] "
//Time for a friendly game of SS13
- message = replacetext(message,"stupid","smart")
- message = replacetext(message,"retard","genius")
- message = replacetext(message,"unrobust","robust")
- message = replacetext(message,"dumb","smart")
- message = replacetext(message,"awful","great")
- message = replacetext(message,"gay",pick("nice","ok","alright"))
- message = replacetext(message,"horrible","fun")
- message = replacetext(message,"terrible","terribly fun")
- message = replacetext(message,"terrifying","wonderful")
- message = replacetext(message,"gross","cool")
- message = replacetext(message,"disgusting","amazing")
- message = replacetext(message,"loser","winner")
- message = replacetext(message,"useless","useful")
- message = replacetext(message,"oh god","cheese and crackers")
- message = replacetext(message,"jesus","gee wiz")
- message = replacetext(message,"weak","strong")
- message = replacetext(message,"kill","hug")
- message = replacetext(message,"murder","tease")
- message = replacetext(message,"ugly","beautiful")
- message = replacetext(message,"douchbag","nice guy")
- message = replacetext(message,"whore","lady")
- message = replacetext(message,"nerd","smart guy")
- message = replacetext(message,"moron","fun person")
- message = replacetext(message,"IT'S LOOSE","EVERYTHING IS FINE")
- message = replacetext(message,"sex","hug fight")
- message = replacetext(message,"idiot","genius")
- message = replacetext(message,"fat","thin")
- message = replacetext(message,"beer","water with ice")
- message = replacetext(message,"drink","water")
- message = replacetext(message,"feminist","empowered woman")
- message = replacetext(message,"i hate you","you're mean")
- message = replacetext(message,"nigger","african american")
- message = replacetext(message,"jew","jewish")
- message = replacetext(message,"shit","shiz")
- message = replacetext(message,"crap","poo")
- message = replacetext(message,"slut","tease")
- message = replacetext(message,"ass","butt")
- message = replacetext(message,"damn","dang")
- message = replacetext(message,"fuck","")
- message = replacetext(message,"penis","privates")
- message = replacetext(message,"cunt","privates")
- message = replacetext(message,"dick","jerk")
- message = replacetext(message,"vagina","privates")
- return message
+ message = replacetext(message," stupid "," smart ")
+ message = replacetext(message," retard "," genius ")
+ message = replacetext(message," unrobust "," robust ")
+ message = replacetext(message," dumb "," smart ")
+ message = replacetext(message," awful "," great ")
+ message = replacetext(message," gay ",pick(" nice "," ok "," alright "))
+ message = replacetext(message," horrible "," fun ")
+ message = replacetext(message," terrible "," terribly fun ")
+ message = replacetext(message," terrifying "," wonderful ")
+ message = replacetext(message," gross "," cool ")
+ message = replacetext(message," disgusting "," amazing ")
+ message = replacetext(message," loser "," winner ")
+ message = replacetext(message," useless "," useful ")
+ message = replacetext(message," oh god "," cheese and crackers ")
+ message = replacetext(message," jesus "," gee wiz ")
+ message = replacetext(message," weak "," strong ")
+ message = replacetext(message," kill "," hug ")
+ message = replacetext(message," murder "," tease ")
+ message = replacetext(message," ugly "," beautiful ")
+ message = replacetext(message," douchbag "," nice guy ")
+ message = replacetext(message," whore "," lady ")
+ message = replacetext(message," nerd "," smart guy ")
+ message = replacetext(message," moron "," fun person ")
+ message = replacetext(message," IT'S LOOSE "," EVERYTHING IS FINE ")
+ message = replacetext(message," sex "," hug fight ")
+ message = replacetext(message," idiot "," genius ")
+ message = replacetext(message," fat "," thin ")
+ message = replacetext(message," beer "," water with ice ")
+ message = replacetext(message," drink "," water ")
+ message = replacetext(message," feminist "," empowered woman ")
+ message = replacetext(message," i hate you "," you're mean ")
+ message = replacetext(message," nigger "," african american ")
+ message = replacetext(message," jew "," jewish ")
+ message = replacetext(message," shit "," shiz ")
+ message = replacetext(message," crap "," poo ")
+ message = replacetext(message," slut "," tease ")
+ message = replacetext(message," ass "," butt ")
+ message = replacetext(message," damn "," dang ")
+ message = replacetext(message," fuck "," ")
+ message = replacetext(message," penis "," privates ")
+ message = replacetext(message," cunt "," privates ")
+ message = replacetext(message," dick "," jerk ")
+ message = replacetext(message," vagina "," privates ")
+ return trim(message)
/datum/mutation/human/unintelligable
name = "Unintelligable"
@@ -129,30 +130,29 @@
/datum/mutation/human/chav/say_mod(var/message)
if(message)
- message = replacetext(message,"dick","prat")
- message = replacetext(message,"comdom","knob'ead")
- message = replacetext(message,"looking at","gawpin' at")
- message = replacetext(message,"great","bangin'")
- message = replacetext(message,"man","mate")
- message = replacetext(message,"friend",pick("mate","bruv","bledrin"))
- message = replacetext(message,"what","wot")
- message = replacetext(message,"drink","wet")
- message = replacetext(message,"get","giz")
- message = replacetext(message,"what","wot")
- message = replacetext(message,"no thanks","wuddent fukken do one")
- message = replacetext(message,"i don't know","wot mate")
- message = replacetext(message,"no","naw")
- message = replacetext(message,"robust","chin")
- message = replacetext(message,"hi","how what how")
- message = replacetext(message,"hello","sup bruv")
- message = replacetext(message,"kill","bang")
- message = replacetext(message,"murder","bang")
- message = replacetext(message,"windows","windies")
- message = replacetext(message,"window","windy")
- message = replacetext(message,"break","do")
- message = replacetext(message,"your","yer")
- message = replacetext(message,"security","coppers")
- return message
+ message = " [message] "
+ message = replacetext(message," looking at "," gawpin' at ")
+ message = replacetext(message," great "," bangin' ")
+ message = replacetext(message," man "," mate ")
+ message = replacetext(message," friend ",pick(" mate "," bruv "," bledrin "))
+ message = replacetext(message," what "," wot ")
+ message = replacetext(message," drink "," wet ")
+ message = replacetext(message," get "," giz ")
+ message = replacetext(message," what "," wot ")
+ message = replacetext(message," no thanks "," wuddent fukken do one ")
+ message = replacetext(message," i don't know "," wot mate ")
+ message = replacetext(message," no "," naw ")
+ message = replacetext(message," robust "," chin ")
+ message = replacetext(message," hi "," how what how ")
+ message = replacetext(message," hello "," sup bruv ")
+ message = replacetext(message," kill "," bang ")
+ message = replacetext(message," murder "," bang ")
+ message = replacetext(message," windows "," windies ")
+ message = replacetext(message," window "," windy ")
+ message = replacetext(message," break "," do ")
+ message = replacetext(message," your "," yer ")
+ message = replacetext(message," security "," coppers ")
+ return trim(message)
/datum/mutation/human/elvis
name = "Elvis"
@@ -173,13 +173,14 @@
/datum/mutation/human/elvis/say_mod(var/message)
if(message)
- message = replacetext(message,"i'm not","I aint")
- message = replacetext(message,"girl",pick("honey","baby","baby doll"))
- message = replacetext(message,"man",pick("son","buddy","brother", "pal", "friendo"))
- message = replacetext(message,"out of","outta")
- message = replacetext(message,"thank you","thank you, thank you very much")
- message = replacetext(message,"what are you","whatcha")
- message = replacetext(message,"yes",pick("sure", "yea"))
- message = replacetext(message,"faggot","square")
- message = replacetext(message,"muh valids","getting my kicks")
- return message
\ No newline at end of file
+ message = " [message] "
+ message = replacetext(message," i'm not "," I aint ")
+ message = replacetext(message," girl ",pick(" honey "," baby "," baby doll "))
+ message = replacetext(message," man ",pick(" son "," buddy "," brother"," pal "," friendo "))
+ message = replacetext(message," out of "," outta ")
+ message = replacetext(message," thank you "," thank you, thank you very much ")
+ message = replacetext(message," what are you "," whatcha ")
+ message = replacetext(message," yes ",pick(" sure", "yea "))
+ message = replacetext(message," faggot "," square ")
+ message = replacetext(message," muh valids "," getting my kicks ")
+ return trim(message)
diff --git a/code/datums/goon_mutations_powers.dm b/code/datums/goon_mutations_powers.dm
index 38069f48488..e164eced752 100644
--- a/code/datums/goon_mutations_powers.dm
+++ b/code/datums/goon_mutations_powers.dm
@@ -6,6 +6,7 @@
text_gain_indication = "You begin to fade into the shadows."
text_lose_indication = "You become fully visible."
+
/datum/mutation/human/stealth/on_life(mob/living/carbon/human/owner)
var/turf/simulated/T = get_turf(owner)
if(!istype(T))
@@ -26,8 +27,11 @@
lowest_value = 256 * 14
text_gain_indication = "You feel one with your surroundings."
text_lose_indication = "You feel oddly exposed."
-
+ var/last_location
/datum/mutation/human/chameleon/on_life(mob/living/carbon/human/owner)
+ if(owner.loc != last_location)
+ owner.alpha = round(255 * 0.80)
+ last_location = owner.loc
if((world.time - owner.last_movement) >= 30 && !owner.stat && owner.canmove && !owner.restrained())
owner.alpha -= 25
else
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 9f1c9b517ed..e3d6929115d 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -273,6 +273,12 @@
text += "head|loyal|employee|headrev|REV"
else
text += "head|loyal|EMPLOYEE|headrev|rev"
+
+ if(current && current.client && current.client.prefs.be_special & BE_REV)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["revolution"] = text
/** GANG ***/
@@ -323,6 +329,14 @@
text += "LOYAL|none|(A) gangster boss|(B) gangster boss"
else
text += "loyal|NONE|(A) gangster boss|(B) gangster boss"
+
+
+ if(current && current.client && current.client.prefs.be_special & BE_GANG)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
+
sections["gang"] = text
/** CULT ***/
@@ -341,6 +355,12 @@
text += "LOYAL|employee|cultist"
else
text += "loyal|EMPLOYEE|cultist"
+
+ if(current && current.client && current.client.prefs.be_special & BE_CULTIST)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["cult"] = text
/** WIZARD ***/
@@ -355,6 +375,12 @@
text += "
Objectives are empty! Randomize!"
else
text += "yes|NO"
+
+ if(current && current.client && current.client.prefs.be_special & BE_WIZARD)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["wizard"] = text
/** CHANGELING ***/
@@ -373,6 +399,12 @@
// var/datum/game_mode/changeling/changeling = ticker.mode
// if (istype(changeling) && changeling.changelingdeath)
// text += "
All the changelings are dead! Restart in [round((changeling.TIME_TO_GET_REVIVED-(world.time-changeling.changelingdeathtime))/10)] seconds."
+
+ if(current && current.client && current.client.prefs.be_special & BE_CHANGELING)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["changeling"] = text
/** NUCLEAR ***/
@@ -392,6 +424,12 @@
text += " Code is [code]. tell the code."
else
text += "operative|NANOTRASEN"
+
+ if(current && current.client && current.client.prefs.be_special & BE_OPERATIVE)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["nuclear"] = text
/** TRAITOR ***/
@@ -405,6 +443,12 @@
text += "
Objectives are empty! Randomize!"
else
text += "traitor|LOYAL"
+
+ if(current && current.client && current.client.prefs.be_special & BE_TRAITOR)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["traitor"] = text
/** MONKEY ***/
@@ -427,6 +471,12 @@
else
text += "healthy|infected|human|OTHER"
+
+ if(current && current.client && current.client.prefs.be_special & BE_MONKEY)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["monkey"] = text
@@ -452,6 +502,12 @@
if (R.emagged)
n_e_robots++
text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag"
+
+ if(current && current.client && current.client.prefs.be_special & BE_MALF)
+ text += "|Enabled in Prefs"
+ else
+ text += "|Disabled in Prefs"
+
sections["malfunction"] = text
if (ticker.mode.config_tag == "traitorchan")
diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
index a9e7da16668..566adcedc03 100644
--- a/code/datums/mutations.dm
+++ b/code/datums/mutations.dm
@@ -204,9 +204,7 @@
/datum/mutation/human/epilepsy/on_life(mob/living/carbon/human/owner)
if ((prob(1) && owner.paralysis < 1))
- owner << "You have a seizure!"
- for(var/mob/O in viewers(owner, null) - owner)
- O.show_message(text("[src] starts having a seizure!"), 1)
+ owner.visible_message("[owner] starts having a seizure!", "You have a seizure!")
owner.Paralyse(10)
owner.Jitter(1000)
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index c49252f1a1e..7137bbf9ad1 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -58,6 +58,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if(user.z == ZLEVEL_CENTCOM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
return 0
+ if(user.z == ZLEVEL_CENTCOM && ticker.mode.name == "ragin' mages")
+ return 0
if(!skipcharge)
switch(charge_type)
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 9a2b80739f7..846e90a51bf 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -77,11 +77,11 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/machinery/bot/floorbot,
/obj/machinery/bot/medbot,
/obj/machinery/bot/medbot,
- /obj/item/weapon/tank/air,
- /obj/item/weapon/tank/air,
- /obj/item/weapon/tank/air,
- /obj/item/weapon/tank/air,
- /obj/item/weapon/tank/air,
+ /obj/item/weapon/tank/internals/air,
+ /obj/item/weapon/tank/internals/air,
+ /obj/item/weapon/tank/internals/air,
+ /obj/item/weapon/tank/internals/air,
+ /obj/item/weapon/tank/internals/air,
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
@@ -97,9 +97,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
contains = list(/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
- /obj/item/weapon/tank/air,
- /obj/item/weapon/tank/air,
- /obj/item/weapon/tank/air)
+ /obj/item/weapon/tank/internals/air,
+ /obj/item/weapon/tank/internals/air,
+ /obj/item/weapon/tank/internals/air)
cost = 10
containername = "internals crate"
@@ -111,8 +111,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/clothing/mask/gas,
/obj/item/device/flashlight,
/obj/item/device/flashlight,
- /obj/item/weapon/tank/oxygen/red,
- /obj/item/weapon/tank/oxygen/red,
+ /obj/item/weapon/tank/internals/oxygen/red,
+ /obj/item/weapon/tank/internals/oxygen/red,
/obj/item/weapon/extinguisher,
/obj/item/weapon/extinguisher,
/obj/item/clothing/head/hardhat/red,
@@ -306,9 +306,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/security/armory/eweapons
name = "Incendiary Weapons Crate"
contains = list(/obj/item/weapon/flamethrower/full,
- /obj/item/weapon/tank/plasma,
- /obj/item/weapon/tank/plasma,
- /obj/item/weapon/tank/plasma,
+ /obj/item/weapon/tank/internals/plasma,
+ /obj/item/weapon/tank/internals/plasma,
+ /obj/item/weapon/tank/internals/plasma,
/obj/item/weapon/grenade/chem_grenade/incendiary,
/obj/item/weapon/grenade/chem_grenade/incendiary,
/obj/item/weapon/grenade/chem_grenade/incendiary)
@@ -544,6 +544,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/reagent_containers/glass/bottle/toxin,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/item/weapon/reagent_containers/glass/beaker/large,
+ /obj/item/stack/medical/gauze,
/obj/item/weapon/storage/box/beakers,
/obj/item/weapon/storage/box/syringes,
/obj/item/weapon/storage/box/bodybags)
@@ -607,6 +608,28 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
access = access_cmo
+/datum/supply_packs/medical/bloodpacks
+ name = "Blood Pack Variety Crate"
+ contains = list(/obj/item/weapon/reagent_containers/blood/empty,
+ /obj/item/weapon/reagent_containers/blood/empty,
+ /obj/item/weapon/reagent_containers/blood/APlus,
+ /obj/item/weapon/reagent_containers/blood/AMinus,
+ /obj/item/weapon/reagent_containers/blood/BPlus,
+ /obj/item/weapon/reagent_containers/blood/BMinus,
+ /obj/item/weapon/reagent_containers/blood/OPlus,
+ /obj/item/weapon/reagent_containers/blood/OMinus)
+ cost = 35
+ containertype = /obj/structure/closet/crate/freezer
+ containername = "blood pack crate"
+
+/datum/supply_packs/medical/iv_drip
+ name = "IV Drip Crate"
+ contains = list(/obj/machinery/iv_drip)
+ cost = 30
+ containertype = /obj/structure/closet/crate/secure
+ containername = "iv drip crate"
+ access = access_cmo
+
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Science /////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -649,9 +672,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/science/plasma
name = "Plasma Assembly Crate"
- contains = list(/obj/item/weapon/tank/plasma,
- /obj/item/weapon/tank/plasma,
- /obj/item/weapon/tank/plasma,
+ contains = list(/obj/item/weapon/tank/internals/plasma,
+ /obj/item/weapon/tank/internals/plasma,
+ /obj/item/weapon/tank/internals/plasma,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/igniter,
@@ -786,6 +809,13 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containertype = /obj/structure/closet/critter/fox
containername = "fox crate"
+/datum/supply_packs/organic/butterfly
+ name = "Butterflies Crate"
+ cost = 50
+ containertype = /obj/structure/closet/critter/butterfly
+ containername = "butterflies crate"
+ contraband = 1
+
////// hippy gear
/datum/supply_packs/organic/hydroponics // -- Skie
@@ -990,8 +1020,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,
/obj/item/weapon/storage/book/bible/booze,
/obj/item/weapon/storage/book/bible/booze,
- /obj/item/clothing/suit/toggle/chaplain_hoodie,
- /obj/item/clothing/suit/toggle/chaplain_hoodie)
+ /obj/item/clothing/suit/hooded/chaplain_hoodie,
+ /obj/item/clothing/suit/hooded/chaplain_hoodie)
cost = 40 // it costs so much because the Space Church is ran by Space Jews
containername = "religious supplies crate"
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 283d6db8282..625e81f7b17 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -11,6 +11,13 @@
attack_verb = list("called", "rang")
hitsound = 'sound/weapons/ring.ogg'
+/obj/item/weapon/phone/suicide_act(mob/user)
+ if(locate(/obj/structure/stool) in user.loc)
+ user.visible_message("[user] begins to tie a noose with the [src.name]'s cord! It looks like \he's trying to commit suicide.")
+ else
+ user.visible_message("[user] is strangling \himself with the [src.name]'s cord! It looks like \he's trying to commit suicide.")
+ return(OXYLOSS)
+
/obj/item/weapon/rsp
name = "\improper Rapid-Seed-Producer (RSP)"
desc = "A device used to rapidly deploy seeds."
@@ -193,6 +200,11 @@
attack_verb = list("chopped", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
+/obj/item/weapon/hatchet/suicide_act(mob/user)
+ user.visible_message("[user] is chopping at \himself with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
+ return (BRUTELOSS)
+
/obj/item/weapon/scythe
icon_state = "scythe0"
name = "scythe"
@@ -208,6 +220,11 @@
attack_verb = list("chopped", "sliced", "cut", "reaped")
hitsound = 'sound/weapons/bladeslice.ogg'
+/obj/item/weapon/scythe/suicide_act(mob/user) // maybe later i'll actually figure out how to make it behead them
+ user.visible_message("[user] is beheading \himself with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
+ return (BRUTELOSS)
+
/*
/obj/item/weapon/cigarpacket
name = "Pete's Cuban Cigars"
@@ -466,6 +483,10 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
+/obj/item/weapon/ectoplasm/suicide_act(mob/user)
+ user.visible_message("[user] is inhaling the [src.name]! It looks like \he's trying to visit the astral plane.")
+ return (OXYLOSS)
+
/obj/item/weapon/research//Makes testing much less of a pain -Sieve
name = "research"
icon = 'icons/obj/stock_parts.dmi'
diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm
index e0870964a61..6e9ac7205b5 100644
--- a/code/game/asteroid.dm
+++ b/code/game/asteroid.dm
@@ -63,7 +63,7 @@ proc/make_mining_asteroid_secret()
treasureitems = list(/obj/machinery/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/critter/cat=2)
fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/appendix=2,/obj/structure/closet/crate/freezer=2,
/obj/structure/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3,
- /obj/item/weapon/tank/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1)
+ /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)
if("cult")
theme = "cult"
@@ -91,7 +91,7 @@ proc/make_mining_asteroid_secret()
treasureitems = list(/obj/mecha/working/ripley/mining=1, /obj/item/weapon/pickaxe/drill/diamonddrill=2,/obj/item/weapon/gun/energy/kinetic_accelerator=1,
/obj/item/weapon/resonator=1, /obj/item/weapon/pickaxe/jackhammer=5)
fluffitems = list(/obj/effect/decal/cleanable/blood=3,/obj/effect/decal/remains/human=1,/obj/item/clothing/under/overalls=1,
- /obj/item/weapon/reagent_containers/food/snacks/grown/chili=1,/obj/item/weapon/tank/oxygen/red=2)
+ /obj/item/weapon/reagent_containers/food/snacks/grown/chili=1,/obj/item/weapon/tank/internals/oxygen/red=2)
if("xenoden")
theme = "xenoden"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index a7521840ef6..d750748ce3c 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -329,11 +329,13 @@ var/list/blood_splatter_icons = list()
bloody_hands_mob = M
return 1
-/turf/simulated/add_blood(mob/living/carbon/M)
+/turf/simulated/add_blood(mob/living/carbon/human/M)
if(..() == 0) return 0
var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter
- if(!B) B = new /obj/effect/decal/cleanable/blood(src) //make a bloood splatter if we couldn't find one
+ if(!B)
+ blood_splatter(src,M.get_blood(M.vessel),1)
+ B = locate(/obj/effect/decal/cleanable/blood) in contents
B.add_blood_list(M)
return 1 //we bloodied the floor
@@ -366,7 +368,9 @@ var/list/blood_splatter_icons = list()
if(istype(src, /turf/simulated))
if(check_dna_integrity(M)) //mobs with dna = (monkeys + humans at time of writing)
var/obj/effect/decal/cleanable/blood/B = locate() in contents
- if(!B) B = new(src)
+ if(!B)
+ blood_splatter(src,M,1)
+ B = locate(/obj/effect/decal/cleanable/blood) in contents
B.blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type
else if(istype(M, /mob/living/carbon/alien))
var/obj/effect/decal/cleanable/xenoblood/B = locate() in contents
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 6b1ed80bd7a..6604ce28caf 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -52,8 +52,12 @@
return mutations.Find(HM)
/datum/dna/proc/remove_all_mutations()
- for(var/datum/mutation/human/HM in mutations)
- HM.on_losing(holder)
+ remove_mutation_group(mutations)
+
+/datum/dna/proc/remove_mutation_group(list/group)
+ if(!group) return
+ for(var/datum/mutation/human/HM in group)
+ HM.force_lose(holder)
/datum/dna/proc/generate_uni_identity(mob/living/carbon/character)
. = ""
@@ -235,7 +239,6 @@
if(!check_dna_integrity(M))
return
M.dna.remove_all_mutations()
- M.dna.struc_enzymes = M.dna.generate_struc_enzymes(M) // Give clean DNA.
/proc/clean_randmut(mob/living/carbon/M, list/candidates, difficulty = 2)
clean_dna(M)
@@ -285,9 +288,8 @@
var/mob/living/carbon/C = M
var/mob/living/carbon/temp
- for(var/A in mutations_list)
- var/datum/mutation/human/HM = mutations_list[A]
- temp = HM.check_block(C)
+ for(var/datum/mutation/human/A in good_mutations | bad_mutations | not_good_mutations)
+ temp = A.check_block(C)
if(ismob(temp))
C = temp
diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm
index d9e61f9222c..ae0b05441c6 100644
--- a/code/game/gamemodes/blob/blob.dm
+++ b/code/game/gamemodes/blob/blob.dm
@@ -18,6 +18,7 @@ var/list/blob_nodes = list()
restricted_jobs = list("Cyborg", "AI")
var/declared = 0
+ var/burst = 0
var/cores_to_spawn = 1
var/players_per_core = 30
@@ -52,6 +53,39 @@ var/list/blob_nodes = list()
return 1
+/datum/game_mode/blob/proc/get_blob_candidates()
+ var/list/candidates = list()
+ for(var/mob/living/carbon/human/player in player_list)
+ if(!player.stat && player.mind && !player.mind.special_role && !jobban_isbanned(player, "Syndicate") && (player.client.prefs.be_special & BE_BLOB))
+ candidates += player
+ return candidates
+
+
+/datum/game_mode/blob/proc/blobize(var/mob/living/carbon/human/blob)
+ var/datum/mind/blobmind = blob.mind
+ if(!istype(blobmind))
+ return 0
+ infected_crew += blobmind
+ blobmind.special_role = "Blob"
+ log_game("[blob.key] (ckey) has been selected as a Blob")
+ greet_blob(blobmind)
+ blob << "You feel very tired and bloated! You don't have long before you burst!"
+ spawn(600)
+ burst_blob(blobmind)
+ return 1
+
+/datum/game_mode/blob/proc/make_blobs(var/count)
+ var/list/candidates = get_blob_candidates()
+ var/mob/living/carbon/human/blob = null
+ count=min(count, candidates.len)
+ for(var/i = 0, i < count, i++)
+ blob = pick(candidates)
+ candidates -= blob
+ blobize(blob)
+ return count
+
+
+
/datum/game_mode/blob/announce()
world << "The current game mode is - Blob!"
world << "A dangerous alien organism is rapidly spreading throughout the station!"
@@ -72,34 +106,46 @@ var/list/blob_nodes = list()
/datum/game_mode/blob/proc/burst_blobs()
for(var/datum/mind/blob in infected_crew)
+ burst_blob(blob)
- var/client/blob_client = null
- var/turf/location = null
+/datum/game_mode/blob/proc/burst_blob(var/datum/mind/blob, var/warned=0)
+ var/client/blob_client = null
+ var/turf/location = null
- if(iscarbon(blob.current))
- var/mob/living/carbon/C = blob.current
- if(directory[ckey(blob.key)])
- blob_client = directory[ckey(blob.key)]
- location = get_turf(C)
- if(location.z != ZLEVEL_STATION || istype(location, /turf/space))
- location = null
+ if(iscarbon(blob.current))
+ var/mob/living/carbon/C = blob.current
+ if(directory[ckey(blob.key)])
+ blob_client = directory[ckey(blob.key)]
+ location = get_turf(C)
+ if(location.z != ZLEVEL_STATION || istype(location, /turf/space))
+ if(!warned)
+ C << "You feel ready to burst, but this isn't an appropriate place! You must return to the station!"
+ message_admins("[key_name(C)] was in space when the blobs burst, and will die if he doesn't return to the station.")
+ spawn(300)
+ burst_blob(blob, 1)
+ else
+ burst ++
+ log_admin("[key_name(C)] was in space when attempting to burst as a blob.")
+ message_admins("[key_name(C)] was in space when attempting to burst as a blob.")
+ C.gib()
+ make_blobs(1)
+ check_finished() //Still needed in case we can't make any blobs
+
+ else if(blob_client && location)
+ burst ++
C.gib()
-
-
- if(blob_client && location)
- var/obj/effect/blob/core/core = new(location, 200, blob_client, blob_point_rate)
- if(core.overmind && core.overmind.mind)
- core.overmind.mind.name = blob.name
- infected_crew -= blob
- infected_crew += core.overmind.mind
-
+ var/obj/effect/blob/core/core = new(location, 200, blob_client, blob_point_rate)
+ if(core.overmind && core.overmind.mind)
+ core.overmind.mind.name = blob.name
+ infected_crew -= blob
+ infected_crew += core.overmind.mind
/datum/game_mode/blob/post_setup()
for(var/datum/mind/blob in infected_crew)
greet_blob(blob)
- SSshuttle.emergencyAlwaysFakeRecall = 1
+ SSshuttle.emergencyNoEscape = 1
// Disable the blob event for this round.
var/datum/round_event_control/blob/B = locate() in SSevent.control
diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm
index f83550796b7..56c1b4449c8 100644
--- a/code/game/gamemodes/blob/blob_finish.dm
+++ b/code/game/gamemodes/blob/blob_finish.dm
@@ -1,5 +1,5 @@
/datum/game_mode/blob/check_finished()
- if(!declared)//No blobs have been spawned yet
+ if(infected_crew.len > burst)//Some blobs have yet to burst
return 0
if(blobwincount <= blobs.len)//Blob took over
return 1
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 4412b095858..ac5e4ab7ef2 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -8,6 +8,7 @@
var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 30 seconds
var/resource_delay = 0
var/point_rate = 2
+ can_change_color = 0
/obj/effect/blob/core/New(loc, var/h = 200, var/client/new_overmind = null, var/new_rate = 2)
blob_cores += src
diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm
index 4dee5d6517a..93d1f9753fd 100644
--- a/code/game/gamemodes/blob/blobs/node.dm
+++ b/code/game/gamemodes/blob/blobs/node.dm
@@ -5,7 +5,7 @@
health = 100
fire_resist = 2
var/mob/camera/blob/overmind
-
+ can_change_color = 0
/obj/effect/blob/node/New(loc, var/h = 100)
blob_nodes += src
diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm
index 56e73d4e1bb..c3a0f3cff6e 100644
--- a/code/game/gamemodes/blob/theblob.dm
+++ b/code/game/gamemodes/blob/theblob.dm
@@ -11,6 +11,7 @@
var/health_timestamp = 0
var/brute_resist = 4
var/fire_resist = 1
+ var/can_change_color = 1
/obj/effect/blob/New(loc)
@@ -91,7 +92,8 @@
if(!B)
expand(T,1,a_color)//No blob here so try and expand
return
- B.color = a_color
+ if(B.can_change_color)
+ B.color = a_color
B.Pulse((pulse+1),get_dir(src.loc,T), a_color)
return
return
diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
new file mode 100644
index 00000000000..e2f88ac9d9f
--- /dev/null
+++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
@@ -0,0 +1,24 @@
+//Augmented Eyesight: Gives you thermal and night vision - bye bye, flashlights. Also, high DNA cost because of how powerful it is.
+//Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though.
+
+/obj/effect/proc_holder/changeling/augmented_eyesight
+ name = "Augmented Eyesight"
+ desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability."
+ helptext = "Grants us night vision and thermal vision. It may be toggled on or off."
+ chemical_cost = 0
+ dna_cost = 2 //Would be 1 without thermal vision
+ var/active = 0 //Whether or not vision is enhanced
+
+/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(var/mob/user)
+ active = !active
+ if(active)
+ user << "We feel a minute twitch in our eyes, and darkness creeps away."
+ else
+ user << "Our vision dulls. Shadows gather."
+ user.sight -= SEE_MOBS
+ while(active)
+ user.see_in_dark = 8
+ user.see_invisible = 2
+ user.sight |= SEE_MOBS
+ sleep(1) //BAD THINGS HAPPEN WITHOUT THIS.
+ return 1
diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm
index 60bc0a7bacc..98d0a0f18c6 100644
--- a/code/game/gamemodes/changeling/powers/mutations.dm
+++ b/code/game/gamemodes/changeling/powers/mutations.dm
@@ -253,7 +253,7 @@
icon_state = "lingspacesuit"
desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel."
flags = STOPSPRESSUREDMAGE | NODROP //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff)
- allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/tank/oxygen)
+ allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals/emergency_oxygen, /obj/item/weapon/tank/internals/oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all.
/obj/item/clothing/suit/space/changeling/New()
diff --git a/code/game/gamemodes/changeling/powers/strained_muscles.dm b/code/game/gamemodes/changeling/powers/strained_muscles.dm
new file mode 100644
index 00000000000..9ff9f870adc
--- /dev/null
+++ b/code/game/gamemodes/changeling/powers/strained_muscles.dm
@@ -0,0 +1,50 @@
+//Strained Muscles: Temporary speed boost at the cost of rapid damage
+//Limited because of hardsuits and such; ideally, used for a quick getaway
+
+/obj/effect/proc_holder/changeling/strained_muscles
+ name = "Strained Muscles"
+ desc = "We evolve the ability to reduce the acid buildup in our muscles, allowing us to move much faster."
+ helptext = "The strain will make us tired, and we will rapidly become fatigued. Standard weight restrictions, like hardsuits, still apply. Cannot be used in lesser form."
+ chemical_cost = 0
+ dna_cost = 1
+ req_human = 1
+ var/stacks = 0 //Increments every 5 seconds; damage increases over time
+ var/active = 0 //Whether or not you are a hedgehog
+
+/obj/effect/proc_holder/changeling/strained_muscles/sting_action(var/mob/living/carbon/user)
+ active = !active
+ if(active)
+ user << "Our muscles tense and strengthen."
+ else
+ user.status_flags -= GOTTAGOFAST
+ user << "Our muscles relax."
+ if(stacks >= 10)
+ user << "We collapse in exhaustion."
+ user.Weaken(3)
+ user.emote("gasp")
+
+ while(active)
+ user.status_flags |= GOTTAGOFAST
+ if(user.stat != CONSCIOUS || user.staminaloss >= 90)
+ active = !active
+ user << "Our muscles relax without the energy to strengthen them."
+ user.Weaken(2)
+ user.status_flags -= GOTTAGOFAST
+ break
+
+ stacks++
+ //user.take_organ_damage(stacks * 0.03, 0)
+ user.staminaloss += stacks * 1.3 //At first the changeling may regenerate stamina fast enough to nullify fatigue, but it will stack
+
+ if(stacks == 11) //Warning message that the stacks are getting too high
+ user << "Our legs are really starting to hurt..."
+
+ sleep(40)
+
+ while(!active) //Damage stacks decrease fairly rapidly while not in sanic mode
+ if(stacks >= 1)
+ stacks--
+ sleep(20)
+
+ feedback_add_details("changeling_powers","SANIC")
+ return 1
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 2d5225758e4..90ebb2d9f93 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -97,6 +97,6 @@
item_state = "cult_armor"
desc = "A bulky suit of armor, bristling with spikes. It looks space proof."
w_class = 3
- allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/internals/emergency_oxygen)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
\ No newline at end of file
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index ea5984776d3..930b43848a9 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -77,13 +77,14 @@
AI_mind.special_role = "malfunction"
AI_mind.current.verbs += /datum/game_mode/malfunction/proc/takeover
+ AI_mind.current.verbs += /mob/living/silicon/ai/proc/ai_cancel_call
/* AI_mind.current.icon_state = "ai-malf"
spawn(10)
if(alert(AI_mind.current,"Do you want to use an alternative sprite for your real core?",,"Yes","No")=="Yes")
AI_mind.current.icon_state = "ai-malf2"
*/
- SSshuttle.emergencyAlwaysFakeRecall = 1
+ SSshuttle.emergencyNoEscape = 1
..()
@@ -146,7 +147,11 @@
return 1
if (is_malf_ai_dead())
if(config.continuous_round_malf)
- SSshuttle.emergencyAlwaysFakeRecall = 0
+ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED)
+ SSshuttle.emergency.mode = SHUTTLE_DOCKED
+ SSshuttle.emergency.timer = world.time
+ priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority")
+ SSshuttle.emergencyNoEscape = 0
malf_mode_declared = 0
else
return 1
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 95762bc270b..bfccd051890 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -12,6 +12,9 @@
var/obj/item/weapon/disk/nuclear/the_disk = null
var/active = 0
+/obj/item/weapon/pinpointer/Destroy()
+ active = 0
+ ..()
/obj/item/weapon/pinpointer/attack_self()
if(!active)
@@ -66,6 +69,7 @@
if(bomb.timing)
user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
+
/obj/item/weapon/pinpointer/advpinpointer
name = "advanced pinpointer"
icon = 'icons/obj/device.dmi'
@@ -238,4 +242,40 @@
if(16 to INFINITY)
icon_state = "pinonfar"
- spawn(5) .()
\ No newline at end of file
+ spawn(5)
+ .()
+
+/obj/item/weapon/pinpointer/operative
+ name = "operative pinpointer"
+ icon = 'icons/obj/device.dmi'
+ desc = "A pinpointer that leads to the first Syndicate operative detected."
+ var/mob/living/carbon/nearest_op = null
+
+/obj/item/weapon/pinpointer/operative/attack_self()
+ if(!active)
+ active = 1
+ workop()
+ usr << "You activate the pinpointer."
+ else
+ active = 0
+ icon_state = "pinoff"
+ usr << "You deactivate the pinpointer."
+
+/obj/item/weapon/pinpointer/operative/proc/scan_for_ops()
+ if(!nearest_op)
+ for(var/mob/living/carbon/M in mob_list)
+ if(M.mind in ticker.mode.syndicates)
+ nearest_op = M
+
+/obj/item/weapon/pinpointer/operative/proc/workop()
+ scan_for_ops()
+ point_at(nearest_op, 0)
+ spawn(5)
+ .()
+
+/obj/item/weapon/pinpointer/operative/examine(mob/user)
+ ..()
+ if(nearest_op != null)
+ user << "Nearest operative: [nearest_op]."
+ if(nearest_op == null && active)
+ user << "No operatives detected within scanning range."
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 903896b6c8f..20427ecc5df 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -90,7 +90,7 @@
for(var/datum/mind/rev_mind in head_revolutionaries)
greet_revolutionary(rev_mind)
modePlayer += head_revolutionaries
- SSshuttle.emergencyAlwaysFakeRecall = 1
+ SSshuttle.emergencyNoEscape = 1
..()
@@ -207,7 +207,7 @@
/datum/game_mode/revolution/check_finished()
if(config.continuous_round_rev)
if(finished != 0)
- SSshuttle.emergencyAlwaysFakeRecall = 0
+ SSshuttle.emergencyNoEscape = 0
return ..()
if(finished != 0)
return 1
diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm
index 9b3045d62a1..69c8e75be00 100644
--- a/code/game/gamemodes/sandbox/h_sandbox.dm
+++ b/code/game/gamemodes/sandbox/h_sandbox.dm
@@ -37,7 +37,7 @@ datum/hSB/proc/update()
"Space Gear",
"Suit Up (Space Travel Gear)" = "hsbsuit",
"Spawn Gas Mask" = "hsbspawn&path=[/obj/item/clothing/mask/gas]",
- "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/weapon/tank/emergency_oxygen/double]",
+ "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/weapon/tank/internals/emergency_oxygen/double]",
"Standard Tools",
"Spawn Flashlight" = "hsbspawn&path=[/obj/item/device/flashlight]",
diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm
index 4d8371d517d..cc6b03f2ea1 100644
--- a/code/game/gamemodes/sandbox/sandbox.dm
+++ b/code/game/gamemodes/sandbox/sandbox.dm
@@ -14,4 +14,4 @@
/datum/game_mode/sandbox/post_setup()
..()
- SSshuttle.emergencyAlwaysFakeRecall = 1
+ SSshuttle.emergencyNoEscape = 1
diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm
index a7e376e4857..f2704347e88 100644
--- a/code/game/gamemodes/wizard/raginmages.dm
+++ b/code/game/gamemodes/wizard/raginmages.dm
@@ -13,13 +13,9 @@
world << "The Space Wizard Federation is pissed, help defeat all the space wizards!"
/datum/game_mode/wizard/raginmages/post_setup()
- var/playercount = 0
..()
if(!max_mages)
- for(var/mob/living/player in mob_list)
- if (player.client && player.stat != 2)
- playercount += 1
- max_mages = round(playercount / 5)
+ max_mages = round(num_players() / 5)
/datum/game_mode/wizard/raginmages/greet_wizard(var/datum/mind/wizard, var/you_are=1)
if (you_are)
@@ -40,9 +36,9 @@
continue
if(istype(wizard.current,/mob/living/carbon/brain))
continue
- if(wizard.current.stat==2)
+ if(wizard.current.stat==DEAD)
continue
- if(wizard.current.stat==1)
+ if(wizard.current.stat==UNCONSCIOUS)
if(wizard.current.health < 0)
wizard.current << "The Space Wizard Federation is upset with your performance and have terminated your employment."
wizard.current.stat = 2
@@ -55,7 +51,7 @@
time_checked = world.time
make_more_mages()
else
- if(wizards.len >= max_mages)
+ if(mages_made >= max_mages)
finished = 1
return 1
else
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index 1d96ad8c791..430950915b4 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -45,7 +45,7 @@
if("gyrojet")
new /obj/item/weapon/gun/projectile/automatic/gyropistol(get_turf(H))
if("pulse")
- new /obj/item/weapon/gun/energy/pulse_rifle(get_turf(H))
+ new /obj/item/weapon/gun/energy/pulse(get_turf(H))
if("suppressed")
new /obj/item/weapon/gun/projectile/automatic/pistol(get_turf(H))
new /obj/item/weapon/suppressor(get_turf(H))
@@ -129,7 +129,6 @@
new /obj/item/weapon/gun/magic/staff/door(get_turf(H))
if("armor")
new /obj/item/clothing/suit/space/hardsuit/wizard(get_turf(H))
- new /obj/item/clothing/head/helmet/space/hardsuit/wizard(get_turf(H))
if("scrying")
new /obj/item/weapon/scrying(get_turf(H))
if (!(H.dna.check_mutation(XRAY)))
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index d0804ebe6cf..084cefb272c 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -12,6 +12,7 @@
var/op = 1
var/activepage
var/list/active_challenges = list()
+ var/mob/living/carbon/human/owner
/obj/item/weapon/spellbook/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/antag_spawner/contract))
@@ -28,6 +29,13 @@
/obj/item/weapon/spellbook/attack_self(mob/user as mob)
+ if(!owner)
+ user << "You bind the spellbook to yourself."
+ owner = user
+ return
+ if(user != owner)
+ user << "The [name] does not recognize you as it's owner and refuses to open."
+ return
user.set_machine(src)
var/dat
if(temp)
@@ -38,7 +46,7 @@
dat += "
"
dat += "Learn and Improve Magical Abilities
"
dat += "Summon Magical Tools and Weapons
"
- if(ticker.mode != "ragin' mages") // we totally need summon guns x100
+ if(ticker.mode.name != "ragin' mages") // we totally need summon guns x100
dat += "Raise The Stakes For More Power
"
dat += "
"
dat += "Re-memorize Spells
"
@@ -100,7 +108,7 @@
dat += "Instant Summons (10)
"
dat += "This spell can be used to bind a valuable item to you, bringing it to your hand at will. Using this spell while holding the bound item will allow you to unbind it. It does not require wizard garb.
"
- if(ticker.mode != "ragin' mages") // we totally need summon guns x100
+ if(ticker.mode.name != "ragin' mages") // we totally need summon greentext x100
dat += "Summon Events (One time use, persistent global spell)
"
dat += "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events.
"
@@ -345,7 +353,6 @@
new /obj/item/clothing/shoes/sandal(get_turf(H)) //In case they've lost them.
new /obj/item/clothing/gloves/color/purple(get_turf(H))//To complete the outfit
new /obj/item/clothing/suit/space/hardsuit/wizard(get_turf(H))
- new /obj/item/clothing/head/helmet/space/hardsuit/wizard(get_turf(H))
temp = "You have purchased a suit of wizard armor."
max_uses--
if("staffanimation")
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index ff3763796bb..1b6b18b7c89 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -156,9 +156,12 @@
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(wizard_mob), slot_in_backpack)
// wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/scrying_gem(wizard_mob), slot_l_store) For scrying gem.
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
- wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand)
+ var/obj/item/weapon/spellbook/spellbook = new /obj/item/weapon/spellbook(wizard_mob)
+ spellbook.owner = wizard_mob
+ wizard_mob.equip_to_slot_or_del(spellbook, slot_r_hand)
wizard_mob << "You will find a list of available spells in your spell book. Choose your magic arsenal carefully."
+ wizard_mob << "The spellbook is bound to you, and others cannot use it."
wizard_mob << "In your pockets you will find a teleport scroll. Use it as needed."
wizard_mob.mind.store_memory("Remember: do not forget to prepare your spells.")
wizard_mob.update_icons()
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 11d280c0663..1cbffbab51d 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -218,6 +218,17 @@
/proc/get_all_centcom_access()
return list(access_cent_general, access_cent_thunder, access_cent_specops, access_cent_medical, access_cent_living, access_cent_storage, access_cent_teleporter, access_cent_captain)
+/proc/get_ert_access(var/class)
+ switch(class)
+ if("commander")
+ return get_all_centcom_access()
+ if("sec")
+ return list(access_cent_general, access_cent_specops)
+ if("eng")
+ return list(access_cent_general, access_cent_storage)
+ if("med")
+ return list(access_cent_general, access_cent_medical)
+
/proc/get_all_syndicate_access()
return list(access_syndicate, access_syndicate)
diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm
index 4c67f3feac4..b5fd935fbbe 100644
--- a/code/game/jobs/job/assistant.dm
+++ b/code/game/jobs/job/assistant.dm
@@ -18,7 +18,7 @@ Assistant
H.equip_to_slot_or_del(new /obj/item/clothing/under/color/random(H), slot_w_uniform)
/datum/job/assistant/get_access()
- if(config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) //Config has assistant maint access set
+ if((config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) || !config.jobs_have_minimal_access) //Config has assistant maint access set
. = ..()
. |= list(access_maint_tunnels)
else
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index 6eeded8c1ba..f94c21e1d2f 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -70,7 +70,7 @@ Head of Personnel
default_pda = /obj/item/device/pda/heads/hop
default_headset = /obj/item/device/radio/headset/heads/hop
- access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers, access_weapons,
+ access = list(access_security, access_sec_doors, access_court, access_weapons,
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 836dca7e32e..40aea9af95a 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -15,8 +15,8 @@ Bartender
default_pda = /obj/item/device/pda/bar
default_headset = /obj/item/device/radio/headset/headset_srv
- access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_mineral_storeroom, access_weapons)
- minimal_access = list(access_bar, access_mineral_storeroom)
+ access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons)
+ minimal_access = list(access_bar)
/datum/job/bartender/equip_backpack(var/mob/living/carbon/human/H)
switch(H.backbag)
@@ -127,7 +127,7 @@ Clown
default_pda = /obj/item/device/pda/clown
default_backpack = /obj/item/weapon/storage/backpack/clown
- access = list(access_theatre, access_maint_tunnels)
+ access = list(access_theatre)
minimal_access = list(access_theatre)
/datum/job/clown/equip_backpack(var/mob/living/carbon/human/H)
@@ -169,7 +169,7 @@ Mime
default_pda = /obj/item/device/pda/mime
default_backpack = /obj/item/weapon/storage/backpack/mime
- access = list(access_theatre, access_maint_tunnels)
+ access = list(access_theatre)
minimal_access = list(access_theatre)
/datum/job/mime/equip_backpack(var/mob/living/carbon/human/H)
@@ -209,6 +209,7 @@ Janitor
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
+ var/global/janitors = 1
default_pda = /obj/item/device/pda/janitor
default_headset = /obj/item/device/radio/headset/headset_srv
@@ -217,6 +218,14 @@ Janitor
minimal_access = list(access_janitor, access_maint_tunnels)
/datum/job/janitor/equip_items(var/mob/living/carbon/human/H)
+ janitors += 1
+
+ if(H.backbag != 1)
+ switch(janitors)
+ if(1)
+ H.equip_to_slot_or_del(new /obj/item/key/janitor(H), slot_in_backpack)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/soap/deluxe(H), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes)
@@ -236,7 +245,7 @@ Librarian
default_pda = /obj/item/device/pda/librarian
- access = list(access_library, access_maint_tunnels)
+ access = list(access_library)
minimal_access = list(access_library)
/datum/job/librarian/equip_items(var/mob/living/carbon/human/H)
@@ -264,7 +273,7 @@ Lawyer
default_pda = /obj/item/device/pda/lawyer
default_headset = /obj/item/device/radio/headset/headset_sec
- access = list(access_lawyer, access_court, access_sec_doors, access_maint_tunnels)
+ access = list(access_lawyer, access_court, access_sec_doors)
minimal_access = list(access_lawyer, access_court, access_sec_doors)
/datum/job/lawyer/equip_items(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index b68e514ef6e..26225a71971 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -15,7 +15,7 @@ Chaplain
default_pda = /obj/item/device/pda/chaplain
- access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
+ access = list(access_morgue, access_chapel_office, access_crematorium)
minimal_access = list(access_morgue, access_chapel_office, access_crematorium)
//Pretty bible names
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index d58aff0ac06..8c8c69ce873 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -63,14 +63,14 @@ Station Engineer
default_satchel = /obj/item/weapon/storage/backpack/satchel_eng
default_storagebox = /obj/item/weapon/storage/box/engineer
- access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
+ access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_external_airlocks, access_construction, access_atmospherics, access_tcomsat)
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_external_airlocks, access_construction, access_tcomsat)
/datum/job/engineer/equip_items(var/mob/living/carbon/human/H)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/orange(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/device/t_scanner(H), slot_r_store)
@@ -94,7 +94,7 @@ Atmospheric Technician
default_headset = /obj/item/device/radio/headset/headset_eng
default_storagebox = /obj/item/weapon/storage/box/engineer
- access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
+ access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
access_external_airlocks, access_construction, access_atmospherics)
minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 5c2d1ecff74..6e11a228224 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -57,7 +57,7 @@ Medical Doctor
default_backpack = /obj/item/weapon/storage/backpack/medic
default_satchel = /obj/item/weapon/storage/backpack/satchel_med
- access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
+ access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom)
minimal_access = list(access_medical, access_morgue, access_surgery)
/datum/job/doctor/equip_items(var/mob/living/carbon/human/H)
@@ -109,7 +109,7 @@ Geneticist
default_pda = /obj/item/device/pda/geneticist
default_headset = /obj/item/device/radio/headset/headset_medsci
- access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
+ access = list(access_medical, access_morgue, access_chemistry, access_virology, access_genetics, access_research, access_xenobiology, access_robotics, access_mineral_storeroom, access_tech_storage)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
/datum/job/geneticist/equip_items(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 99908da4248..1d0f43c62e3 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -57,7 +57,7 @@ Scientist
default_pda = /obj/item/device/pda/toxins
default_headset = /obj/item/device/radio/headset/headset_sci
- access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom)
+ access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage, access_genetics)
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom)
/datum/job/scientist/equip_items(var/mob/living/carbon/human/H)
@@ -82,7 +82,7 @@ Roboticist
default_pda = /obj/item/device/pda/roboticist
default_headset = /obj/item/device/radio/headset/headset_sci
- access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom)
+ access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom, access_xenobiology, access_genetics)
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_mineral_storeroom)
/datum/job/roboticist/equip_items(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index a5323296e6b..d704935fca8 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -75,7 +75,7 @@ Warden
default_backpack = /obj/item/weapon/storage/backpack/security
default_satchel = /obj/item/weapon/storage/backpack/satchel_sec
- access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons)
+ access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons) //See /datum/job/warden/get_access()
/datum/job/warden/equip_items(var/mob/living/carbon/human/H)
@@ -121,7 +121,7 @@ Detective
default_pda = /obj/item/device/pda/detective
default_headset = /obj/item/device/radio/headset/headset_sec
- access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons)
+ access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons, access_brig, access_security)
minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons)
/datum/job/detective/equip_items(var/mob/living/carbon/human/H)
@@ -171,7 +171,7 @@ Security Officer
default_backpack = /obj/item/weapon/storage/backpack/security
default_satchel = /obj/item/weapon/storage/backpack/satchel_sec
- access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons)
+ access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_weapons) //But see /datum/job/warden/get_access()
/datum/job/officer/equip_items(var/mob/living/carbon/human/H)
diff --git a/code/game/jobs/job/supply.dm b/code/game/jobs/job/supply.dm
index 38710b0738e..f61b4a08f74 100644
--- a/code/game/jobs/job/supply.dm
+++ b/code/game/jobs/job/supply.dm
@@ -15,8 +15,8 @@ Quartermaster
default_pda = /obj/item/device/pda/quartermaster
default_headset = /obj/item/device/radio/headset/headset_cargo
- access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom)
- minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
+ access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
+ minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
/datum/job/qm/equip_items(var/mob/living/carbon/human/H)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
@@ -41,7 +41,7 @@ Cargo Technician
default_pda = /obj/item/device/pda/cargo
default_headset = /obj/item/device/radio/headset/headset_cargo
- access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
+ access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
/datum/job/cargo_tech/equip_items(var/mob/living/carbon/human/H)
@@ -68,8 +68,8 @@ Shaft Miner
default_satchel = /obj/item/weapon/storage/backpack/satchel_eng
default_storagebox = /obj/item/weapon/storage/box/engineer
- access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station, access_mineral_storeroom)
- minimal_access = list(access_mining, access_mint, access_mining_station, access_mailsorting, access_mineral_storeroom)
+ access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom)
+ minimal_access = list(access_mining, access_mining_station, access_mailsorting, access_mineral_storeroom)
/datum/job/mining/equip_items(var/mob/living/carbon/human/H)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm
index 45c7aad316d..17051973fc4 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -222,6 +222,7 @@ text("[on ? "On" : "Off"]"))
target_types += /obj/effect/decal/cleanable/xenoblood/xgibs
target_types += /obj/effect/decal/cleanable/blood/
target_types += /obj/effect/decal/cleanable/blood/gibs/
+ target_types += /obj/effect/decal/cleanable/blood/drip/
target_types += /obj/effect/decal/cleanable/trail_holder
/obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index b7e7b31d012..6c1586348e8 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -218,8 +218,8 @@
src.occupant.adjustBrainLoss(-((speed_coeff/2)))
//So clones don't die of oxyloss in a running pod.
- if (src.occupant.reagents.get_reagent_amount("epinephrine") < 30)
- src.occupant.reagents.add_reagent("epinephrine", 60)
+ if (src.occupant.reagents.get_reagent_amount("salbutamol") < 30)
+ src.occupant.reagents.add_reagent("salbutamol", 60)
use_power(7500) //This might need tweaking.
return
@@ -408,4 +408,4 @@
A:malfunction()
*/
-#undef CLONE_INITIAL_DAMAGE
\ No newline at end of file
+#undef CLONE_INITIAL_DAMAGE
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 5badb4c9f9f..601bde71545 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -227,12 +227,6 @@
for(var/item in holographic_items)
derez(item)
- for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
- qdel(B)
-
- for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck)
- qdel(C)
-
holographic_items = A.copy_contents_to(linkedholodeck , 1)
if(emagged)
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 2a2ca4b908e..7f1f9bdb3ed 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -27,7 +27,9 @@
/obj/item/toy/cards/deck = 2,
/obj/item/toy/nuke = 2,
/obj/item/toy/minimeteor = 2,
- /obj/item/toy/carpplushie = 2
+ /obj/item/toy/carpplushie = 2,
+ /obj/item/toy/foamblade = 2,
+ /obj/item/toy/redbutton = 2
)
/obj/machinery/computer/arcade/New()
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index d673cf214a5..45e0278b5df 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -32,11 +32,11 @@
if(..())
return
var/dat
- if (src.temp)
+ if(src.temp)
dat = text("[src.temp]
Clear Screen")
else
dat = text("Confirm Identity: []
", src, (src.scan ? text("[]", src.scan.name) : "----------"))
- if (src.authenticated)
+ if(src.authenticated)
switch(src.screen)
if(1.0)
dat += {"
@@ -73,7 +73,7 @@
var/blood_type = ""
var/b_dna = ""
for(var/datum/data/record/E in data_core.medical)
- if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
+ if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
blood_type = E.fields["blood_type"]
b_dna = E.fields["b_dna"]
var/background
@@ -105,10 +105,20 @@
dat += "| Medical Record |
"
if(active1 in data_core.general)
- dat += "| Name: | [active1.fields["name"]] |
"
+ if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P1 = active1.fields["photo_front"]
+ user << browse_rsc(P1.img, "photo_front")
+ if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P2 = active1.fields["photo_side"]
+ user << browse_rsc(P2.img, "photo_side")
+ dat += "| Name: | [active1.fields["name"]] | "
+ dat += " | "
+ dat += " |
"
dat += "| ID: | [active1.fields["id"]] |
"
dat += "| Sex: | [active1.fields["sex"]] |
"
dat += "| Age: | [active1.fields["age"]] |
"
+ if(config.mutant_races)
+ dat += "| Species: | [active1.fields["species"]] |
"
dat += "| Fingerprint: | [active1.fields["fingerprint"]] |
"
dat += "| Physical Status: | [active1.fields["p_stat"]] |
"
dat += "| Mental Status: | [active1.fields["m_stat"]] |
"
@@ -185,33 +195,34 @@
return
/obj/machinery/computer/med_data/Topic(href, href_list)
- if(..())
- return
+ . = ..()
+ if(.)
+ return .
if(!(active1 in data_core.general))
src.active1 = null
if(!(active2 in data_core.medical))
src.active2 = null
- if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
+ if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
- if (href_list["temp"])
+ if(href_list["temp"])
src.temp = null
- if (href_list["scan"])
- if (src.scan)
+ if(href_list["scan"])
+ if(src.scan)
src.scan.loc = src.loc
src.scan = null
else
var/obj/item/I = usr.get_active_hand()
- if (istype(I, /obj/item/weapon/card/id))
+ if(istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
src.scan = I
- else if (href_list["logout"])
+ else if(href_list["logout"])
src.authenticated = null
src.screen = null
src.active1 = null
src.active2 = null
- else if (href_list["choice"])
+ else if(href_list["choice"])
// SORTING!
if(href_list["choice"] == "Sorting")
// Reverse the order if clicked twice
@@ -224,21 +235,21 @@
// New sorting order!
sortBy = href_list["sort"]
order = initial(order)
- else if (href_list["login"])
- if (istype(usr, /mob/living/silicon))
+ else if(href_list["login"])
+ if(istype(usr, /mob/living/silicon))
src.active1 = null
src.active2 = null
src.authenticated = 1
src.rank = "AI"
src.screen = 1
- else if (istype(src.scan, /obj/item/weapon/card/id))
+ else if(istype(src.scan, /obj/item/weapon/card/id))
src.active1 = null
src.active2 = null
- if (src.check_access(src.scan))
+ if(src.check_access(src.scan))
src.authenticated = src.scan.registered_name
src.rank = src.scan.assignment
src.screen = 1
- if (src.authenticated)
+ if(src.authenticated)
if(href_list["screen"])
src.screen = text2num(href_list["screen"])
@@ -264,88 +275,94 @@
Severity: [Dis.severity]"}
- else if (href_list["del_all"])
+ else if(href_list["del_all"])
src.temp = text("Are you sure you wish to delete all records?
\n\tYes
\n\tNo
", src, src)
- else if (href_list["del_all2"])
+ else if(href_list["del_all2"])
investigate_log("[usr.name] ([usr.key]) has deleted all medical records.", "records")
data_core.medical.Cut()
src.temp = "All records deleted."
- else if (href_list["field"])
+ else if(href_list["field"])
var/a1 = src.active1
var/a2 = src.active2
switch(href_list["field"])
if("fingerprint")
if(active1)
- var/t1 = copytext(sanitize(input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
+ var/t1 = stripped_input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, a1))
return
src.active1.fields["fingerprint"] = t1
if("sex")
if(active1)
- if (src.active1.fields["sex"] == "Male")
+ if(src.active1.fields["sex"] == "Male")
src.active1.fields["sex"] = "Female"
else
src.active1.fields["sex"] = "Male"
if("age")
if(active1)
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
+ if(!canUseMedicalRecordsConsole(usr, t1, a1))
return
src.active1.fields["age"] = t1
+ if("species")
+ if(active1)
+ var/t1 = stripped_input("Please input species name", "Med. records", src.active1.fields["species"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, a1))
+ return
+ active1.fields["species"] = t1
if("mi_dis")
if(active2)
- var/t1 = copytext(sanitize(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["mi_dis"] = t1
if("mi_dis_d")
if(active2)
- var/t1 = copytext(sanitize(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_multiline_input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["mi_dis_d"] = t1
if("ma_dis")
if(active2)
- var/t1 = copytext(sanitize(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["ma_dis"] = t1
if("ma_dis_d")
if(active2)
- var/t1 = copytext(sanitize(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_multiline_input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["ma_dis_d"] = t1
if("alg")
if(active2)
- var/t1 = copytext(sanitize(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_input("Please state allergies:", "Med. records", src.active2.fields["alg"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["alg"] = t1
if("alg_d")
if(active2)
- var/t1 = copytext(sanitize(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_multiline_input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["alg_d"] = t1
if("cdi")
if(active2)
- var/t1 = copytext(sanitize(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["cdi"] = t1
if("cdi_d")
if(active2)
- var/t1 = copytext(sanitize(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_multiline_input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["cdi_d"] = t1
if("notes")
if(active2)
- var/t1 = copytext(sanitize(input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_multiline_input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["notes"] = t1
if("p_stat")
@@ -359,13 +376,25 @@
src.temp = text("Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
", src, src, src, src, src, src, src, src)
if("b_dna")
if(active2)
- var/t1 = copytext(sanitize(input("Please input DNA hash:", "Med. records", src.active2.fields["b_dna"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_input("Please input DNA hash:", "Med. records", src.active2.fields["b_dna"], null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
src.active2.fields["b_dna"] = t1
+ if("show_photo_front")
+ if(active1)
+ if(active1.fields["photo_front"])
+ if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P = active1.fields["photo_front"]
+ P.show(usr)
+ if("show_photo_side")
+ if(active1)
+ if(active1.fields["photo_side"])
+ if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P = active1.fields["photo_side"]
+ P.show(usr)
else
- else if (href_list["p_stat"])
+ else if(href_list["p_stat"])
if(active1)
switch(href_list["p_stat"])
if("deceased")
@@ -377,7 +406,7 @@
if("unfit")
src.active1.fields["p_stat"] = "Physically Unfit"
- else if (href_list["m_stat"])
+ else if(href_list["m_stat"])
if(active1)
switch(href_list["m_stat"])
if("insane")
@@ -390,7 +419,7 @@
src.active1.fields["m_stat"] = "Stable"
- else if (href_list["blood_type"])
+ else if(href_list["blood_type"])
if(active2)
switch(href_list["blood_type"])
if("an")
@@ -411,17 +440,17 @@
src.active2.fields["blood_type"] = "O+"
- else if (href_list["del_r"])
+ else if(href_list["del_r"])
if(active2)
src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
", src, src)
- else if (href_list["del_r2"])
+ else if(href_list["del_r2"])
investigate_log("[usr.name] ([usr.key]) has deleted the medical records for [active1.fields["name"]].", "records")
if(active2)
data_core.medical -= active2
active2 = null
- else if (href_list["d_rec"])
+ else if(href_list["d_rec"])
active1 = find_record("id", href_list["d_rec"], data_core.general)
if(active1)
active2 = find_record("id", href_list["d_rec"], data_core.medical)
@@ -429,8 +458,8 @@
active1 = null
screen = 4
- else if (href_list["new"])
- if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) )))
+ else if(href_list["new"])
+ if((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) )))
var/datum/data/record/R = new /datum/data/record( )
R.fields["name"] = src.active1.fields["name"]
R.fields["id"] = src.active1.fields["id"]
@@ -450,46 +479,46 @@
src.active2 = R
src.screen = 4
- else if (href_list["add_c"])
+ else if(href_list["add_c"])
if(!(active2 in data_core.medical))
return
var/a2 = src.active2
- var/t1 = copytext(sanitize(input("Add Comment:", "Med. records", null, null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
+ var/t1 = stripped_multiline_input("Add Comment:", "Med. records", null, null)
+ if(!canUseMedicalRecordsConsole(usr, t1, null, a2))
return
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
counter++
src.active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
- else if (href_list["del_c"])
- if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
+ else if(href_list["del_c"])
+ if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted"
- else if (href_list["search"])
+ else if(href_list["search"])
var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records")
- if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!in_range(src, usr)) && (!istype(usr, /mob/living/silicon)))))
+ if(!canUseMedicalRecordsConsole(usr, t1))
return
src.active1 = null
src.active2 = null
t1 = lowertext(t1)
for(var/datum/data/record/R in data_core.medical)
- if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
+ if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
src.active2 = R
else
//Foreach continue //goto(3229)
- if (!( src.active2 ))
+ if(!( src.active2 ))
src.temp = text("Could not locate record [].", t1)
else
for(var/datum/data/record/E in data_core.general)
- if ((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
+ if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
src.active1 = E
else
//Foreach continue //goto(3334)
src.screen = 4
- else if (href_list["print_p"])
- if (!( src.printing ))
+ else if(href_list["print_p"])
+ if(!( src.printing ))
src.printing = 1
data_core.medicalPrintCount++
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
@@ -497,7 +526,10 @@
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
P.info = "Medical Record - (MR-[data_core.medicalPrintCount])
"
if(active1 in data_core.general)
- P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"], src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"])
+ P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", src.active1.fields["name"], src.active1.fields["id"], src.active1.fields["sex"], src.active1.fields["age"])
+ if(config.mutant_races)
+ P.info += "\nSpecies: [active1.fields["species"]]
"
+ P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", src.active1.fields["fingerprint"], src.active1.fields["p_stat"], src.active1.fields["m_stat"])
else
P.info += "General Record Lost!
"
if(active2 in data_core.medical)
@@ -545,6 +577,15 @@
..(severity)
+/obj/machinery/computer/med_data/proc/canUseMedicalRecordsConsole(mob/user, message = 1, record1, record2)
+ if(user)
+ if(message)
+ if(authenticated)
+ if(user.canUseTopic(src))
+ if(!record1 || record1 == active1)
+ if(!record2 || record2 == active2)
+ return 1
+ return 0
/obj/machinery/computer/med_data/laptop
name = "medical laptop"
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 6b4d124790f..480c87c5965 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -36,16 +36,16 @@
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
if(..())
return
- if (src.z > 6)
+ if(src.z > 6)
user << "Unable to establish a connection: \black You're too far away from the station!"
return
var/dat
- if (temp)
+ if(temp)
dat = text("[]
Clear Screen", temp, src)
else
dat = text("Confirm Identity: []
", src, (scan ? text("[]", scan.name) : "----------"))
- if (authenticated)
+ if(authenticated)
switch(screen)
if(1.0)
@@ -122,7 +122,7 @@
for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
var/crimstat = ""
for(var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"]))
+ if((E.fields["name"] == R.fields["name"]) && (E.fields["id"] == R.fields["id"]))
crimstat = E.fields["criminal"]
var/background
switch(crimstat)
@@ -159,21 +159,34 @@
dat += "
Delete All Records
Back"
if(3.0)
dat += "Security Record
"
- if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- dat += {"
+ if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
+ if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P1 = active1.fields["photo_front"]
+ user << browse_rsc(P1.img, "photo_front")
+ if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P2 = active1.fields["photo_side"]
+ user << browse_rsc(P2.img, "photo_side")
+ dat += {"
+ |
+ |
"}
else
- dat += "General Record Lost!
"
- if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
- dat += "
Security Data"
+ dat += "
General Record Lost!
"
+ if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
+ dat += "Security Data"
dat += "
Criminal Status: [active2.fields["criminal"]]"
dat += "
Minor Crimes: Add New"
@@ -244,13 +257,14 @@
I can't be bothered to look more of the actual code outside of switch but that probably needs revising too.
What a mess.*/
/obj/machinery/computer/secure_data/Topic(href, href_list)
- if(..())
- return
- if (!( data_core.general.Find(active1) ))
+ . = ..()
+ if(.)
+ return .
+ if(!( data_core.general.Find(active1) ))
active1 = null
- if (!( data_core.security.Find(active2) ))
+ if(!( data_core.security.Find(active2) ))
active2 = null
- if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
+ if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
switch(href_list["choice"])
// SORTING!
@@ -269,13 +283,13 @@ What a mess.*/
if("Clear Screen")
temp = null
- if ("Return")
+ if("Return")
screen = 1
active1 = null
active2 = null
if("Confirm Identity")
- if (scan)
+ if(scan)
if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
usr.put_in_hands(scan)
else
@@ -283,7 +297,7 @@ What a mess.*/
scan = null
else
var/obj/item/I = usr.get_active_hand()
- if (istype(I, /obj/item/weapon/card/id))
+ if(istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
scan = I
@@ -295,14 +309,14 @@ What a mess.*/
active2 = null
if("Log In")
- if (istype(usr, /mob/living/silicon))
+ if(istype(usr, /mob/living/silicon))
var/mob/living/silicon/borg = usr
active1 = null
active2 = null
authenticated = borg.name
rank = "AI"
screen = 1
- else if (istype(scan, /obj/item/weapon/card/id))
+ else if(istype(scan, /obj/item/weapon/card/id))
active1 = null
active2 = null
if(check_access(scan))
@@ -315,50 +329,53 @@ What a mess.*/
active1 = null
active2 = null
- if ("Browse Record")
+ if("Browse Record")
var/datum/data/record/R = locate(href_list["d_rec"])
var/S = locate(href_list["d_rec"])
- if (!( data_core.general.Find(R) ))
+ if(!( data_core.general.Find(R) ))
temp = "Record Not Found!"
else
for(var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
+ if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
S = E
active1 = R
active2 = S
screen = 3
-/* if ("Search Fingerprints")
+/* if("Search Fingerprints")
var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text
- if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
+ if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!in_range(src, usr)) && (!istype(usr, /mob/living/silicon))))
return
active1 = null
active2 = null
t1 = lowertext(t1)
for(var/datum/data/record/R in data_core.general)
- if (lowertext(R.fields["fingerprint"]) == t1)
+ if(lowertext(R.fields["fingerprint"]) == t1)
active1 = R
- if (!( active1 ))
+ if(!( active1 ))
temp = text("Could not locate record [].", t1)
else
for(var/datum/data/record/E in data_core.security)
- if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
+ if((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
active2 = E
screen = 3 */
- if ("Print Record")
- if (!( printing ))
+ if("Print Record")
+ if(!( printing ))
printing = 1
data_core.securityPrintCount++
playsound(loc, 'sound/items/poster_being_created.ogg', 100, 1)
sleep(30)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
P.info = "Security Record - (SR-[data_core.securityPrintCount])
"
- if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
+ if((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
+ P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"])
+ if(config.mutant_races)
+ P.info += "\nSpecies: [active1.fields["species"]]
"
+ P.info += text("\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"])
else
P.info += "General Record Lost!
"
- if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
+ if((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
P.info += text("
\nSecurity Data
\nCriminal Status: []", active2.fields["criminal"])
P.info += "
\n
\nMinor Crimes:
\n"
@@ -406,49 +423,49 @@ What a mess.*/
P.info += ""
printing = null
//RECORD DELETE
- if ("Delete All Records")
+ if("Delete All Records")
temp = ""
temp += "Are you sure you wish to delete all Security records?
"
temp += "Yes
"
temp += "No"
- if ("Purge All Records")
+ if("Purge All Records")
investigate_log("[usr.name] ([usr.key]) has purged all the security records.", "records")
for(var/datum/data/record/R in data_core.security)
del(R)
data_core.security.Cut()
temp = "All Security records deleted."
- if ("Add Entry")
- if (!( istype(active2, /datum/data/record) ))
+ if("Add Entry")
+ if(!( istype(active2, /datum/data/record) ))
return
var/a2 = active2
- var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
+ var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
+ if(!canUseSecurityRecordsConsole(t1, usr, null, a2))
return
var/counter = 1
while(active2.fields[text("com_[]", counter)])
counter++
active2.fields[text("com_[]", counter)] = text("Made by [] ([]) on [] [], []
[]", src.authenticated, src.rank, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
- if ("Delete Record (ALL)")
- if (active1)
+ if("Delete Record (ALL)")
+ if(active1)
temp = "Are you sure you wish to delete the record (ALL)?
"
temp += "Yes
"
temp += "No"
- if ("Delete Record (Security)")
- if (active2)
+ if("Delete Record (Security)")
+ if(active2)
temp = "Are you sure you wish to delete the record (Security Portion Only)?
"
temp += "Yes
"
temp += "No"
- if ("Delete Entry")
- if ((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
+ if("Delete Entry")
+ if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
active2.fields[text("com_[]", href_list["del_c"])] = "Deleted"
//RECORD CREATE
- if ("New Record (Security)")
- if ((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
+ if("New Record (Security)")
+ if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
var/datum/data/record/R = new /datum/data/record()
R.fields["name"] = active1.fields["name"]
R.fields["id"] = active1.fields["id"]
@@ -461,7 +478,7 @@ What a mess.*/
active2 = R
screen = 3
- if ("New Record (General)")
+ if("New Record (General)")
//General Record
var/datum/data/record/G = new /datum/data/record()
G.fields["name"] = "New Record"
@@ -469,6 +486,10 @@ What a mess.*/
G.fields["rank"] = "Unassigned"
G.fields["sex"] = "Male"
G.fields["age"] = "Unknown"
+ if(config.mutant_races)
+ G.fields["species"] = "Human"
+ G.fields["photo_front"] = new /icon()
+ G.fields["photo_side"] = new /icon()
G.fields["fingerprint"] = "?????"
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
@@ -507,15 +528,15 @@ What a mess.*/
//FIELD FUNCTIONS
- if ("Edit Field")
+ if("Edit Field")
var/a1 = active1
var/a2 = active2
switch(href_list["field"])
if("name")
- if (istype(active1, /datum/data/record) || istype(active2, /datum/data/record))
+ if(istype(active1, /datum/data/record) || istype(active2, /datum/data/record))
var/t1 = stripped_input(usr, "Please input name:", "Secure. records", active1.fields["name"], null)
- if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon)))) || active1 != a1)
+ if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
return
if(istype(active1, /datum/data/record))
active1.fields["name"] = t1
@@ -523,67 +544,93 @@ What a mess.*/
active2.fields["name"] = t1
if("id")
if(istype(active2,/datum/data/record) || istype(active1,/datum/data/record))
- var/t1 = copytext(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
+ var/t1 = stripped_input(usr, "Please input id:", "Secure. records", active1.fields["id"], null)
+ if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
return
if(istype(active1,/datum/data/record))
active1.fields["id"] = t1
if(istype(active2,/datum/data/record))
active2.fields["id"] = t1
if("fingerprint")
- if (istype(active1, /datum/data/record))
- var/t1 = copytext(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
+ if(istype(active1, /datum/data/record))
+ var/t1 = stripped_input(usr, "Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null)
+ if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
return
active1.fields["fingerprint"] = t1
if("sex")
- if (istype(active1, /datum/data/record))
- if (active1.fields["sex"] == "Male")
+ if(istype(active1, /datum/data/record))
+ if(active1.fields["sex"] == "Male")
active1.fields["sex"] = "Female"
else
active1.fields["sex"] = "Male"
if("age")
- if (istype(active1, /datum/data/record))
- var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active1 != a1))
+ if(istype(active1, /datum/data/record))
+ var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
+ if(!canUseSecurityRecordsConsole(usr, null, null, a1) || !t1)
return
active1.fields["age"] = t1
+ if("species")
+ if(istype(active1, /datum/data/record))
+ var/t1 = input("Select a species", "Species Selection") as null|anything in roundstart_species
+ if(!canUseSecurityRecordsConsole(usr, t1, null, a1))
+ return
+ active1.fields["species"] = t1
+ if("show_photo_front")
+ if(active1.fields["photo_front"])
+ if(istype(active1.fields["photo_front"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P = active1.fields["photo_front"]
+ P.show(usr)
+ if("upd_photo_front")
+ var/icon/photo = get_photo(usr)
+ if(photo)
+ qdel(active1.fields["photo_front"])
+ active1.fields["photo_front"] = photo
+ if("show_photo_side")
+ if(active1.fields["photo_side"])
+ if(istype(active1.fields["photo_side"], /obj/item/weapon/photo))
+ var/obj/item/weapon/photo/P = active1.fields["photo_side"]
+ P.show(usr)
+ if("upd_photo_side")
+ var/icon/photo = get_photo(usr)
+ if(photo)
+ qdel(active1.fields["photo_side"])
+ active1.fields["photo_side"] = photo
if("mi_crim_add")
- if (istype(active1, /datum/data/record))
- var/t1 = copytext(sanitize(input("Please input minor crime names:", "Secure. records", "", null) as text),1,MAX_MESSAGE_LEN)
- var/t2 = copytext(sanitize(input("Please input minor crime details:", "Secure. records", "", null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( t2 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
+ if(istype(active1, /datum/data/record))
+ var/t1 = stripped_input(usr, "Please input minor crime names:", "Secure. records", "", null)
+ var/t2 = stripped_multiline_input(usr, "Please input minor crime details:", "Secure. records", "", null)
+ if(!canUseSecurityRecordsConsole(usr, t1, t2, null, a2))
return
var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
data_core.addMinorCrime(active1.fields["id"], crime)
if("mi_crim_delete")
- if (istype(active1, /datum/data/record))
- if (href_list["cdataid"])
- if ((!( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
+ if(istype(active1, /datum/data/record))
+ if(href_list["cdataid"])
+ if(!canUseSecurityRecordsConsole(usr, null, null, a2))
return
data_core.removeMinorCrime(active1.fields["id"], href_list["cdataid"])
if("ma_crim_add")
- if (istype(active1, /datum/data/record))
- var/t1 = copytext(sanitize(input("Please input major crime names:", "Secure. records", "", null) as text),1,MAX_MESSAGE_LEN)
- var/t2 = copytext(sanitize(input("Please input major crime details:", "Secure. records", "", null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( t2 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
+ if(istype(active1, /datum/data/record))
+ var/t1 = stripped_input(usr, "Please input major crime names:", "Secure. records", "", null)
+ var/t2 = stripped_multiline_input(usr, "Please input major crime details:", "Secure. records", "", null)
+ if(!canUseSecurityRecordsConsole(usr, t1, t2, a2))
return
var/crime = data_core.createCrimeEntry(t1, t2, authenticated, worldtime2text())
data_core.addMajorCrime(active1.fields["id"], crime)
if("ma_crim_delete")
- if (istype(active1, /datum/data/record))
- if (href_list["cdataid"])
- if ((!( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
+ if(istype(active1, /datum/data/record))
+ if(href_list["cdataid"])
+ if(!canUseSecurityRecordsConsole(usr, null, null, a2))
return
data_core.removeMajorCrime(active1.fields["id"], href_list["cdataid"])
if("notes")
- if (istype(active2, /datum/data/record))
- var/t1 = copytext(sanitize(input("Please summarize notes:", "Secure. records", active2.fields["notes"], null) as message),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
+ if(istype(active2, /datum/data/record))
+ var/t1 = stripped_input(usr, "Please summarize notes:", "Secure. records", active2.fields["notes"], null)
+ if(!canUseSecurityRecordsConsole(usr, t1, null, a2))
return
active2.fields["notes"] = t1
if("criminal")
- if (istype(active2, /datum/data/record))
+ if(istype(active2, /datum/data/record))
temp = "Criminal Status:
"
temp += ""
temp += "- None
"
@@ -595,7 +642,7 @@ What a mess.*/
if("rank")
var/list/L = list( "Head of Personnel", "Captain", "AI" )
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
- if ((istype(active1, /datum/data/record) && L.Find(rank)))
+ if((istype(active1, /datum/data/record) && L.Find(rank)))
temp = "Rank:
"
temp += ""
for(var/rank in get_all_jobs())
@@ -607,14 +654,14 @@ What a mess.*/
else//To properly clear as per clear screen.
temp=null
switch(href_list["choice"])
- if ("Change Rank")
- if (active1)
+ if("Change Rank")
+ if(active1)
active1.fields["rank"] = href_list["rank"]
if(href_list["rank"] in get_all_jobs())
active1.fields["real_rank"] = href_list["real_rank"]
- if ("Change Criminal Status")
- if (active2)
+ if("Change Criminal Status")
+ if(active2)
var/old_field = active2.fields["criminal"]
switch(href_list["criminal2"])
if("none")
@@ -630,24 +677,24 @@ What a mess.*/
investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [usr.name] ([usr.key]).", "records")
for(var/mob/living/carbon/human/H in mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system
H.sec_hud_set_security_status()
- if ("Delete Record (Security) Execute")
+ if("Delete Record (Security) Execute")
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", "records")
- if (active2)
+ if(active2)
data_core.security -= active2
del(active2)
- if ("Delete Record (ALL) Execute")
- if (active1)
+ if("Delete Record (ALL) Execute")
+ if(active1)
investigate_log("[usr.name] ([usr.key]) has deleted all records for [active1.fields["name"]].", "records")
for(var/datum/data/record/R in data_core.medical)
- if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
+ if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
data_core.medical -= R
del(R)
break
data_core.general -= active1
del(active1)
- if (active2)
+ if(active2)
data_core.security -= active2
del(active2)
else
@@ -657,6 +704,18 @@ What a mess.*/
updateUsrDialog()
return
+/obj/machinery/computer/secure_data/proc/get_photo(var/mob/user)
+ var/obj/item/weapon/photo/P = null
+ if(istype(user, /mob/living/silicon))
+ var/mob/living/silicon/tempAI = user
+ var/datum/picture/selection = tempAI.GetPhoto()
+ if(selection)
+ P = new()
+ P.photocreate(selection.fields["icon"], selection.fields["img"], selection.fields["desc"])
+ else if(istype(user.get_active_hand(), /obj/item/weapon/photo))
+ P = user.get_active_hand()
+ return P
+
/obj/machinery/computer/secure_data/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
..(severity)
@@ -664,11 +723,11 @@ What a mess.*/
for(var/datum/data/record/R in data_core.security)
if(prob(10/severity))
- switch(rand(1,6))
+ switch(rand(1,8))
if(1)
R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]"
if(2)
- R.fields["sex"] = pick("Male", "Female")
+ R.fields["sex"] = pick("Male", "Female")
if(3)
R.fields["age"] = rand(5, 85)
if(4)
@@ -677,6 +736,12 @@ What a mess.*/
R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit")
if(6)
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
+ if(7)
+ R.fields["species"] = pick(roundstart_species)
+ if(8)
+ var/datum/data/record/G = pick(data_core.general)
+ R.fields["photo_front"] = G.fields["photo_front"]
+ R.fields["photo_side"] = G.fields["photo_side"]
continue
else if(prob(1))
@@ -685,6 +750,17 @@ What a mess.*/
..(severity)
+/obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 1, message2 = 1, record1, record2)
+ if(user)
+ if(trim(message1))
+ if(trim(message2))
+ if(authenticated)
+ if(user.canUseTopic(src))
+ if(!record1 || record1 == active1)
+ if(!record2 || record2 == active2)
+ return 1
+ return 0
+
/obj/machinery/computer/secure_data/detective_computer
icon = 'icons/obj/computer.dmi'
icon_state = "messyfiles"
diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm
index 33da8023ba8..74cb6d384c9 100644
--- a/code/game/machinery/computer/shuttle.dm
+++ b/code/game/machinery/computer/shuttle.dm
@@ -138,6 +138,11 @@
var/can_order_contraband = 0
var/last_viewed_group = "categories"
+/obj/machinery/computer/supplycomp/New()
+ ..()
+
+ var/obj/item/weapon/circuitboard/supplycomp/board = circuit
+ can_order_contraband = board.contraband_enabled
/obj/machinery/computer/ordercomp
name = "supply ordering console"
diff --git a/code/game/machinery/computer/syndicate_shuttle.dm b/code/game/machinery/computer/syndicate_shuttle.dm
index e29a50bd117..d13bef052f8 100644
--- a/code/game/machinery/computer/syndicate_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_shuttle.dm
@@ -9,3 +9,10 @@
/obj/machinery/computer/shuttle/syndicate/recall
name = "syndicate shuttle recall terminal"
possible_destinations = "syndicate_away"
+
+/obj/machinery/computer/shuttle/syndicate/whiteship
+ name = "ship control terminal"
+ icon_state = "shuttle"
+ shuttleId = "whiteship"
+ req_access = list( )
+ possible_destinations = "whiteship_ss13;whiteship_home;whiteship_z4"
\ No newline at end of file
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index d90968524f0..b0f83365b21 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -84,12 +84,26 @@
open_machine()
/obj/machinery/atmospherics/unary/cryo_cell/container_resist()
- if(stat & DEAD)
- return
- sleep(usr.stat * 1200)
open_machine()
return
+/obj/machinery/atmospherics/unary/cryo_cell/verb/move_eject()
+ set name = "Eject Cryo Cell"
+ set desc = "Begin the release sequence inside the cryo tube."
+ set category = "Object"
+ set src in oview(1)
+ if(usr == occupant || contents.Find(usr)) //If the user is inside the tube...
+ if(usr.stat == DEAD) //and he's not dead....
+ return
+ usr << "Release sequence activated. This will take about a minute."
+ sleep(600)
+ if(!src || !usr || (!occupant && !contents.Find(usr))) //Check if someone's released/replaced/bombed him already
+ return
+ open_machine()
+ add_fingerprint(usr)
+ else
+ open_machine()
+
/obj/machinery/atmospherics/unary/cryo_cell/examine(mob/user)
..()
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
new file mode 100644
index 00000000000..c7f6c54dae6
--- /dev/null
+++ b/code/game/machinery/iv_drip.dm
@@ -0,0 +1,203 @@
+/obj/machinery/iv_drip
+ name = "\improper IV drip"
+ icon = 'icons/obj/iv_drip.dmi'
+ icon_state = "iv_drip"
+ anchored = 0
+ density = 1
+ var/mob/living/carbon/human/attached = null
+ var/mode = 1 // 1 is injecting, 0 is taking blood.
+ var/obj/item/weapon/reagent_containers/beaker = null
+
+
+/obj/machinery/iv_drip/New()
+ ..()
+ update_icon()
+
+/obj/machinery/iv_drip/update_icon()
+ if(src.attached)
+ if(mode)
+ icon_state = "injecting"
+ else
+ icon_state = "donating"
+ else
+ if(mode)
+ icon_state = "injectidle"
+ else
+ icon_state = "donateidle"
+
+ overlays = null
+
+ if(beaker)
+ if(attached)
+ overlays += "beakeractive"
+ else
+ overlays += "beakeridle"
+ if(beaker.reagents.total_volume)
+ var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent")
+
+ var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100)
+ switch(percent)
+ if(0 to 9) filling.icon_state = "reagent0"
+ if(10 to 24) filling.icon_state = "reagent10"
+ if(25 to 49) filling.icon_state = "reagent25"
+ if(50 to 74) filling.icon_state = "reagent50"
+ if(75 to 79) filling.icon_state = "reagent75"
+ if(80 to 90) filling.icon_state = "reagent80"
+ if(91 to INFINITY) filling.icon_state = "reagent100"
+
+ filling.icon += mix_color_from_reagents(beaker.reagents.reagent_list)
+ overlays += filling
+
+/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location)
+ ..()
+
+ if(!ishuman(over_object))
+ usr << "The drip beeps: Warning, human patients only!"
+
+ if(attached)
+ visible_message("[src.attached] is detached from \the [src]")
+ src.attached = null
+ src.update_icon()
+ return
+
+ if(in_range(src, usr) && ishuman(over_object) && get_dist(over_object, src) <= 1)
+ if(src.beaker)
+ visible_message("[usr] attaches \the [src] to \the [over_object].")
+ src.attached = over_object
+ src.update_icon()
+ else
+ usr << "There's nothing attached to the IV drip!"
+
+
+/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (istype(W, /obj/item/weapon/reagent_containers))
+ if(!isnull(src.beaker))
+ user << "There is already a reagent container loaded!"
+ return
+
+ user.drop_item()
+ W.loc = src
+ src.beaker = W
+ user << "You attach \the [W] to \the [src]."
+ src.update_icon()
+ return
+ else
+ return ..()
+
+
+/obj/machinery/iv_drip/process()
+ set background = 1
+
+ if(src.attached)
+
+ if(!(get_dist(src, src.attached) <= 1 && isturf(src.attached.loc)))
+ attached << "The IV drip needle is ripped out of you, doesn't that hurt?"
+ src.attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
+ src.attached = null
+ src.update_icon()
+ return
+
+ if(src.attached && src.beaker)
+ // Give blood
+ if(mode)
+ if(src.beaker.volume > 0)
+ var/transfer_amount = REAGENTS_METABOLISM
+ if(istype(src.beaker, /obj/item/weapon/reagent_containers/blood))
+ // speed up transfer on blood packs
+ transfer_amount = 4
+ src.beaker.reagents.trans_to(src.attached, transfer_amount)
+ update_icon()
+
+ // Take blood
+ else
+ var/amount = beaker.reagents.maximum_volume - beaker.reagents.total_volume
+ amount = min(amount, 4)
+ // If the beaker is full, ping
+ if(amount == 0)
+ if(prob(5)) visible_message("\The [src] pings.")
+ return
+
+ var/mob/living/carbon/human/T = attached
+
+ if(!istype(T)) return
+ if(!T.dna)
+ return
+ if(NOCLONE in T.mutations)
+ return
+
+ if(NOBLOOD in T.dna.species.specflags)
+ return
+
+ // If the human is losing too much blood, beep.
+ if(T.vessel.get_reagent_amount("blood") < BLOOD_VOLUME_SAFE) if(prob(5))
+ visible_message("\The [src] beeps loudly.")
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
+ var/datum/reagent/B = T.take_blood(beaker,amount)
+
+ if (B)
+ beaker.reagents.reagent_list |= B
+ beaker.reagents.update_total()
+ beaker.on_reagent_change()
+ beaker.reagents.handle_reactions()
+ update_icon()
+
+/obj/machinery/iv_drip/attack_hand(mob/user)
+ if(src.attached)
+ visible_message("[src.attached] is detached from \the [src]")
+ src.attached = null
+ update_icon()
+ return
+ else if(src.beaker)
+ eject_beaker(user)
+ else
+ toggle_mode()
+
+/obj/machinery/iv_drip/verb/eject_beaker(mob/user)
+ set category = "Object"
+ set name = "Remove IV Container"
+ set src in view(1)
+
+ if(!istype(usr, /mob/living))
+ usr << "You can't do that."
+ return
+
+ if(usr.stat)
+ return
+
+ if(src.beaker)
+ src.beaker.loc = get_turf(src)
+ src.beaker = null
+ update_icon()
+
+/obj/machinery/iv_drip/verb/toggle_mode()
+ set category = "Object"
+ set name = "Toggle Mode"
+ set src in view(1)
+
+ if(!istype(usr, /mob/living))
+ usr << "You can't do that."
+ return
+
+ if(usr.stat)
+ return
+
+ mode = !mode
+ usr << "The IV drip is now [mode ? "injecting" : "taking blood"]."
+ update_icon()
+
+/obj/machinery/iv_drip/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+
+ usr << "The IV drip is [mode ? "injecting" : "taking blood"]."
+
+ if(beaker)
+ if(beaker.reagents && beaker.reagents.reagent_list.len)
+ usr << "Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid."
+ else
+ usr << "Attached is an empty [beaker]."
+ else
+ usr << "No chemicals are attached."
+
+ usr << "[attached ? attached : "No one"] is attached."
\ No newline at end of file
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index cd62f49c314..6c271656114 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -303,7 +303,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="Creating new Feed Message..."
dat+="
Receiving Channel: [src.channel_name]
" //MARK
dat+="Message Author: [src.scanned_user]
"
- dat+="Message Body: [src.msg]
"
+ dat+="Message Body:
[parsepencode(src.msg, user, SIGNFONT)]
"
dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]"
dat+="Comments [allow_comments ? "Enabled" : "Disabled"]
"
dat+="
Submit
Cancel
"
@@ -565,8 +565,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.updateUsrDialog()
else if(href_list["set_new_message"])
- src.msg = trim(stripped_input(usr, "Write your Feed story", "Network Channel Handler"))
- src.updateUsrDialog()
+ var/temp_message = trim(stripped_multiline_input(usr, "Write your Feed story", "Network Channel Handler", src.msg))
+ if(temp_message)
+ src.msg = temp_message
+ src.updateUsrDialog()
else if(href_list["set_attachment"])
AttachPhoto(usr)
@@ -576,9 +578,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(src.msg =="" || src.msg=="\[REDACTED\]" || src.scanned_user == "Unknown" || src.channel_name == "" )
src.screen=6
else
- news_network.SubmitArticle(msg, scanned_user, channel_name, photo, allow_comments)
+ news_network.SubmitArticle("[parsepencode(src.msg, usr, SIGNFONT)]", scanned_user, channel_name, photo, allow_comments)
feedback_inc("newscaster_stories",1)
src.screen=4
+ src.msg = ""
src.updateUsrDialog()
else if(href_list["create_channel"])
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 35ee5e7bad4..727c1617861 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -123,10 +123,6 @@
eprojectile = /obj/item/projectile/beam
eshot_sound = 'sound/weapons/Laser.ogg'
- if(/obj/item/weapon/gun/energy/stunrevolver)
- eprojectile = /obj/item/projectile/beam
- eshot_sound = 'sound/weapons/Laser.ogg'
-
if(/obj/item/weapon/gun/energy/gun)
eprojectile = /obj/item/projectile/beam //If it has, going to kill mode
eshot_sound = 'sound/weapons/Laser.ogg'
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 1e0c73fbfca..cf92f21046f 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -71,7 +71,7 @@
if(istype(charging, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = charging
if(E.power_supply.charge < E.power_supply.maxcharge)
- E.power_supply.give(100)
+ E.power_supply.give(E.power_supply.chargerate)
icon_state = "recharger1"
use_power(250)
else
@@ -80,7 +80,7 @@
if(istype(charging, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = charging
if(B.bcell)
- if(B.bcell.give(1500)) //Because otherwise it takes two minutes to fully charge due to 15k cells. - Neerti
+ if(B.bcell.give(B.bcell.chargerate))
icon_state = "recharger1"
use_power(200)
else
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index f5f968e5ff1..ff3f0fc4f5f 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -91,6 +91,9 @@
line1 = "-ETD-"
if(SHUTTLE_ESCAPE)
line1 = "-ESC-"
+ if(SHUTTLE_STRANDED)
+ line1 = "-ERR-"
+ line2 = "??:??"
if(length(line2) > CHARS_PER_LINE)
line2 = "Error!"
update_display(line1, line2)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 7fdef2fbeb4..16aac4c25cb 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -33,8 +33,8 @@
//The units themselves/////////////////
/obj/machinery/suit_storage_unit/standard_unit
- SUIT_TYPE = /obj/item/clothing/suit/space
- HELMET_TYPE = /obj/item/clothing/head/helmet/space
+ SUIT_TYPE = /obj/item/clothing/suit/space/eva
+ HELMET_TYPE = /obj/item/clothing/head/helmet/space/eva
MASK_TYPE = /obj/item/clothing/mask/breath
/obj/machinery/suit_storage_unit/captain
@@ -45,34 +45,28 @@
/obj/machinery/suit_storage_unit/engine
SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit
- HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit
MASK_TYPE = /obj/item/clothing/mask/breath
/obj/machinery/suit_storage_unit/ce
SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/elite
- HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/elite
MASK_TYPE = /obj/item/clothing/mask/breath
STORAGE_TYPE= /obj/item/clothing/shoes/magboots/advance
/obj/machinery/suit_storage_unit/security
SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/security
- HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/security
MASK_TYPE = /obj/item/clothing/mask/gas
/obj/machinery/suit_storage_unit/atmos
SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/atmos
- HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/atmos
MASK_TYPE = /obj/item/clothing/mask/gas
STORAGE_TYPE = /obj/item/weapon/watertank/atmos
/obj/machinery/suit_storage_unit/mining
SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/mining
- HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/mining
MASK_TYPE = /obj/item/clothing/mask/breath
/obj/machinery/suit_storage_unit/cmo
SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/medical
- HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/medical
MASK_TYPE = /obj/item/clothing/mask/breath
/obj/machinery/suit_storage_unit/syndicate
@@ -85,25 +79,25 @@
SUIT_TYPE = /obj/item/clothing/suit/space/ert
HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/ert
MASK_TYPE = /obj/item/clothing/mask/breath
- STORAGE_TYPE = /obj/item/weapon/tank/emergency_oxygen/double
+ STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double
/obj/machinery/suit_storage_unit/ertSec
SUIT_TYPE = /obj/item/clothing/suit/space/ert/sec
HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec
MASK_TYPE = /obj/item/clothing/mask/breath
- STORAGE_TYPE = /obj/item/weapon/tank/emergency_oxygen/double
+ STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double
/obj/machinery/suit_storage_unit/ertEngi
SUIT_TYPE = /obj/item/clothing/suit/space/ert/engi
HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi
MASK_TYPE = /obj/item/clothing/mask/breath
- STORAGE_TYPE = /obj/item/weapon/tank/emergency_oxygen/double
+ STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double
/obj/machinery/suit_storage_unit/ertMed
SUIT_TYPE = /obj/item/clothing/suit/space/ert/med
HELMET_TYPE = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
MASK_TYPE = /obj/item/clothing/mask/breath
- STORAGE_TYPE = /obj/item/weapon/tank/emergency_oxygen/double
+ STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double
/obj/machinery/suit_storage_unit/New()
src.update_icon()
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index d597250a2fc..eb030504a43 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -589,7 +589,7 @@
desc = "A vendor with a wide variety of masks and gas tanks."
icon = 'icons/obj/objects.dmi'
icon_state = "dispenser"
- product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/plasma;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
+ product_paths = "/obj/item/weapon/tank/internals/oxygen;/obj/item/weapon/tank/internals/plasma;/obj/item/weapon/tank/internals/emergency_oxygen;/obj/item/weapon/tank/internals/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
product_amounts = "10;10;10;5;25"
vend_delay = 0
*/
@@ -764,7 +764,7 @@
icon_deny = "med-deny"
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
req_access_txt = "5"
- products = list(/obj/item/weapon/reagent_containers/syringe = 12,/obj/item/weapon/reagent_containers/pill/patch/styptic = 10,
+ products = list(/obj/item/weapon/reagent_containers/syringe = 12,/obj/item/stack/medical/gauze = 8,/obj/item/weapon/reagent_containers/pill/patch/styptic = 10,
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 10,/obj/item/weapon/reagent_containers/glass/bottle/charcoal = 4,
/obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 4,/obj/item/weapon/reagent_containers/glass/bottle/morphine = 4,
/obj/item/weapon/reagent_containers/glass/bottle/diphenhydramine = 4,/obj/item/weapon/reagent_containers/glass/bottle/potass_iodide = 3, /obj/item/weapon/reagent_containers/glass/bottle/salglu_solution = 5,/obj/item/weapon/reagent_containers/glass/bottle/atropine = 3,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/syringe/calomel = 10,/obj/item/weapon/reagent_containers/pill/salbutamol = 10,/obj/item/weapon/reagent_containers/pill/mannitol = 10,/obj/item/weapon/reagent_containers/pill/mutadone = 5,/obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2)
@@ -944,7 +944,7 @@
req_access_txt = "29"
products = list(/obj/item/clothing/suit/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/flash/handheld = 4,
/obj/item/weapon/stock_parts/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3,
- /obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
+ /obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/internals/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
/obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5)
//This one's from NTstation
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 81ccbae5f28..88f4c35a6f3 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -110,7 +110,7 @@
else if(istype(target, /turf/simulated/mineral))
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
- M.gets_drilled()
+ M.gets_drilled(chassis.occupant)
log_message("Drilled through [target]")
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 33280a3a7fb..0d7436f6e94 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -380,7 +380,7 @@
name = "\improper SOB-3 grenade launcher"
desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster."
projectiles = 3
- projectile = /obj/item/weapon/grenade/flashbang/clusterbang
+ projectile = /obj/item/weapon/grenade/clusterbuster
projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher.
equip_cooldown = 90
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index f3817b101fc..b50b02a3a46 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -18,13 +18,13 @@
/obj/effect/decal/cleanable/blood/New()
..()
- remove_ex_blood()
-
-/obj/effect/decal/cleanable/blood/proc/remove_ex_blood() //removes existant blood on the turf
- if(src.loc && isturf(src.loc))
- for(var/obj/effect/decal/cleanable/blood/B in src.loc)
- if(B != src)
- qdel(B)
+ if(src.type == /obj/effect/decal/cleanable/blood)
+ if(src.loc && isturf(src.loc))
+ for(var/obj/effect/decal/cleanable/blood/B in src.loc)
+ if(B != src)
+ if (B.blood_DNA)
+ blood_DNA |= B.blood_DNA.Copy()
+ qdel(B)
/obj/effect/decal/cleanable/blood/splatter
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
@@ -61,9 +61,6 @@
/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
return
-/obj/effect/decal/cleanable/blood/gibs/remove_ex_blood()
- return
-
/obj/effect/decal/cleanable/blood/gibs/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
@@ -91,6 +88,19 @@
var/datum/disease/ND = D.Copy(1)
b.viruses += ND
ND.holder = b
-
if (step_to(src, get_step(src, direction), 0))
- break
\ No newline at end of file
+ break
+
+/obj/effect/decal/cleanable/blood/drip
+ name = "drips of blood"
+ desc = "It's red."
+ gender = PLURAL
+ icon = 'icons/effects/drip.dmi'
+ icon_state = "1"
+ random_icon_states = list("1","2","3","4","5")
+ var/list/drips = list()
+
+/obj/effect/decal/cleanable/blood/drip/New()
+ ..()
+ spawn(1)
+ drips |= icon_state
\ No newline at end of file
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 8fb093f8938..5e1ef66ee32 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -30,7 +30,7 @@
// radio
if (0)
var/obj/item/assembly/r_i_ptank/R = new /obj/item/assembly/r_i_ptank(src.loc)
- var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
+ var/obj/item/weapon/tank/internals/plasma/p3 = new /obj/item/weapon/tank/internals/plasma(R)
var/obj/item/device/radio/signaler/p1 = new /obj/item/device/radio/signaler(R)
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
R.part1 = p1
@@ -47,7 +47,7 @@
// proximity
if (1)
var/obj/item/assembly/m_i_ptank/R = new /obj/item/assembly/m_i_ptank(src.loc)
- var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
+ var/obj/item/weapon/tank/internals/plasma/p3 = new /obj/item/weapon/tank/internals/plasma(R)
var/obj/item/device/prox_sensor/p1 = new /obj/item/device/prox_sensor(R)
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
R.part1 = p1
@@ -69,7 +69,7 @@
// timer
if (2)
var/obj/item/assembly/t_i_ptank/R = new /obj/item/assembly/t_i_ptank(src.loc)
- var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
+ var/obj/item/weapon/tank/internals/plasma/p3 = new /obj/item/weapon/tank/internals/plasma(R)
var/obj/item/device/timer/p1 = new /obj/item/device/timer(R)
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
R.part1 = p1
@@ -85,7 +85,7 @@
//bombvest
if(3)
var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank(src.loc)
- var/obj/item/weapon/tank/plasma/p4 = new /obj/item/weapon/tank/plasma(R)
+ var/obj/item/weapon/tank/internals/plasma/p4 = new /obj/item/weapon/tank/internals/plasma(R)
var/obj/item/device/healthanalyzer/p1 = new /obj/item/device/healthanalyzer(R)
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
var/obj/item/clothing/suit/armor/vest/p3 = new /obj/item/clothing/suit/armor/vest(R)
@@ -135,8 +135,8 @@
if (0)
var/obj/item/device/transfer_valve/V = new(src.loc)
- var/obj/item/weapon/tank/plasma/PT = new(V)
- var/obj/item/weapon/tank/oxygen/OT = new(V)
+ var/obj/item/weapon/tank/internals/plasma/PT = new(V)
+ var/obj/item/weapon/tank/internals/oxygen/OT = new(V)
var/obj/item/device/assembly/signaler/S = new(V)
@@ -158,8 +158,8 @@
if (1)
var/obj/item/device/transfer_valve/V = new(src.loc)
- var/obj/item/weapon/tank/plasma/PT = new(V)
- var/obj/item/weapon/tank/oxygen/OT = new(V)
+ var/obj/item/weapon/tank/internals/plasma/PT = new(V)
+ var/obj/item/weapon/tank/internals/oxygen/OT = new(V)
var/obj/item/device/assembly/prox_sensor/P = new(V)
@@ -182,8 +182,8 @@
// timer
if (2)
var/obj/item/device/transfer_valve/V = new(src.loc)
- var/obj/item/weapon/tank/plasma/PT = new(V)
- var/obj/item/weapon/tank/oxygen/OT = new(V)
+ var/obj/item/weapon/tank/internals/plasma/PT = new(V)
+ var/obj/item/weapon/tank/internals/oxygen/OT = new(V)
var/obj/item/device/assembly/timer/T = new(V)
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 176fd79b61b..f29d9f39c9e 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -110,7 +110,7 @@
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 1,
/obj/item/weapon/storage/toolbox/mechanical = 1,
/obj/item/weapon/screwdriver = 3,
- /obj/item/weapon/tank/emergency_oxygen = 2,
+ /obj/item/weapon/tank/internals/emergency_oxygen = 2,
/obj/item/weapon/vending_refill/cola = 1,
/obj/item/weapon/weldingtool = 3,
/obj/item/weapon/wirecutters = 1,
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e32338540d2..d8998295710 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -46,6 +46,7 @@
var/suittoggled = 0
var/hooded = 0
+
var/list/can_be_placed_into = list(
/obj/structure/table,
/obj/structure/rack,
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 3fc05862b2a..7a00402078e 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -34,6 +34,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/mimeamt = 0 //How many silence left when infected with mime.exe
var/note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant!" //Current note in the notepad function
var/notehtml = ""
+ var/notescanned = 0 // True if what is in the notekeeper was from a paper.
var/cart = "" //A place to stick cartridge menu information
var/detonate = 1 // Can the PDA be blown up?
var/hidden = 0 // Is the PDA hidden from the PDA list?
@@ -368,12 +369,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "
"
if (1)
- dat += "
Notekeeper V2.1
"
- dat += " Edit
"
- dat += note
+ dat += "
Notekeeper V2.2
"
+ dat += "Edit
"
+ if(notescanned)
+ dat += "(This is a scanned image, editing it may cause some text formatting to change.)
"
+ dat += "
[(!notehtml ? note : notehtml)]"
if (2)
- dat += "
SpaceMessenger V3.9.5
"
+ dat += "
SpaceMessenger V3.9.6
"
dat += "
Ringer: [silent == 1 ? "Off" : "On"] | "
dat += "
Send / Receive: [toff == 1 ? "Off" : "On"] | "
dat += "
Set Ringtone | "
@@ -409,7 +412,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
dat += "None detected.
"
if(21)
- dat += "
SpaceMessenger V3.9.5
"
+ dat += "
SpaceMessenger V3.9.6
"
dat += "
Clear Messages"
dat += "
Messages
"
@@ -448,12 +451,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (5)
new_ntrc_msg = 0
- dat += "
SS13 Nanotrasen Relay Chat Network
"
+ dat += "
Nanotrasen Relay Chat Network V1.2
"
dat += "[nick] | "
dat += "[chat_channel] | "
dat += "Write message | "
- dat += "Help
"
+ dat += "Help
"
if(chat_channel)
dat += ntrclog[chat_channel]
@@ -563,18 +566,21 @@ var/global/list/obj/item/device/pda/PDAs = list()
else if((!isnull(cartridge)) && (cartridge.access_atmos))
scanmode = 5
-//MESSENGER/NOTE FUNCTIONS===================================
+//NOTEKEEPER FUNCTIONS===================================
if ("Edit")
- var/n = input(U, "Please enter message", name, notehtml) as message
+ var/n = stripped_multiline_input(U, "Please enter message", name, note)
if (in_range(src, U) && loc == U)
- n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
- if (mode == 1)
- note = replacetext(n, "\n", "
")
- notehtml = n
+ if (mode == 1 && n)
+ note = n
+ notehtml = parsepencode(n, U, SIGNFONT)
+ notescanned = 0
else
U << browse(null, "window=pda")
return
+
+//MESSENGER FUNCTIONS===================================
+
if("Toggle Messenger")
toff = !toff
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
@@ -631,11 +637,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
//CHATROOM FUNCTIONS====================================
if("Set Nick")
- nick = stripped_input(U, "Please enter nickname", name, null, 8)
+ var/n = trim(stripped_input(U, "Please enter nickname", name, nick, 9))
+ if(n)
+ nick = n
if("Set Channel")
- var/t = stripped_input(U, "Please enter channel", name, chat_channel)
-
+ var/t = replacetext(trim(stripped_input(U, "Please enter channel", name, chat_channel, 15)), " ", "_")
if(t)
var/datum/chatroom/C = chatchannels[chat_channel]
var/ret = C.parse_msg(src, nick, "/join [t]")
@@ -644,18 +651,19 @@ var/global/list/obj/item/device/pda/PDAs = list()
chat_channel = ret
if("NTRC Message")
- var/t = msg_input(U) as text
- var/datum/chatroom/C = chatchannels[chat_channel]
- if(C)
- var/ret = C.parse_msg(src,nick,t)
- if(findtextEx(ret,"BAD_",1,5))
- ntrclog[chat_channel] = "[ret]
" + ntrclog[chat_channel]
- else if(ret in chatchannels)
- chat_channel = ret
+ var/t = msg_input(U)
+ if(t)
+ var/datum/chatroom/C = chatchannels[chat_channel]
+ if(C)
+ var/ret = C.parse_msg(src, nick, t)
+ if(findtextEx(ret, "BAD_", 1, 5))
+ ntrclog[chat_channel] = "[ret]
" + ntrclog[chat_channel]
+ else if(ret in chatchannels)
+ chat_channel = ret
if("NTRC Help")
var/helptext = "NTRC Commands:
"
- helptext += "/join #channel
/register
/log amountoflines
"
+ helptext += "/join \[#\](channel name)
/register
/log (amount of lines)
"
usr << browse(helptext, "window=ntrchelp;size=200x200;border=1;can_resize=1;can_close=1;can_minimize=1")
@@ -755,8 +763,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
id = null
/obj/item/device/pda/proc/msg_input(var/mob/living/U = usr)
- var/t = input(U, "Please enter message", name, null) as null|text
- t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
+ var/t = stripped_input(U, "Please enter message", name, null, MAX_MESSAGE_LEN)
if (!t || toff)
return
if (!in_range(src, U) && loc != U)
@@ -991,8 +998,17 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(T.ptank) atmosanalyzer_scan(T.ptank.air_contents, user, T)
if (!scanmode && istype(A, /obj/item/weapon/paper) && owner)
- note = A:info
- user << "Paper scanned." //concept of scanning paper copyright brainoblivion 2009
+ if (!A:info)
+ user << "Unable to scan. Paper is blank."
+ return
+ notehtml = A:info
+ note = replacetext(notehtml, "
", "\[br\]")
+ note = replacetext(note, "- ", "\[*\]")
+ note = replacetext(note, "
", "\[list\]")
+ note = replacetext(note, "
", "\[/list\]")
+ note = strip_html_properly(note)
+ notescanned = 1
+ user << "Paper scanned. Saved to PDA's notekeeper." //concept of scanning paper copyright brainoblivion 2009
/obj/item/device/pda/proc/explode() //This needs tuning.
@@ -1169,4 +1185,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
for(var/obj/item/device/pda/P in PDAs)
if(!P.owner || P.toff || P.hidden) continue
. += P
- return .
+ return .
\ No newline at end of file
diff --git a/code/game/objects/items/devices/PDA/chatroom.dm b/code/game/objects/items/devices/PDA/chatroom.dm
index cc82b4c4c96..1cc8d642cd3 100644
--- a/code/game/objects/items/devices/PDA/chatroom.dm
+++ b/code/game/objects/items/devices/PDA/chatroom.dm
@@ -25,14 +25,29 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom)
MS.send_chat_message(nick,name,message)
- var/list/cmd=text2list(message, " ")
- switch(cmd[1])
- if("/register")
- return register_auth(client,nick)
- if("/join")
- if(cmd[2]) return channel_join(client,nick,cmd[2])
- if("/log")
- if(cmd[2]) return get_log(client,nick,cmd[2])
+ if(findtext(message,"/",1,2))
+ var/list/cmd=text2list(message, " ")
+ switch(cmd[1])
+ if("/register")
+ if(cmd.len == 1)
+ return register_auth(client,nick)
+ else
+ return "BAD_COMMAND_ARGUMENTS"
+ if("/join")
+ if(cmd.len == 2 && cmd[2])
+ if((findtext(cmd[2],"#",1,2) && length(cmd[2]) > 1) || (!findtext(cmd[2],"#",1,2) && length(cmd[2]) > 0))
+ return channel_join(client,nick,copytext(cmd[2], 1, 15))
+ else // Happens only if "" or "#" is entered as a channel name.
+ return "BAD_CHANNEL"
+ else
+ return "BAD_COMMAND_ARGUMENTS"
+ if("/log")
+ if(cmd.len == 2 && cmd[2])
+ return get_log(client,nick,cmd[2])
+ else
+ return "BAD_COMMAND_ARGUMENTS"
+ else
+ return "BAD_COMMAND"
return send_message(client,nick,message)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 1c665893f85..41877c85f4e 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -139,7 +139,7 @@ MASS SPECTROMETER
// Damage descriptions
- user.show_message(text("[] | [] | [] | []", oxy_loss > 50 ? " Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal", tox_loss > 50 ? " Dangerous amount of toxins detected" : "Subject bloodstream toxin level minimal", fire_loss > 50 ? " Severe burn damage detected" : "Subject burn injury status O.K", brute_loss > 50 ? " Severe anatomical damage detected" : "Subject brute-force injury status O.K"), 1)
+ user.show_message(text("[] | [] | [] | []", oxy_loss > 50 ? " Severe oxygen deprivation detected" : "Subject bloodstream oxygen level normal", tox_loss > 50 ? " Dangerous amount of toxins detected" : "Subject bloodstream toxin level minimal", fire_loss > 50 ? " Severe burn damage detected" : "Subject burn injury status O.K", brute_loss > 50 ? " Severe tissue damage detected" : "Subject brute-force injury status O.K"), 1)
if(M.getStaminaLoss())
user.show_message("Subject appears to be suffering from fatigue.", 1)
@@ -160,6 +160,24 @@ MASS SPECTROMETER
else if (M.getBrainLoss() >= 10)
user.show_message("Significant brain damage detected. Subject may have had a concussion.", 1)
+ // Blood Level
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.vessel)
+ if(H.blood_max)
+ user.show_message("Subject is bleeding!")
+ var/blood_volume = round(H.vessel.get_reagent_amount("blood"))
+ var/blood_percent = blood_volume / 560
+ var/blood_type = H.dna.blood_type
+ blood_percent *= 100
+ if(blood_volume <= 500 && blood_volume > 336)
+ user.show_message("Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
+ else if(blood_volume <= 336)
+ user.show_message("Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
+ else
+ user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]")
+
+
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
set category = "Object"
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 74ee638df91..b43cd46e735 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -9,51 +9,62 @@
throw_range = 7
var/heal_brute = 0
var/heal_burn = 0
+ var/stop_bleeding = 0
+ var/self_delay = 50
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
- if (M.stat == 2)
+ if(M.stat == 2)
var/t_him = "it"
- if (M.gender == MALE)
+ if(M.gender == MALE)
t_him = "him"
- else if (M.gender == FEMALE)
+ else if(M.gender == FEMALE)
t_him = "her"
user << "\The [M] is dead, you cannot help [t_him]!"
return
- if (!istype(M))
- user << "\The [src] cannot be applied to [M]!"
+ if(!istype(M))
+ user << "You don't know how to apply \the [src] to [M]..."
return 1
if(!user.IsAdvancedToolUser())
user << "You don't have the dexterity to do this!"
return 1
- if (user)
- if (M != user)
- user.visible_message( \
- "[user] has applied [src] on [M].", \
- "You apply \the [src] to [M]." \
- )
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(stop_bleeding)
+ if(H.bleedsuppress)
+ user << "[H]'s bleeding is already bandaged."
+ if(!H.blood_max)
+ user << "[H] isn't bleeding."
+
+ if(isliving(M))
+ if(!M.can_inject(user, 1))
+ return
+
+ if(user)
+ if(M != user)
+ user.visible_message("[user] applies [src] on [M].", "You apply [src] on [M].")
else
var/t_himself = "itself"
- if (user.gender == MALE)
+ if(user.gender == MALE)
t_himself = "himself"
- else if (user.gender == FEMALE)
+ else if(user.gender == FEMALE)
t_himself = "herself"
+ user.visible_message("[user] starts to apply [src] on [t_himself]...", "You begin applying [src] on yourself...")
+ if(!do_mob(user, M, self_delay)) return
+ user.visible_message("[user] applies [src] on [t_himself].", "You apply [src] on yourself.")
- user.visible_message( \
- "[M] applied [src] on [t_himself].", \
- "You apply \the [src] on yourself." \
- )
-
- if (istype(M, /mob/living/carbon/human))
+ if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting))
-
+ if(stop_bleeding)
+ if(!H.bleedsuppress) //so you can't stack bleed suppression
+ H.suppress_bloodloss(stop_bleeding)
if(affecting.status == ORGAN_ORGANIC) //Limb must be organic to be healed - RR
- if (affecting.heal_damage(src.heal_brute, src.heal_burn, 0))
+ if(affecting.heal_damage(src.heal_brute, src.heal_burn, 0))
H.update_damage_overlays(0)
M.updatehealth()
@@ -70,14 +81,29 @@
/obj/item/stack/medical/bruise_pack
name = "bruise pack"
singular_name = "bruise pack"
- desc = "A pack designed to treat blunt-force trauma."
+ desc = "A theraputic gel pack and bandages designed to treat blunt-force trauma."
icon_state = "brutepack"
- heal_brute = 60
+ heal_brute = 40
origin_tech = "biotech=1"
+/obj/item/stack/medical/gauze
+ name = "medical gauze"
+ desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, but does not heal wounds."
+ gender = PLURAL
+ singular_name = "medical gauze"
+ icon_state = "gauze"
+ stop_bleeding = 1800
+ self_delay = 80
+
+/obj/item/stack/medical/gauze/improvised
+ name = "improvised gauze"
+ singular_name = "improvised gauze"
+ desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
+ stop_bleeding = 900
+
/obj/item/stack/medical/ointment
name = "ointment"
- desc = "Used to treat those nasty burns."
+ desc = "Used to treat those nasty burn wounds."
gender = PLURAL
singular_name = "ointment"
icon_state = "ointment"
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 4b25d6fd02c..f3ad7db4378 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -8,6 +8,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
desc = "Some rods. Can be used for building, or something."
singular_name = "metal rod"
icon_state = "rods"
+ item_state = "rods"
flags = CONDUCT
w_class = 3.0
force = 9.0
@@ -21,8 +22,15 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
/obj/item/stack/rods/New(var/loc, var/amount=null)
recipes = rod_recipes
+ update_icon()
return ..()
+/obj/item/stack/rods/update_icon()
+ if(get_amount() <= 5)
+ icon_state = "rods-[get_amount()]"
+ else
+ icon_state = "rods"
+
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/weldingtool))
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 9c5b5e4d3c0..e96d3a290f5 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -26,6 +26,15 @@
icon_state = "sheet-monkey"
origin_tech = null
+var/global/list/datum/stack_recipe/monkey_recipes = list ( \
+ new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, on_floor = 1), \
+ new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2, on_floor = 1), \
+ )
+
+/obj/item/stack/sheet/animalhide/monkey/New(var/loc, var/amount=null)
+ recipes = monkey_recipes
+ return ..()
+
/obj/item/stack/sheet/animalhide/lizard
name = "lizard skin"
desc = "Sssssss..."
@@ -40,6 +49,15 @@
icon_state = "sheet-xeno"
origin_tech = null
+var/global/list/datum/stack_recipe/xeno_recipes = list ( \
+ new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1, on_floor = 1), \
+ new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2, on_floor = 1), \
+ )
+
+/obj/item/stack/sheet/animalhide/xeno/New(var/loc, var/amount=null)
+ recipes = xeno_recipes
+ return ..()
+
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/sheet/xenochitin
name = "alien chitin"
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 9ab05593915..a3e8959f9a8 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -177,6 +177,7 @@
if(usr)
usr.unEquip(src, 1)
qdel(src)
+ update_icon()
return 1
/obj/item/stack/proc/add(var/amount)
@@ -184,6 +185,7 @@
source.add_charge(amount * cost)
else
src.amount += amount
+ update_icon()
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
var/obj/item/stack/oldsrc = src
@@ -199,6 +201,7 @@
usr << "You add new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
if(oldsrc.amount <= 0)
break
+ oldsrc.update_icon()
/obj/item/stack/attack_hand(mob/user as mob)
if (user.get_inactive_hand() == src)
@@ -240,6 +243,7 @@
src.use(to_transfer)
if (src && usr.machine==src)
spawn(0) src.interact(usr)
+ S.update_icon()
else
..()
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 219e5bdacaa..6c21bea8066 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -13,6 +13,8 @@
* Toy nuke
* Fake meteor
* Carp plushie
+ * Foam armblade
+ * Toy big red button
*/
@@ -371,6 +373,19 @@
else
user << "It's already fabulous!"
+/*
+ * Foam armblade
+ */
+/obj/item/toy/foamblade
+ name = "foam armblade"
+ desc = "it says \"Sternside Changs #1 fan\" on it. "
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "foamblade"
+ item_state = "arm_blade"
+ attack_verb = list("pricked", "absorbed", "gored")
+ w_class = 2
+
+
/*
* Subtype of Double-Bladed Energy Swords
*/
@@ -1077,4 +1092,28 @@ obj/item/toy/cards/deck/syndicate
desc = "An adorable stuffed toy that resembles a space carp."
icon = 'icons/obj/toy.dmi'
icon_state = "carpplushie"
- w_class = 2.0
\ No newline at end of file
+ w_class = 2.0
+
+/*
+ * Toy big red button
+ */
+/obj/item/toy/redbutton
+ name = "big red button"
+ desc = "A big, plastic red button. Reads 'From HonkCo Pranks©' on the back."
+ icon = 'icons/obj/assemblies.dmi'
+ icon_state = "bigred"
+ w_class = 2.0
+ var/cooldown = 0
+
+/obj/item/toy/redbutton/attack_self(mob/user)
+ if (cooldown < world.time)
+ cooldown = (world.time + 300) // Sets cooldown at 30 seconds
+ user.visible_message("[user] presses the big red button.", "You press the button, it plays a loud noise!", "The button clicks loudly.")
+ playsound(src, 'sound/effects/explosionfar.ogg', 50, 0, surround = 0)
+ for(var/mob/M in range(10, src)) // Checks range
+ if(!M.stat && !istype(M, /mob/living/silicon/ai)) // Checks to make sure whoever's getting shaken is alive/not the AI
+ sleep(8) // Short delay to match up with the explosion sound
+ shake_camera(M, 2, 1) // Shakes player camera 2 squares for 1 second.
+
+ else
+ user << "Nothing happens."
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index b31b1ea09c7..19d17f14778 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -103,12 +103,13 @@ RCD
/obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
- if((matter + 20) > max_matter)
+ var/obj/item/weapon/rcd_ammo/R = W
+ if((matter + R.ammoamt) > max_matter)
user << "The RCD cant hold any more matter-units."
return
user.drop_item()
qdel(W)
- matter += 20
+ matter += R.ammoamt
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user << "The RCD now holds [matter]/[max_matter] matter-units."
desc = "A RCD. It currently holds [matter]/[max_matter] matter-units."
@@ -265,6 +266,15 @@ RCD
desc = "A device used to rapidly build walls/floor."
canRwall = 1
+/obj/item/weapon/rcd/loaded
+ matter = 100
+
+/obj/item/weapon/rcd/combat
+ name = "combat RCD"
+ max_matter = 500
+ matter = 500
+ canRwall = 1
+
/obj/item/weapon/rcd_ammo
name = "compressed matter cartridge"
desc = "Highly compressed matter for the RCD."
@@ -277,3 +287,7 @@ RCD
origin_tech = "materials=2"
m_amt = 16000
g_amt = 8000
+ var/ammoamt = 20
+
+/obj/item/weapon/rcd_ammo/large
+ ammoamt = 100
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index f232c647fe8..60fc902e23e 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -196,19 +196,22 @@ update_label("John Doe", "Clowny")
icon_state = "centcom"
registered_name = "Emergency Response Team Commander"
assignment = "Emergency Response Team Commander"
- New() access = get_all_accesses()
+ New() access = get_all_accesses()+get_ert_access("commander")
/obj/item/weapon/card/id/ert/Security
registered_name = "Security Response Officer"
assignment = "Security Response Officer"
+ New() access = get_all_accesses()+get_ert_access("sec")
/obj/item/weapon/card/id/ert/Engineer
registered_name = "Engineer Response Officer"
assignment = "Engineer Response Officer"
+ New() access = get_all_accesses()+get_ert_access("eng")
/obj/item/weapon/card/id/ert/Medical
registered_name = "Medical Response Officer"
assignment = "Medical Response Officer"
+ New() access = get_all_accesses()+get_ert_access("med")
/obj/item/weapon/card/id/prisoner
name = "prisoner ID card"
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 01a96fbf6c6..216812720b3 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -110,6 +110,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/smoketime = 300
var/chem_volume = 30
+/obj/item/clothing/mask/cigarette/suicide_act(mob/user)
+ user.visible_message("[user] is huffing the [src.name] as quickly as they can! It looks like \he's trying to give \himself cancer.")
+ return (TOXLOSS|OXYLOSS)
+
/obj/item/clothing/mask/cigarette/New()
..()
flags |= NOREACT // so it doesn't react until you light it
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 3354f1f5b0c..1fa74f76454 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -18,7 +18,7 @@
var/operating = 0//cooldown
var/obj/item/weapon/weldingtool/weldtool = null
var/obj/item/device/assembly/igniter/igniter = null
- var/obj/item/weapon/tank/plasma/ptank = null
+ var/obj/item/weapon/tank/internals/plasma/ptank = null
/obj/item/weapon/flamethrower/Destroy()
@@ -100,7 +100,7 @@
update_icon()
return
- if(istype(W,/obj/item/weapon/tank/plasma))
+ if(istype(W,/obj/item/weapon/tank/internals/plasma))
if(ptank)
user << "There appears to already be a plasma tank loaded in [src]!"
return
@@ -204,5 +204,5 @@
/obj/item/weapon/flamethrower/full/tank/New(var/loc)
..()
- ptank = new /obj/item/weapon/tank/plasma/full(src)
+ ptank = new /obj/item/weapon/tank/internals/plasma/full(src)
update_icon()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 2098d686ea9..ac865a96dc5 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -203,8 +203,11 @@
qdel(src) //correctly before deleting the grenade.
/obj/item/weapon/grenade/chem_grenade/proc/mix_reagents()
+ var/total_temp
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
G.reagents.trans_to(src, G.reagents.total_volume)
+ total_temp += G.reagents.chem_temp
+ reagents.chem_temp = total_temp
/obj/item/weapon/grenade/chem_grenade/proc/can_flood_from(myloc, maxrange)
var/list/reachable = list(myloc)
diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm
new file mode 100644
index 00000000000..63d4c41aa1c
--- /dev/null
+++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm
@@ -0,0 +1,123 @@
+////////////////////
+//Clusterbang
+////////////////////
+/obj/item/weapon/grenade/clusterbuster
+ desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
+ name = "clusterbang"
+ icon = 'icons/obj/grenade.dmi'
+ icon_state = "clusterbang"
+ var/payload = /obj/item/weapon/grenade/flashbang/cluster
+
+/obj/item/weapon/grenade/clusterbuster/prime()
+ update_mob()
+ var/numspawned = rand(4,8)
+ var/again = 0
+
+ for(var/more = numspawned,more > 0,more--)
+ if(prob(35))
+ again++
+ numspawned--
+
+ for(var/loop = again ,loop > 0, loop--)
+ new /obj/item/weapon/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads
+
+ new /obj/effect/payload_spawner(loc, payload, numspawned)//Launches payload
+
+ playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
+
+ qdel(src)
+
+
+//////////////////////
+//Clusterbang segment
+//////////////////////
+/obj/item/weapon/grenade/clusterbuster/segment
+ desc = "A smaller segment of a clusterbang. Better run."
+ name = "clusterbang segment"
+ icon = 'icons/obj/grenade.dmi'
+ icon_state = "clusterbang_segment"
+
+/obj/item/weapon/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/weapon/grenade/flashbang/cluster)
+ ..()
+ icon_state = "clusterbang_segment_active"
+ payload = payload_type
+ active = 1
+ walk_away(src,loc,rand(1,4))
+ spawn(rand(15,60))
+ prime()
+
+
+/obj/item/weapon/grenade/clusterbuster/segment/prime()
+
+ new /obj/effect/payload_spawner(loc, payload, rand(4,8))
+
+ playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
+
+ qdel(src)
+
+//////////////////////////////////
+//The payload spawner effect
+/////////////////////////////////
+/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num)
+
+ for(var/loop = numspawned ,loop > 0, loop--)
+ var/obj/item/weapon/grenade/P = new type(loc)
+ P.active = 1
+ walk_away(P,loc,rand(1,4))
+
+ spawn(rand(15,60))
+ if(P && !P.gc_destroyed)
+ P.prime()
+ qdel(src)
+
+
+//////////////////////////////////
+//Custom payload clusterbusters
+/////////////////////////////////
+/obj/item/weapon/grenade/flashbang/cluster
+ icon_state = "flashbang_active"
+ banglet = 1
+
+/obj/item/weapon/grenade/clusterbuster/emp
+ name = "Electromagnetic Storm"
+ payload = /obj/item/weapon/grenade/empgrenade
+
+/obj/item/weapon/grenade/clusterbuster/smoke
+ name = "Ninja Vanish"
+ payload = /obj/item/weapon/grenade/smokebomb
+
+/obj/item/weapon/grenade/clusterbuster/metalfoam
+ name = "Instant Concrete"
+ payload = /obj/item/weapon/grenade/chem_grenade/metalfoam
+
+/obj/item/weapon/grenade/clusterbuster/inferno
+ name = "Inferno"
+ payload = /obj/item/weapon/grenade/chem_grenade/incendiary
+
+/obj/item/weapon/grenade/clusterbuster/antiweed
+ name = "RoundDown"
+ payload = /obj/item/weapon/grenade/chem_grenade/antiweed
+
+/obj/item/weapon/grenade/clusterbuster/cleaner
+ name = "Mr. Proper"
+ payload = /obj/item/weapon/grenade/chem_grenade/cleaner
+
+/obj/item/weapon/grenade/clusterbuster/teargas
+ name = "Oignon Grenade"
+ payload = /obj/item/weapon/grenade/chem_grenade/teargas
+
+/obj/item/weapon/grenade/clusterbuster/facid
+ name = "Aciding Rain"
+ payload = /obj/item/weapon/grenade/chem_grenade/facid
+
+/obj/item/weapon/grenade/clusterbuster/syndieminibomb
+ name = "SyndiWrath"
+ payload = /obj/item/weapon/grenade/syndieminibomb
+
+/obj/item/weapon/grenade/clusterbuster/spawner_manhacks
+ name = "iViscerator"
+ payload = /obj/item/weapon/grenade/spawnergrenade/manhacks
+
+/obj/item/weapon/grenade/clusterbuster/spawner_spesscarp
+ name = "Invasion of the Space Carps"
+ payload = /obj/item/weapon/grenade/spawnergrenade/spesscarp
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 66c649c9b72..6db5b1f306d 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -21,7 +21,7 @@
/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/M)
M.show_message("BANG", 2)
- playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
+ playsound(loc, 'sound/effects/bang.ogg', 25, 1)
//Checking for protections
var/eye_safety = 0
@@ -46,13 +46,13 @@
if (M.eye_stat >= 20 && takes_eye_damage)
M << "Your eyes start to burn badly!"
M.disabilities |= NEARSIGHT
- if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
+ if(!banglet)
if (prob(M.eye_stat - 20 + 1))
M << "You can't see anything!"
M.disabilities |= BLIND
//Bang
- if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
+ if((loc == M) || loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
M.Stun(10)
M.Weaken(10)
if(!ear_safety)
@@ -61,81 +61,10 @@
M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15))
if (M.ear_damage >= 15)
M << "Your ears start to ring badly!"
- if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
+ if(!banglet)
if(prob(M.ear_damage - 10 + 5))
M << "You can't hear anything!"
M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
M << "Your ears start to ring!"
-
-////////////////////
-//Clusterbang
-////////////////////
-/obj/item/weapon/grenade/flashbang/clusterbang
- desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
- name = "clusterbang"
- icon = 'icons/obj/grenade.dmi'
- icon_state = "clusterbang"
-
-/obj/item/weapon/grenade/flashbang/clusterbang/prime()
- update_mob()
- var/numspawned = rand(4,8)
- var/again = 0
-
- for(var/more = numspawned,more > 0,more--)
- if(prob(35))
- again++
- numspawned--
-
- for(var/loop = numspawned, loop > 0, loop--)
- new /obj/item/weapon/grenade/flashbang/cluster(loc)//Launches flashbangs
-
- for(var/loop = again ,loop > 0, loop--)
- new /obj/item/weapon/grenade/flashbang/clusterbang/segment(loc)//Creates a 'segment' that launches a few more flashbangs
-
- playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
-
- qdel(src)
-
-
-//////////////////////
-//Clusterbang segment
-//////////////////////
-/obj/item/weapon/grenade/flashbang/clusterbang/segment
- desc = "A smaller segment of a clusterbang. Better run."
- name = "clusterbang segment"
- icon = 'icons/obj/grenade.dmi'
- icon_state = "clusterbang_segment"
-
-/obj/item/weapon/grenade/flashbang/clusterbang/segment/New()
- ..()
- icon_state = "clusterbang_segment_active"
- active = 1
- walk_away(src,loc,rand(1,4))
- spawn(rand(15,60))
- prime()
-
-
-/obj/item/weapon/grenade/flashbang/clusterbang/segment/prime()
- update_mob()
- var/numspawned = rand(4,8)
-
- for(var/loop = numspawned ,loop > 0, loop--)
- new /obj/item/weapon/grenade/flashbang/cluster(loc)
-
- playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
-
- qdel(src)
-
-////////////////////////////////
-//Clusterbang spwaned flashbang
-////////////////////////////////
-/obj/item/weapon/grenade/flashbang/cluster/New()
- ..()
- icon_state = "flashbang_active"
- active = 1
- banglet = 1
- walk_away(src,loc,rand(1,3))
- spawn(rand(15,60))
- prime()
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 3020a6d1acc..ad243908696 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -153,7 +153,8 @@
var/armed = 0
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
- user.visible_message("[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is sticking \his head in the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user as mob)
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index b0d9d00fd5e..ef37fb2ab50 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -12,7 +12,7 @@
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
- var/mopspeed = 40
+ var/mopspeed = 30
/obj/item/weapon/mop/New()
create_reagents(mopcap)
@@ -65,14 +65,3 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A)
/obj/item/weapon/mop/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
return
-
-/obj/item/weapon/mop/advanced
- desc = "The most advanced tool in a custodian's arsenal. Just think of all the viscera you will clean up with this!"
- name = "advanced mop"
- mopcap = 10
- icon_state = "advmop"
- item_state = "mop"
- force = 6
- throwforce = 8
- throw_range = 4
- mopspeed = 20
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index fceaa3c4193..448673346eb 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -16,6 +16,7 @@
g_amt = 50
var/rigged = 0 // true if rigged to explode
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
+ var/chargerate = 100 //how much power is given every tick in a recharger
/obj/item/weapon/stock_parts/cell/suicide_act(mob/user)
user.visible_message("[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.")
@@ -44,6 +45,20 @@
..()
charge = 0
+/obj/item/weapon/stock_parts/cell/pulse //40 pulse shots
+ name = "pulse rifle power cell"
+ maxcharge = 8000
+ rating = 3
+ chargerate = 1500
+
+/obj/item/weapon/stock_parts/cell/pulse/carbine //25 pulse shots
+ name = "pulse carbine power cell"
+ maxcharge = 5000
+
+/obj/item/weapon/stock_parts/cell/pulse/pistol //10 pulse shots
+ name = "pulse pistol power cell"
+ maxcharge = 2000
+
/obj/item/weapon/stock_parts/cell/high
name = "high-capacity power cell"
origin_tech = "powerstorage=2"
@@ -51,6 +66,7 @@
maxcharge = 10000
g_amt = 60
rating = 3
+ chargerate = 1500
/obj/item/weapon/stock_parts/cell/high/empty/New()
..()
@@ -63,6 +79,7 @@
maxcharge = 20000
g_amt = 70
rating = 4
+ chargerate = 2000
/obj/item/weapon/stock_parts/cell/super/empty/New()
..()
@@ -75,6 +92,7 @@
maxcharge = 30000
g_amt = 80
rating = 5
+ chargerate = 3000
/obj/item/weapon/stock_parts/cell/hyper/empty/New()
..()
@@ -87,6 +105,7 @@
maxcharge = 30000
g_amt = 80
rating = 6
+ chargerate = 30000
use()
return 1
@@ -103,16 +122,15 @@
minor_fault = 1
rating = 1
-/obj/item/weapon/stock_parts/cell/slime
+/obj/item/weapon/stock_parts/cell/high/slime
name = "charged slime core"
desc = "A yellow slime core infused with plasma, it crackles with power."
origin_tech = "powerstorage=2;biotech=4"
- icon = 'icons/mob/slimes.dmi' //'icons/obj/harvest.dmi'
- icon_state = "yellow slime extract" //"potato_battery"
- maxcharge = 10000
+ icon = 'icons/mob/slimes.dmi'
+ icon_state = "yellow slime extract"
m_amt = 0
g_amt = 0
- rating = 3
+
/obj/item/weapon/stock_parts/cell/emproof
name = "\improper EMP-proof cell"
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index df65b059e39..3c7a6e98ad8 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -223,6 +223,7 @@
item_state = "duffle"
storage_slots = 9
slowdown = 1
+ max_combined_w_class = 27
/obj/item/weapon/storage/backpack/dufflebag/syndiemed
name = "medical dufflebag"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 7d9c1ec5575..bbc33441f3a 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -39,6 +39,10 @@
can_hold = list() // any
cant_hold = list(/obj/item/weapon/disk/nuclear)
+/obj/item/weapon/storage/bag/trash/suicide_act(mob/user)
+ user.visible_message("[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!")
+ playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1)
+ return (TOXLOSS)
/obj/item/weapon/storage/bag/trash/update_icon()
if(contents.len == 0)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 05855a82ed8..5ac93427b86 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -33,6 +33,7 @@
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
+ new /obj/item/device/multitool(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
@@ -68,7 +69,8 @@
/obj/item/device/flashlight/pen,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/reagent_containers/hypospray,
- /obj/item/device/rad_laser
+ /obj/item/device/rad_laser,
+ /obj/item/device/sensor_device
)
@@ -189,8 +191,9 @@
name = "shoulder holster"
desc = "A holster to conceal a carried handgun. WARNING: Badasses only."
icon_state = "holster"
- item_state = "bandolier"
+ item_state = "holster"
storage_slots = 1
+ max_w_class = 4
can_hold = list(
/obj/item/weapon/gun/projectile/automatic/pistol,
/obj/item/weapon/gun/projectile/revolver/detective
diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm
index f8bca96b67f..136d250eec9 100644
--- a/code/game/objects/items/weapons/storage/book.dm
+++ b/code/game/objects/items/weapons/storage/book.dm
@@ -18,6 +18,10 @@
var/mob/affecting = null
var/deity_name = "Christ"
+/obj/item/weapon/storage/book/bible/suicide_act(mob/user)
+ user.visible_message("[user] is offering \himself to [src.deity_name]! It looks like \he's trying to commit suicide.")
+ return (BRUTELOSS)
+
/obj/item/weapon/storage/book/bible/booze
name = "bible"
desc = "To be applied to the head repeatedly."
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 467ca497767..2a26329b210 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -62,7 +62,7 @@
..()
contents = list()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
return
@@ -72,7 +72,7 @@
..()
contents = list()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
return
@@ -601,4 +601,19 @@
new /obj/item/clothing/tie/armband/deputy(src)
new /obj/item/clothing/tie/armband/deputy(src)
new /obj/item/clothing/tie/armband/deputy(src)
- new /obj/item/clothing/tie/armband/deputy(src)
\ No newline at end of file
+ new /obj/item/clothing/tie/armband/deputy(src)
+
+/obj/item/weapon/storage/box/metalfoam
+ name = "box of metal foam grenades"
+ desc = "To be used to rapidly seal hull breaches"
+ icon_state = "flashbang"
+
+/obj/item/weapon/storage/box/metalfoam/New()
+ ..()
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
+ new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index e4e6391a97d..6901e0e41af 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -16,117 +16,112 @@
throw_range = 7
var/empty = 0
+/obj/item/weapon/storage/firstaid/regular
+ icon_state = "firstaid"
+ desc = "A first aid kit with the ability to heal common types of injuries."
+
+/obj/item/weapon/storage/firstaid/regular/New()
+ ..()
+ if(empty) return
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/ointment(src)
+ new /obj/item/stack/medical/ointment(src)
+ new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
+ new /obj/item/device/healthanalyzer(src)
+ return
/obj/item/weapon/storage/firstaid/fire
- name = "fire first-aid kit"
- desc = "It's an emergency medical kit for when the toxins lab -spontaneously- burns down."
+ name = "burn treatment kit"
+ desc = "A specialized medical kit for when the toxins lab -spontaneously- burns down."
icon_state = "ointment"
item_state = "firstaid-ointment"
/obj/item/weapon/storage/firstaid/fire/New()
..()
- if (empty) return
-
+ if(empty) return
icon_state = pick("ointment","firefirstaid")
-
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/device/healthanalyzer(src)
+ new /obj/item/weapon/reagent_containers/pill/salicyclic(src)
+ new /obj/item/weapon/reagent_containers/pill/salicyclic(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
- new /obj/item/weapon/reagent_containers/pill/salicyclic(src)
- return
-
-
-/obj/item/weapon/storage/firstaid/regular
- icon_state = "firstaid"
-
-/obj/item/weapon/storage/firstaid/regular/New()
- ..()
- if (empty) return
- new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
- new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
- new /obj/item/weapon/reagent_containers/pill/salicyclic(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
new /obj/item/device/healthanalyzer(src)
- new /obj/item/weapon/reagent_containers/hypospray/medipen( src )
return
/obj/item/weapon/storage/firstaid/toxin
- name = "toxin first aid"
- desc = "Used to treat when you have a high amoutn of toxins in your body."
+ name = "toxin treatment kit"
+ desc = "Used to treat toxic blood content and radiation poisoning."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
/obj/item/weapon/storage/firstaid/toxin/New()
..()
- if (empty) return
-
+ if(empty) return
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
-
- new /obj/item/weapon/reagent_containers/syringe/charcoal( src )
- new /obj/item/weapon/reagent_containers/syringe/charcoal( src )
- new /obj/item/weapon/reagent_containers/syringe/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/device/healthanalyzer( src )
+ new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
+ new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
+ new /obj/item/weapon/reagent_containers/syringe/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/device/healthanalyzer(src)
return
/obj/item/weapon/storage/firstaid/o2
- name = "oxygen deprivation first aid"
+ name = "oxygen deprivation treatment kit"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state = "firstaid-o2"
/obj/item/weapon/storage/firstaid/o2/New()
..()
- if (empty) return
+ if(empty) return
new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
new /obj/item/weapon/reagent_containers/pill/salbutamol(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
- new /obj/item/device/healthanalyzer( src )
+ new /obj/item/device/healthanalyzer(src)
return
/obj/item/weapon/storage/firstaid/brute
- name = "brute first aid"
+ name = "brute trauma treatment kit"
desc = "A first aid kit for when you get toolboxed."
icon_state = "brute"
item_state = "firstaid-brute"
/obj/item/weapon/storage/firstaid/brute/New()
..()
- if (empty) return
+ if(empty) return
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
- new /obj/item/device/healthanalyzer( src )
- new /obj/item/weapon/reagent_containers/hypospray/medipen(src)
- new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/device/healthanalyzer(src)
return
/obj/item/weapon/storage/firstaid/tactical
- name = "first-aid kit"
- icon_state = "bezerk"
+ name = "combat medical kit"
desc = "I hope you've got insurance."
+ icon_state = "bezerk"
max_w_class = 3
/obj/item/weapon/storage/firstaid/tactical/New()
..()
- if (empty) return
- new /obj/item/clothing/tie/stethoscope( src )
- new /obj/item/weapon/surgicaldrill ( src )
- new /obj/item/weapon/reagent_containers/hypospray/combat( src )
- new /obj/item/weapon/reagent_containers/pill/patch/styptic( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/syringe/lethal/choral( src )
- new /obj/item/clothing/glasses/hud/health/night( src )
+ if(empty) return
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/weapon/reagent_containers/hypospray/combat(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/syringe/lethal/choral(src)
+ new /obj/item/clothing/glasses/hud/health/night(src)
return
@@ -146,11 +141,11 @@
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri
- if (ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
+ if(ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
var/mob/M = usr
- if (!istype(over_object, /obj/screen) || !Adjacent(M))
+ if(!istype(over_object, /obj/screen) || !Adjacent(M))
return ..()
- if ((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
+ if((!( M.restrained() ) && !( M.stat ) /*&& M.pocket == src*/))
switch(over_object.name)
if("r_hand")
M.unEquip(src)
@@ -161,7 +156,7 @@
src.add_fingerprint(usr)
return
if(over_object == usr && in_range(src, usr) || usr.contents.Find(src))
- if (usr.s_active)
+ if(usr.s_active)
usr.s_active.close(usr)
src.show_to(usr)
return
@@ -173,13 +168,13 @@
/obj/item/weapon/storage/box/silver_sulf/New()
..()
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
- new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf( src )
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
+ new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
/obj/item/weapon/storage/pill_bottle/charcoal
@@ -188,13 +183,13 @@
/obj/item/weapon/storage/pill_bottle/charcoal/New()
..()
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
- new /obj/item/weapon/reagent_containers/pill/charcoal( src )
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
+ new /obj/item/weapon/reagent_containers/pill/charcoal(src)
/obj/item/weapon/storage/pill_bottle/epinephrine
name = "bottle of epinephrine pills"
@@ -202,13 +197,13 @@
/obj/item/weapon/storage/pill_bottle/epinephrine/New()
..()
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
- new /obj/item/weapon/reagent_containers/pill/epinephrine( src )
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
+ new /obj/item/weapon/reagent_containers/pill/epinephrine(src)
/obj/item/weapon/storage/pill_bottle/mutadone
name = "bottle of mutadone pills"
@@ -244,11 +239,11 @@
/obj/item/weapon/storage/pill_bottle/stimulant/New()
..()
- new /obj/item/weapon/reagent_containers/pill/stimulant( src )
- new /obj/item/weapon/reagent_containers/pill/stimulant( src )
- new /obj/item/weapon/reagent_containers/pill/stimulant( src )
- new /obj/item/weapon/reagent_containers/pill/stimulant( src )
- new /obj/item/weapon/reagent_containers/pill/stimulant( src )
+ new /obj/item/weapon/reagent_containers/pill/stimulant(src)
+ new /obj/item/weapon/reagent_containers/pill/stimulant(src)
+ new /obj/item/weapon/reagent_containers/pill/stimulant(src)
+ new /obj/item/weapon/reagent_containers/pill/stimulant(src)
+ new /obj/item/weapon/reagent_containers/pill/stimulant(src)
/obj/item/weapon/storage/pill_bottle/dice
name = "bag of dice"
@@ -258,11 +253,11 @@
/obj/item/weapon/storage/pill_bottle/dice/New()
..()
- new /obj/item/weapon/dice/d4( src )
- new /obj/item/weapon/dice( src )
- new /obj/item/weapon/dice/d8( src )
- new /obj/item/weapon/dice/d10( src )
- new /obj/item/weapon/dice/d00( src )
- new /obj/item/weapon/dice/d12( src )
- new /obj/item/weapon/dice/d20( src )
+ new /obj/item/weapon/dice/d4(src)
+ new /obj/item/weapon/dice(src)
+ new /obj/item/weapon/dice/d8(src)
+ new /obj/item/weapon/dice/d10(src)
+ new /obj/item/weapon/dice/d00(src)
+ new /obj/item/weapon/dice/d12(src)
+ new /obj/item/weapon/dice/d20(src)
diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm
index 702cd2a96f0..d8313137772 100644
--- a/code/game/objects/items/weapons/storage/lockbox.dm
+++ b/code/game/objects/items/weapons/storage/lockbox.dm
@@ -93,7 +93,7 @@
/obj/item/weapon/storage/lockbox/clusterbang/New()
..()
- new /obj/item/weapon/grenade/flashbang/clusterbang(src)
+ new /obj/item/weapon/grenade/clusterbuster(src)
/obj/item/weapon/storage/lockbox/medal
name = "medal box"
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index d8b9586f652..89b613af2e3 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -84,7 +84,7 @@
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
- new /obj/item/clothing/suit/toggle/chaplain_hoodie(src)
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
new /obj/item/weapon/card/id/syndicate(src)
return
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 6af3b539a8b..12c4f8d1a13 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -10,24 +10,24 @@
/*
* Oxygen
*/
-/obj/item/weapon/tank/oxygen
+/obj/item/weapon/tank/internals/oxygen
name = "oxygen tank"
desc = "A tank of oxygen."
icon_state = "oxygen"
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
-/obj/item/weapon/tank/oxygen/New()
+/obj/item/weapon/tank/internals/oxygen/New()
..()
src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
-/obj/item/weapon/tank/oxygen/yellow
+/obj/item/weapon/tank/internals/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
icon_state = "oxygen_f"
-/obj/item/weapon/tank/oxygen/red
+/obj/item/weapon/tank/internals/oxygen/red
desc = "A tank of oxygen, this one is red."
icon_state = "oxygen_fr"
@@ -35,13 +35,13 @@
/*
* Anesthetic
*/
-/obj/item/weapon/tank/anesthetic
+/obj/item/weapon/tank/internals/anesthetic
name = "anesthetic tank"
desc = "A tank with an N2O/O2 gas mix."
icon_state = "anesthetic"
item_state = "an_tank"
-/obj/item/weapon/tank/anesthetic/New()
+/obj/item/weapon/tank/internals/anesthetic/New()
..()
src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
@@ -55,13 +55,13 @@
/*
* Air
*/
-/obj/item/weapon/tank/air
+/obj/item/weapon/tank/internals/air
name = "air tank"
desc = "Mixed anyone?"
icon_state = "oxygen"
-/obj/item/weapon/tank/air/New()
+/obj/item/weapon/tank/internals/air/New()
..()
src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD
@@ -72,7 +72,7 @@
/*
* Plasma
*/
-/obj/item/weapon/tank/plasma
+/obj/item/weapon/tank/internals/plasma
name = "plasma tank"
desc = "Contains dangerous plasma. Do not inhale. Warning: extremely flammable."
icon_state = "plasma"
@@ -80,13 +80,13 @@
slot_flags = null //they have no straps!
-/obj/item/weapon/tank/plasma/New()
+/obj/item/weapon/tank/internals/plasma/New()
..()
src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
-/obj/item/weapon/tank/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/flamethrower))
@@ -98,7 +98,7 @@
src.loc = F
return
-/obj/item/weapon/tank/plasma/full/New()
+/obj/item/weapon/tank/internals/plasma/full/New()
..()
src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
@@ -106,7 +106,7 @@
/*
* Emergency Oxygen
*/
-/obj/item/weapon/tank/emergency_oxygen
+/obj/item/weapon/tank/internals/emergency_oxygen
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon_state = "emergency"
@@ -118,17 +118,17 @@
volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
-/obj/item/weapon/tank/emergency_oxygen/New()
+/obj/item/weapon/tank/internals/emergency_oxygen/New()
..()
src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
return
-/obj/item/weapon/tank/emergency_oxygen/engi
+/obj/item/weapon/tank/internals/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
volume = 6
-/obj/item/weapon/tank/emergency_oxygen/double
+/obj/item/weapon/tank/internals/emergency_oxygen/double
name = "double emergency oxygen tank"
icon_state = "emergency_engi"
volume = 10
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 58b32e8abde..f7e967becc0 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -28,6 +28,10 @@
origin_tech = "materials=1;engineering=1"
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
+/obj/item/weapon/wrench/suicide_act(mob/user)
+ user.visible_message("[user] is beating \himself to death with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
+ return (BRUTELOSS)
/*
* Screwdriver
@@ -126,6 +130,11 @@
else
..()
+/obj/item/weapon/wirecutters/suicide_act(mob/user)
+ user.visible_message("[user] is cutting at \his arteries with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1, -1)
+ return (BRUTELOSS)
+
/*
* Welding Tool
*/
@@ -447,6 +456,11 @@
origin_tech = "engineering=1"
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
+/obj/item/weapon/crowbar/suicide_act(mob/user)
+ user.visible_message("[user] is beating \himself to death with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1)
+ return (BRUTELOSS)
+
/obj/item/weapon/crowbar/red
icon = 'icons/obj/items.dmi'
icon_state = "red_crowbar"
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 289ecce7fd6..89a20dc21ca 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -32,6 +32,12 @@ LINEN BINS
add_fingerprint(user)
return
+/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/weapon/shard))
+ new /obj/item/stack/medical/gauze/improvised(src.loc)
+ qdel(src)
+ user << "You tear [src] up."
+ ..()
/obj/item/weapon/bedsheet/blue
icon_state = "sheetblue"
diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
index 56c8b30a385..c42e8b38396 100644
--- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
@@ -6,6 +6,7 @@
icon_closed = "critter"
var/already_opened = 0
var/content_mob = null
+ var/amount = 1
/obj/structure/closet/critter/can_open()
if(locked || welded)
@@ -21,20 +22,7 @@
return ..()
if(content_mob != null && already_opened == 0)
- if(content_mob == /mob/living/simple_animal/chick)
- var/num = rand(1, 3)
- for(var/i = 0, i < num, i++)
- new content_mob(loc)
- else if(content_mob == /mob/living/simple_animal/corgi)
- var/num = rand(0, 1)
- if(num) //No more matriarchy for cargo
- content_mob = /mob/living/simple_animal/corgi/Lisa
- new content_mob(loc)
- else if(content_mob == /mob/living/simple_animal/cat)
- if(prob(50))
- content_mob = /mob/living/simple_animal/cat/Proc
- new content_mob(loc)
- else
+ for(var/i = 0, i <= amount, i++)
new content_mob(loc)
already_opened = 1
..()
@@ -56,7 +44,12 @@
/obj/structure/closet/critter/corgi
name = "corgi crate"
- content_mob = /mob/living/simple_animal/corgi //This statement is (not) false. See above.
+ content_mob = /mob/living/simple_animal/corgi
+
+/obj/structure/closet/critter/corgi/New()
+ if(prob(50))
+ content_mob = /mob/living/simple_animal/corgi/Lisa
+ ..()
/obj/structure/closet/critter/cow
name = "cow crate"
@@ -70,14 +63,28 @@
name = "chicken crate"
content_mob = /mob/living/simple_animal/chick
+/obj/structure/closet/critter/chick/New()
+ amount = rand(1, 3)
+ ..()
+
/obj/structure/closet/critter/cat
name = "cat crate"
content_mob = /mob/living/simple_animal/cat
+/obj/structure/closet/critter/cat/New()
+ if(prob(50))
+ content_mob = /mob/living/simple_animal/cat/Proc
+ ..()
+
/obj/structure/closet/critter/pug
name = "pug crate"
content_mob = /mob/living/simple_animal/pug
/obj/structure/closet/critter/fox
name = "fox crate"
- content_mob = /mob/living/simple_animal/fox
\ No newline at end of file
+ content_mob = /mob/living/simple_animal/fox
+
+/obj/structure/closet/critter/butterfly
+ name = "butterflies crate"
+ content_mob = /mob/living/simple_animal/butterfly
+ amount = 50
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index c701cc054a5..c22b32d12b2 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -6,6 +6,7 @@
/obj/structure/closet/athletic_mixed/New()
..()
+ new /obj/item/clothing/under/shorts/purple(src)
new /obj/item/clothing/under/shorts/grey(src)
new /obj/item/clothing/under/shorts/black(src)
new /obj/item/clothing/under/shorts/red(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index 6ebd72cae79..e4c16bf5bba 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -30,14 +30,14 @@
/obj/structure/closet/secure_closet/quartermaster/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/cargo(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/cargo(src)
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/shoes/sneakers/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/gloves/fingerless(src)
// new /obj/item/weapon/cartridge/quartermaster(src)
new /obj/item/clothing/suit/fire/firefighter(src)
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/clothing/head/soft(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 921d00453c7..8484f67c549 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -11,8 +11,8 @@
/obj/structure/closet/secure_closet/engineering_chief/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/engineering(src)
- new /obj/item/clothing/suit/toggle/wintercoat/engineering/atmos(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/engineering(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -105,7 +105,7 @@
new /obj/item/weapon/storage/backpack/satchel_eng(src)
new /obj/item/weapon/storage/backpack/dufflebag/engineering(src)
new /obj/item/clothing/under/rank/engineer(src)
- new /obj/item/clothing/shoes/sneakers/orange(src)
+ new /obj/item/clothing/shoes/workboots(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
// new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/device/radio/headset/headset_eng(src)
@@ -132,7 +132,7 @@
new /obj/item/weapon/storage/toolbox/mechanical(src)
new /obj/item/weapon/storage/backpack/satchel_norm(src)
new /obj/item/weapon/storage/backpack/dufflebag/engineering(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen/engi(src)
new /obj/item/weapon/watertank/atmos(src)
new /obj/item/clothing/suit/fire/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
index ccfb8914254..144f70fbd1a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
@@ -11,7 +11,7 @@
New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/hydro(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/hydro(src)
switch(rand(1,2))
if(1)
new /obj/item/clothing/suit/apron(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index ea60993eea4..a47ecc0f87e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -46,9 +46,9 @@
/obj/structure/closet/secure_closet/medical2/New()
..()
- new /obj/item/weapon/tank/anesthetic(src)
- new /obj/item/weapon/tank/anesthetic(src)
- new /obj/item/weapon/tank/anesthetic(src)
+ new /obj/item/weapon/tank/internals/anesthetic(src)
+ new /obj/item/weapon/tank/internals/anesthetic(src)
+ new /obj/item/weapon/tank/internals/anesthetic(src)
new /obj/item/clothing/mask/breath/medical(src)
new /obj/item/clothing/mask/breath/medical(src)
new /obj/item/clothing/mask/breath/medical(src)
@@ -97,7 +97,7 @@
/obj/structure/closet/secure_closet/CMO/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/medical(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/medical(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/misc.dm b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm
new file mode 100644
index 00000000000..c18e2ca667c
--- /dev/null
+++ b/code/game/objects/structures/crates_lockers/closets/secure/misc.dm
@@ -0,0 +1,94 @@
+/obj/structure/closet/secure_closet/ertCom
+ name = "commander's closet"
+ desc = "Emergency Response Team equipment locker."
+ req_access = list(access_cent_captain)
+ icon_state = "capsecure1"
+ icon_closed = "capsecure"
+ icon_locked = "capsecure1"
+ icon_opened = "capsecureopen"
+ icon_broken = "capsecurebroken"
+ icon_off = "capsecureoff"
+
+/obj/structure/closet/secure_closet/ertCom/New()
+ ..()
+ new /obj/item/weapon/storage/firstaid/regular(src)
+ new /obj/item/weapon/storage/box/handcuffs(src)
+ new /obj/item/device/aicard(src)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ new /obj/item/device/flash/handheld(src)
+ if(prob(50))
+ new /obj/item/ammo_box/magazine/m50(src)
+ new /obj/item/ammo_box/magazine/m50(src)
+ new /obj/item/weapon/gun/projectile/automatic/pistol/deagle(src)
+ else
+ new /obj/item/ammo_box/a357(src)
+ new /obj/item/ammo_box/a357(src)
+ new /obj/item/weapon/gun/projectile/revolver/mateba(src)
+ return
+
+/obj/structure/closet/secure_closet/ertSec
+ name = "security closet"
+ desc = "Emergency Response Team equipment locker."
+ req_access = list(access_cent_specops)
+ icon_state = "hossecure1"
+ icon_closed = "hossecure"
+ icon_locked = "hossecure1"
+ icon_opened = "hossecureopen"
+ icon_broken = "hossecurebroken"
+ icon_off = "hossecureoff"
+
+/obj/structure/closet/secure_closet/ertSec/New()
+ ..()
+ new /obj/item/weapon/storage/box/flashbangs(src)
+ new /obj/item/weapon/storage/box/teargas(src)
+ new /obj/item/weapon/storage/box/flashes(src)
+ new /obj/item/weapon/storage/box/handcuffs(src)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ new /obj/item/weapon/shield/riot/tele(src)
+ return
+
+/obj/structure/closet/secure_closet/ertMed
+ name = "medical closet"
+ desc = "Emergency Response Team equipment locker."
+ req_access = list(access_cent_medical)
+ icon_state = "cmosecure1"
+ icon_closed = "cmosecure"
+ icon_locked = "cmosecure1"
+ icon_opened = "cmosecureopen"
+ icon_broken = "cmosecurebroken"
+ icon_off = "cmosecureoff"
+
+/obj/structure/closet/secure_closet/ertMed/New()
+ ..()
+ new /obj/item/weapon/storage/firstaid/o2(src)
+ new /obj/item/weapon/storage/firstaid/toxin(src)
+ new /obj/item/weapon/storage/firstaid/fire(src)
+ new /obj/item/weapon/storage/firstaid/brute(src)
+ new /obj/item/weapon/storage/firstaid/regular(src)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ new /obj/machinery/bot/medbot(src)
+ return
+
+/obj/structure/closet/secure_closet/ertEngi
+ name = "engineer closet"
+ desc = "Emergency Response Team equipment locker."
+ req_access = list(access_cent_storage)
+ icon_state = "securece1"
+ icon_closed = "securece"
+ icon_locked = "securece1"
+ icon_opened = "secureceopen"
+ icon_broken = "securecebroken"
+ icon_off = "secureceoff"
+
+/obj/structure/closet/secure_closet/ertEngi/New()
+ ..()
+ new /obj/item/stack/sheet/plasteel(src, 50)
+ new /obj/item/stack/sheet/metal(src, 50)
+ new /obj/item/stack/sheet/glass(src, 50)
+ new /obj/item/clothing/shoes/magboots(src)
+ new /obj/item/weapon/storage/box/metalfoam(src)
+ new /obj/item/weapon/melee/baton/loaded(src)
+ new /obj/item/weapon/rcd_ammo/large(src)
+ new /obj/item/weapon/rcd_ammo/large(src)
+ new /obj/item/weapon/rcd_ammo/large(src)
+ return
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 99da71e8f6d..1179a079e6e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -15,7 +15,7 @@
new /obj/item/clothing/shoes/sneakers/white(src)
// new /obj/item/weapon/cartridge/signal/toxins(src)
new /obj/item/device/radio/headset/headset_sci(src)
- new /obj/item/weapon/tank/air(src)
+ new /obj/item/weapon/tank/internals/air(src)
new /obj/item/clothing/mask/gas(src)
return
@@ -33,7 +33,7 @@
/obj/structure/closet/secure_closet/RD/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/science(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/science(src)
new /obj/item/clothing/suit/bio_suit/scientist(src)
new /obj/item/clothing/head/bio_hood/scientist(src)
new /obj/item/clothing/suit/toggle/labcoat(src)
@@ -44,7 +44,7 @@
new /obj/item/clothing/shoes/sneakers/white(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/device/radio/headset/heads/rd(src)
- new /obj/item/weapon/tank/air(src)
+ new /obj/item/weapon/tank/internals/air(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/suit/armor/reactive(src)
new /obj/item/device/flash/handheld(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 5cc981fc00c..c40411364be 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -10,7 +10,7 @@
/obj/structure/closet/secure_closet/captains/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/captain(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/captain(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/captain(src)
else
@@ -40,7 +40,7 @@
/obj/structure/closet/secure_closet/hop/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/cargo(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/cargo(src)
new /obj/item/clothing/under/rank/head_of_personnel(src)
new /obj/item/clothing/head/hopcap(src)
new /obj/item/weapon/cartridge/hop(src)
@@ -69,7 +69,7 @@
/obj/structure/closet/secure_closet/hos/New()
..()
- new /obj/item/clothing/suit/toggle/wintercoat/security(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/security(src)
new /obj/item/weapon/cartridge/hos(src)
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/clothing/under/hosparadefem(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 2f3d9932bda..0cdf06406cf 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -5,49 +5,6 @@
icon_closed = "syndicate"
icon_opened = "syndicateopen"
-/obj/structure/closet/syndicate/ertCom/New()
- name = "commanders closet"
- desc = "Emergency Response Team equipment locker"
- icon_state = "capsecureoff"
- icon_closed = "capsecureoff"
- icon_opened = "capsecureopen"
-// new /obj/item/weapon/card/id/ert(src)
- new /obj/item/weapon/storage/backpack/captain(src)
- return
-
-/obj/structure/closet/syndicate/ertSec/New()
- name = "security closet"
- desc = "Emergency Response Team equipment locker"
- icon_state = "secoff"
- icon_closed = "secoff"
- icon_opened = "secopen"
- new /obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol/loyalpin(src)
- new /obj/item/weapon/card/id/ert/Security(src)
- new /obj/item/weapon/storage/backpack/security(src)
- return
-
-/obj/structure/closet/syndicate/ertMed/New()
- name = "medical closet"
- desc = "Emergency Response Team equipment locker"
- icon_state = "securemedoff"
- icon_closed = "securemedoff"
- icon_opened = "securemedopen"
- new /obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol/loyalpin(src)
- new /obj/item/weapon/card/id/ert/Medical(src)
- new /obj/item/weapon/storage/backpack/medic(src)
- return
-
-/obj/structure/closet/syndicate/ertEngi/New()
- name = "engineer closet"
- desc = "Emergency Response Team equipment locker"
- icon_state = "secureengoff"
- icon_closed = "secureengoff"
- icon_opened = "secureengopen"
- new /obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol/loyalpin(src)
- new /obj/item/weapon/card/id/ert/Engineer(src)
- new /obj/item/weapon/storage/backpack/industrial(src)
- return
-
/obj/structure/closet/syndicate/personal
desc = "It's a personal storage unit for operative gear."
@@ -168,4 +125,4 @@
var/obj/item/stack/R = new res(src)
R.amount = R.max_amount
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 27c2655da50..7fb6712b9e7 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -27,18 +27,18 @@
switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
if ("small")
- new /obj/item/weapon/tank/emergency_oxygen(src)
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen(src)
if ("aid")
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen(src)
new /obj/item/weapon/storage/firstaid/o2(src)
if ("tank")
- new /obj/item/weapon/tank/air(src)
+ new /obj/item/weapon/tank/internals/air(src)
if ("both")
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/internals/emergency_oxygen(src)
new /obj/item/clothing/mask/breath(src)
if ("nothing")
@@ -54,7 +54,7 @@
qdel(src)*/
/obj/structure/closet/emcloset/legacy/New()
- new /obj/item/weapon/tank/oxygen(src)
+ new /obj/item/weapon/tank/internals/oxygen(src)
new /obj/item/clothing/mask/gas(src)
/*
@@ -72,7 +72,7 @@
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
- new /obj/item/weapon/tank/oxygen/red(src)
+ new /obj/item/weapon/tank/internals/oxygen/red(src)
new /obj/item/weapon/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
@@ -83,7 +83,7 @@
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flashlight(src)
- new /obj/item/weapon/tank/oxygen/red(src)
+ new /obj/item/weapon/tank/internals/oxygen/red(src)
new /obj/item/weapon/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 725e42645c5..c7d5f263928 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -95,7 +95,7 @@
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/clothing/suit/nun(src)
new /obj/item/clothing/head/nun_hood(src)
- new /obj/item/clothing/suit/toggle/chaplain_hoodie(src)
+ new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
new /obj/item/clothing/suit/holidaypriest(src)
new /obj/item/weapon/storage/backpack/cultpack (src)
new /obj/item/weapon/storage/fancy/candle_box(src)
@@ -354,7 +354,7 @@
if(prob(40))
new /obj/item/clothing/under/assistantformal(src)
if(prob(30))
- new /obj/item/clothing/suit/toggle/wintercoat(src)
+ new /obj/item/clothing/suit/hooded/wintercoat(src)
new /obj/item/clothing/shoes/winterboots(src)
return
@@ -394,6 +394,6 @@
new /obj/item/clothing/shoes/sneakers/brown(src)
new /obj/item/clothing/shoes/sneakers/white(src)
if(prob(30))
- new /obj/item/clothing/suit/toggle/wintercoat(src)
+ new /obj/item/clothing/suit/hooded/wintercoat(src)
new /obj/item/clothing/shoes/winterboots(src)
return
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 393538d56e2..5a8bc0ca53d 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -144,7 +144,7 @@
/obj/structure/janitorialcart/update_icon()
- overlays = null
+ overlays.Cut()
if(mybag)
overlays += "cart_garbage"
if(mymop)
@@ -157,53 +157,72 @@
overlays += "cart_sign[signs]"
-//old style retardo-cart
+//old style PIMP-CART
/obj/structure/stool/bed/chair/janicart
name = "janicart"
+ desc = "A brave janitor cyborg gave its life to produce such an amazing combination of speed and utility."
icon = 'icons/obj/vehicles.dmi'
icon_state = "pussywagon"
anchored = 0
density = 1
- flags = OPENCONTAINER
- //copypaste sorry
- var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
- var/obj/item/weapon/storage/bag/trash/mybag = null
+ var/obj/item/weapon/storage/bag/trash/mybag = null
var/callme = "pimpin' ride" //how do people refer to it?
-
+ var/move_delay = 0
+ var/floorbuffer = 0
+ var/keytype = /obj/item/key/janitor
/obj/structure/stool/bed/chair/janicart/New()
handle_rotation()
- create_reagents(100)
+/obj/structure/stool/bed/chair/janicart/Move(a, b, flag)
+ ..()
+ if(floorbuffer)
+ var/turf/tile = loc
+ if(isturf(tile))
+ tile.clean_blood()
+ if (istype(tile, /turf/simulated/floor))
+ var/turf/simulated/floor/F = tile
+ F.dirt = 0
+ for(var/A in tile)
+ if(istype(A, /obj/effect))
+ if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
+ qdel(A)
/obj/structure/stool/bed/chair/janicart/examine(mob/user)
..()
- if(mybag)
- user << "\A [mybag] is hanging on \the [callme]."
+ if(floorbuffer)
+ user << "It has been upgraded with a floor buffer."
/obj/structure/stool/bed/chair/janicart/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/weapon/mop))
- if(reagents.total_volume > 1)
- reagents.trans_to(I, 2)
- user << "You wet [I] in the [callme]."
- playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
- else
- user << "This [callme] is out of water!"
- else if(istype(I, /obj/item/key))
+ if(istype(I, keytype))
user << "Hold [I] in one of your hands while you drive this [callme]."
else if(istype(I, /obj/item/weapon/storage/bag/trash))
- user << "You hook the trashbag onto the [callme]."
- user.drop_item()
- I.loc = src
- mybag = I
+ if(keytype == /obj/item/key/janitor)
+ user << "You hook the trashbag onto the [callme]."
+ user.drop_item()
+ I.loc = src
+ mybag = I
+ else if(istype(I, /obj/item/janiupgrade))
+ if(keytype == /obj/item/key/janitor)
+ floorbuffer = 1
+ qdel(I)
+ user << "You upgrade the [callme] with the floor buffer."
+ update_icon()
+/obj/structure/stool/bed/chair/janicart/update_icon()
+ overlays.Cut()
+ if(mybag)
+ overlays += "cart_garbage"
+ if(floorbuffer)
+ overlays += "cart_buffer"
/obj/structure/stool/bed/chair/janicart/attack_hand(mob/user)
if(mybag)
mybag.loc = get_turf(user)
user.put_in_hands(mybag)
mybag = null
+ update_icon()
else
..()
@@ -211,31 +230,40 @@
/obj/structure/stool/bed/chair/janicart/relaymove(mob/user, direction)
if(user.stat || user.stunned || user.weakened || user.paralysis)
unbuckle_mob()
- if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key))
- if(!Process_Spacemove(direction))
+ if(istype(user.l_hand, keytype) || istype(user.r_hand, keytype))
+ if(!Process_Spacemove(direction) || !has_gravity(src.loc) || move_delay)
return
step(src, direction)
update_mob()
handle_rotation()
+ if(istype(src.loc, /turf/simulated))
+ var/turf/simulated/T = src.loc
+ if(T.wet == 2) //Lube! Fall off!
+ playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
+ buckled_mob.Stun(7)
+ buckled_mob.Weaken(7)
+ unbuckle_mob()
+ step(src, dir)
+ move_delay = 1
+ spawn(2)
+ move_delay = 0
else
user << "You'll need the keys in one of your hands to drive this [callme]."
-/obj/structure/stool/bed/chair/janicart/post_buckle_mob(mob/living/M)
+/obj/structure/stool/bed/chair/janicart/user_buckle_mob(mob/living/M, mob/user)
+ M.loc = loc
+ ..()
update_mob()
- return ..()
-
/obj/structure/stool/bed/chair/janicart/unbuckle_mob()
- var/mob/living/M = ..()
- if(M)
- M.pixel_x = 0
- M.pixel_y = 0
- return M
-
+ if(buckled_mob)
+ buckled_mob.pixel_x = 0
+ buckled_mob.pixel_y = 0
+ ..()
/obj/structure/stool/bed/chair/janicart/handle_rotation()
- if(dir == SOUTH)
+ if((dir == SOUTH) || (dir == WEST) || (dir == EAST))
layer = FLY_LAYER
else
layer = OBJ_LAYER
@@ -256,26 +284,50 @@
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 7
if(WEST)
- buckled_mob.pixel_x = 13
+ buckled_mob.pixel_x = 12
buckled_mob.pixel_y = 7
if(NORTH)
buckled_mob.pixel_x = 0
buckled_mob.pixel_y = 4
if(EAST)
- buckled_mob.pixel_x = -13
+ buckled_mob.pixel_x = -12
buckled_mob.pixel_y = 7
/obj/structure/stool/bed/chair/janicart/bullet_act(var/obj/item/projectile/Proj)
if(buckled_mob)
- if(prob(85))
- return buckled_mob.bullet_act(Proj)
- visible_message("[Proj] ricochets off the [callme]!")
-
+ buckled_mob.bullet_act(Proj)
/obj/item/key
name = "key"
- desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
+ desc = "A small grey key."
icon = 'icons/obj/vehicles.dmi'
- icon_state = "keys"
- w_class = 1
\ No newline at end of file
+ icon_state = "key"
+ w_class = 1
+
+/obj/item/key/janitor
+ desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
+ icon_state = "keyjanitor"
+
+/obj/item/key/security
+ desc = "A keyring with a small steel key, and a rubber stun baton accessory."
+ icon_state = "keysec"
+
+/obj/item/janiupgrade
+ name = "floor buffer upgrade"
+ desc = "An upgrade for mobile janicarts."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "upgrade"
+
+/obj/structure/stool/bed/chair/janicart/secway
+ name = "secway"
+ desc = "A brave security cyborg gave its life to help you look like a complete tool."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "secway"
+ callme = "secway"
+ keytype = /obj/item/key/security
+
+/obj/structure/stool/bed/chair/janicart/secway/update_mob()
+ if(buckled_mob)
+ buckled_mob.dir = dir
+ buckled_mob.pixel_y = 4
\ No newline at end of file
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 1d1d5661cea..6b43db959e0 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -1,3 +1,10 @@
+
+#define SKINTYPE_MONKEY 1
+#define SKINTYPE_ALIEN 2
+
+#define MEATTYPE_MONKEY 1
+#define MEATTYPE_ALIEN 2
+
//////Kitchen Spike
/obj/structure/kitchenspike
@@ -9,7 +16,9 @@
anchored = 1
var/meat = 0
var/occupied = 0
- var/meattype = 0 // 0 - Nothing, 1 - Monkey, 2 - Xeno
+ var/meattype = null
+ var/skin = 0
+ var/skintype = null
/obj/structure/kitchenspike/attack_paw(mob/user as mob)
return src.attack_hand(usr)
@@ -22,7 +31,9 @@
src.icon_state = "spikebloody"
src.occupied = 1
src.meat = 5
- src.meattype = 1
+ src.meattype = MEATTYPE_MONKEY
+ src.skin = 1
+ src.skintype = SKINTYPE_MONKEY
for(var/mob/O in viewers(src, null))
O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!"))
qdel(G.affecting)
@@ -35,7 +46,9 @@
src.icon_state = "spikebloodygreen"
src.occupied = 1
src.meat = 5
- src.meattype = 2
+ src.meattype = MEATTYPE_ALIEN
+ src.skin = 1
+ src.skintype = SKINTYPE_ALIEN
for(var/mob/O in viewers(src, null))
O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!"))
qdel(G.affecting)
@@ -55,10 +68,14 @@
if(..())
return
if(src.occupied)
- if(src.meattype == 1)
- if(src.meat > 1)
+ if(src.meattype == MEATTYPE_MONKEY && src.skintype == SKINTYPE_MONKEY)
+ if(src.skin >= 1)
+ src.skin--
+ new /obj/item/stack/sheet/animalhide/monkey(src.loc)
+ user << "You remove the hide from the monkey!"
+ else if(src.meat > 1)
src.meat--
- new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey( src.loc )
+ new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src.loc )
usr << "You remove some meat from the monkey."
else if(src.meat == 1)
src.meat--
@@ -66,10 +83,14 @@
usr << "You remove the last piece of meat from the monkey!"
src.icon_state = "spike"
src.occupied = 0
- else if(src.meattype == 2)
- if(src.meat > 1)
+ else if(src.meattype == MEATTYPE_ALIEN && src.skintype == SKINTYPE_ALIEN)
+ if(src.skin >= 1)
+ src.skin--
+ new /obj/item/stack/sheet/animalhide/xeno(src.loc)
+ user << "You remove the hide from the alien!"
+ else if(src.meat > 1)
src.meat--
- new /obj/item/weapon/reagent_containers/food/snacks/xenomeat( src.loc )
+ new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc )
usr << "You remove some meat from the alien."
else if(src.meat == 1)
src.meat--
@@ -77,3 +98,9 @@
usr << "You remove the last piece of meat from the alien!"
src.icon_state = "spike"
src.occupied = 0
+
+#undef SKINTYPE_MONKEY
+#undef SKINTYPE_ALIEN
+
+#undef MEATTYPE_MONKEY
+#undef MEATTYPE_ALIEN
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 52e4b1a48a5..76e9135128b 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -100,6 +100,13 @@
T.cancable = 1
..()
+/obj/structure/lattice/catwalk/Move()
+ var/turf/T = loc
+ T.cancable = 0
+ for(var/obj/structure/cable/C in T)
+ C.Deconstruct()
+ ..()
+
/obj/structure/lattice/catwalk/Destroy()
var/turf/T = loc
T.cancable = 0
@@ -127,11 +134,8 @@
var/dir_sum = 0
for (var/direction in cardinal)
- if(locate(/obj/structure/lattice/catwalk, get_step(src, direction)))
+ if(locate(/obj/structure/lattice/catwalk, get_step(src, direction))) //so we only blend with other catwalks
dir_sum += direction
- else
- if(!(istype(get_step(src, direction), /turf/space)))
- dir_sum += direction
icon_state = "[name][dir_sum]"
return
\ No newline at end of file
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 8a1591531a0..bfb9df96d7f 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -123,4 +123,29 @@
/obj/structure/sign/botany
name = "\improper HYDROPONICS"
desc = "A warning sign which reads 'HYDROPONICS'"
- icon_state = "hydro1"
\ No newline at end of file
+ icon_state = "hydro1"
+
+/obj/structure/sign/directions/science
+ name = "science department"
+ desc = "A direction sign, pointing out which way the Science department is."
+ icon_state = "direction_sci"
+
+/obj/structure/sign/directions/engineering
+ name = "engineering department"
+ desc = "A direction sign, pointing out which way the Engineering department is."
+ icon_state = "direction_eng"
+
+/obj/structure/sign/directions/security
+ name = "security department"
+ desc = "A direction sign, pointing out which way the Security department is."
+ icon_state = "direction_sec"
+
+/obj/structure/sign/directions/medical
+ name = "medical bay"
+ desc = "A direction sign, pointing out which way the Medical Bay is."
+ icon_state = "direction_med"
+
+/obj/structure/sign/directions/evac
+ name = "escape arm"
+ desc = "A direction sign, pointing out which way the escape shuttle dock is."
+ icon_state = "direction_evac"
\ No newline at end of file
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 0dcf0f5f451..06f5aa67d74 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -48,7 +48,7 @@
/obj/structure/dispenser/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I, /obj/item/weapon/tank/oxygen) || istype(I, /obj/item/weapon/tank/air) || istype(I, /obj/item/weapon/tank/anesthetic))
+ if(istype(I, /obj/item/weapon/tank/internals/oxygen) || istype(I, /obj/item/weapon/tank/internals/air) || istype(I, /obj/item/weapon/tank/internals/anesthetic))
if(oxygentanks < 10)
user.drop_item()
I.loc = src
@@ -57,7 +57,7 @@
user << "You put [I] in [src]."
else
user << "[src] is full."
- if(istype(I, /obj/item/weapon/tank/plasma))
+ if(istype(I, /obj/item/weapon/tank/internals/plasma))
if(plasmatanks < 10)
user.drop_item()
I.loc = src
@@ -76,24 +76,24 @@
usr.set_machine(src)
if(href_list["oxygen"])
if(oxygentanks > 0)
- var/obj/item/weapon/tank/oxygen/O
+ var/obj/item/weapon/tank/internals/oxygen/O
if(oxytanks.len == oxygentanks)
O = oxytanks[1]
oxytanks.Remove(O)
else
- O = new /obj/item/weapon/tank/oxygen(loc)
+ O = new /obj/item/weapon/tank/internals/oxygen(loc)
O.loc = loc
usr << "You take [O] out of [src]."
oxygentanks--
update_icon()
if(href_list["plasma"])
if(plasmatanks > 0)
- var/obj/item/weapon/tank/plasma/P
+ var/obj/item/weapon/tank/internals/plasma/P
if(platanks.len == plasmatanks)
P = platanks[1]
platanks.Remove(P)
else
- P = new /obj/item/weapon/tank/plasma(loc)
+ P = new /obj/item/weapon/tank/internals/plasma(loc)
P.loc = loc
usr << "You take [P] out of [src]."
plasmatanks--
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index d96113a638c..2ef4066499b 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -126,7 +126,9 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob)
if(!C || !user)
return 1
- if(istype(C, /obj/item/weapon/crowbar))
+ if(..())
+ return 1
+ if(intact && istype(C, /obj/item/weapon/crowbar))
if(broken || burnt)
broken = 0
burnt = 0
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 9f50b65328c..d587ae0c2a5 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -47,6 +47,23 @@
density = 1
blocks_air = 1
+//sub-type to be used for interior shuttle walls
+//won't get an underlay of the destination turf on shuttle move
+/turf/simulated/shuttle/wall/interior/copyTurf(turf/T)
+ if(T.type != type)
+ T = new type(T)
+ if(underlays.len)
+ T.underlays = underlays
+ if(T.icon_state != icon_state)
+ T.icon_state = icon_state
+ if(T.icon != icon)
+ T.icon = icon
+ if(T.color != color)
+ T.color = color
+ if(T.dir != dir)
+ T.dir = dir
+ return T
+
/turf/simulated/shuttle/floor
name = "floor"
icon_state = "floor"
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 4e7a2eabaff..c0c65f4d039 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -27,7 +27,7 @@
icon_state = icon_plating //Because asteroids are 'platings' too.
/turf/simulated/floor/plating/attackby(obj/item/C as obj, mob/user as mob)
- if(!C || !user)
+ if(..())
return
if(istype(C, /obj/item/stack/rods))
if(broken || burnt)
@@ -58,13 +58,6 @@
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
else
user << "This section is too damaged to support a tile. Use a welder to fix the damage."
- else if(istype(C, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/coil = C
- for(var/obj/structure/cable/LC in src)
- if((LC.d1==0)||(LC.d2==0))
- LC.attackby(C,user)
- return
- coil.place_turf(src, user)
else if(istype(C, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/welder = C
if( welder.isOn() && (broken || burnt) )
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 001f4437de7..31f898eca1d 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -20,6 +20,7 @@
return src.attack_hand(user)
/turf/space/attackby(obj/item/C, mob/user)
+ ..()
if(istype(C, /obj/item/stack/rods))
var/obj/item/stack/rods/R = C
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
@@ -28,7 +29,7 @@
user << "There is already a catwalk here."
return
if(L)
- if(R.use(2))
+ if(R.use(1))
user << "Constructing catwalk..."
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
qdel(L)
@@ -56,13 +57,6 @@
user << "You need one floor tile to build a floor."
else
user << "The plating is going to need some support. Place metal rods first."
- if(istype(C, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/coil = C
- for(var/obj/structure/cable/LC in src)
- if((LC.d1==0)||(LC.d2==0))
- LC.attackby(C,user)
- return
- coil.place_turf(src, user)
/turf/space/Entered(atom/movable/A)
..()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 6f2fb4f2d59..f90bed96b57 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -42,6 +42,18 @@
/turf/attack_hand(mob/user as mob)
user.Move_Pulled(src)
+/turf/attackby(obj/item/C, mob/user)
+ if(cancable && istype(C, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/coil = C
+ for(var/obj/structure/cable/LC in src)
+ if((LC.d1==0)||(LC.d2==0))
+ LC.attackby(C,user)
+ return
+ coil.place_turf(src, user)
+ return 1
+
+ return 0
+
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
if (!mover)
return 1
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index 3403d69ba30..1a4507dfd1f 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -7,6 +7,7 @@
name = "plating"
icon_state = "plating"
intact = 0
+ cancable = 1
/turf/unsimulated/floor/bluegrid
icon = 'icons/turf/floors.dmi'
diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm
index 9a1bdf49f08..7244345c7d1 100644
--- a/code/game/turfs/unsimulated/walls.dm
+++ b/code/game/turfs/unsimulated/walls.dm
@@ -43,6 +43,23 @@ turf/unsimulated/wall/splashscreen
density = 1
blocks_air = 1
+//sub-type to be used for interior shuttle walls
+//won't get an underlay of the destination turf on shuttle move
+/turf/unsimulated/shuttle/wall/interior/copyTurf(turf/T)
+ if(T.type != type)
+ T = new type(T)
+ if(underlays.len)
+ T.underlays = underlays
+ if(T.icon_state != icon_state)
+ T.icon_state = icon_state
+ if(T.icon != icon)
+ T.icon = icon
+ if(T.color != color)
+ T.color = color
+ if(T.dir != dir)
+ T.dir = dir
+ return T
+
/turf/unsimulated/shuttle/floor
name = "floor"
icon_state = "floor"
\ No newline at end of file
diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm
index 7e8a502250e..c6f7d383936 100644
--- a/code/modules/admin/NewBan.dm
+++ b/code/modules/admin/NewBan.dm
@@ -116,7 +116,10 @@ var/savefile/Banlist
Banlist["temp"] << temp
if (temp)
Banlist["minutes"] << bantimestamp
- notes_add(ckey, "Banned for [minutes] minutes - [reason]")
+ if(!temp)
+ notes_add(ckey, "Permanently banned - [reason]")
+ else
+ notes_add(ckey, "Banned for [minutes] minutes - [reason]")
return 1
/proc/RemoveBan(foldername)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 28ce99bed4d..a05337f3f68 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -50,7 +50,8 @@ var/global/floorIsLava = 0
body += "Notes "
if(M.client)
- body += "| Prison | "
+ body += "| Prison | "
+ body += "\ Send back to Lobby | "
var/muted = M.client.prefs.muted
body += "
Mute: "
body += "\[IC | "
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index c3d664ab1d4..dcaab15c107 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -49,7 +49,7 @@ var/list/admin_verbs_admin = list(
/client/proc/Getmob, /*teleports a mob to our location*/
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage
- /client/proc/Jump,
+ /client/proc/jumptoarea,
/client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/
/client/proc/jumptomob, /*allows us to jump to a specific mob*/
/client/proc/jumptoturf, /*allows us to jump to a specific turf*/
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index 425837d9e84..656f0adfb7c 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -20,4 +20,5 @@
H.hair_color = random_short_color()
H.facial_hair_color = H.hair_color
H.eye_color = random_eye_color()
+ H.dna.blood_type = random_blood_type()
H.update_icons()
\ No newline at end of file
diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm
index 26c5719eddf..c4a719767d3 100644
--- a/code/modules/admin/player_notes.dm
+++ b/code/modules/admin/player_notes.dm
@@ -20,7 +20,7 @@
while(!notesfile.eof)
var/note
notesfile >> note
- dat += note
+ dat += note + "
"
var/datum/browser/popup = new(usr, "player_notes", "Player Notes", 700, 400)
popup.set_content(dat)
popup.open()
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 49119c0109c..fd99c379543 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1050,6 +1050,31 @@
log_admin("[key_name(usr)] has sent [key_name(M)] to Prison!")
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] Prison!")
+
+ else if(href_list["sendbacktolobby"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/mob/M = locate(href_list["sendbacktolobby"])
+
+ if(!isobserver(M))
+ usr << "You can only send ghost players back to the Lobby."
+ return
+
+ if(!M.client)
+ usr << "[M] doesn't seem to have an active client."
+ return
+
+ if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes")
+ return
+
+ log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby.")
+ message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby.")
+
+ var/mob/new_player/NP = new()
+ NP.ckey = M.ckey
+ qdel(M)
+
else if(href_list["tdome1"])
if(!check_rights(R_FUN)) return
@@ -1555,7 +1580,7 @@
else if(!ispath(path, /obj) && !ispath(path, /turf) && !ispath(path, /mob))
removed_paths += dirty_path
continue
- else if(ispath(path, /obj/item/weapon/gun/energy/pulse_rifle))
+ else if(ispath(path, /obj/item/weapon/gun/energy/pulse))
if(!check_rights(R_FUN,0))
removed_paths += dirty_path
continue
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index 571b683c704..8ec36f3d008 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -1,11 +1,11 @@
-/client/proc/Jump(area/A in returnSortedAreas())
+/client/proc/jumptoarea(area/A in sortedAreas)
set name = "Jump to Area"
set desc = "Area to jump to"
set category = "Admin"
if(!src.holder)
src << "Only administrators may use this command."
return
-
+
if(!A)
return
@@ -19,8 +19,8 @@
var/turf/T = pick_n_take(turfs)
if(!T)
src << "Nowhere to jump to!"
- return
- usr.loc = T
+ return
+ admin_forcemove(usr, T)
log_admin("[key_name(usr)] jumped to [A]")
message_admins("[key_name_admin(usr)] jumped to [A]")
feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -53,7 +53,7 @@
var/turf/T = get_turf(M)
if(T && isturf(T))
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- A.loc = T
+ admin_forcemove(A, M.loc)
else
A << "This mob is not located in the game world."
@@ -91,7 +91,9 @@
var/mob/M = selection:mob
log_admin("[key_name(usr)] jumped to [key_name(M)]")
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]")
- usr.loc = M.loc
+
+ admin_forcemove(usr, M.loc)
+
feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Getmob(var/mob/M in mob_list)
@@ -104,7 +106,7 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]")
- M.loc = get_turf(usr)
+ admin_forcemove(M, get_turf(usr))
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/Getkey()
@@ -129,7 +131,8 @@
log_admin("[key_name(usr)] teleported [key_name(M)]")
message_admins("[key_name_admin(usr)] teleported [key_name(M)]")
if(M)
- M.loc = get_turf(usr)
+ admin_forcemove(M, get_turf(usr))
+ usr.loc = M.loc
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/sendmob(var/mob/M in sortmobs())
@@ -138,10 +141,27 @@
if(!src.holder)
src << "Only administrators may use this command."
return
- var/area/A = input(usr, "Pick an area.", "Pick an area") in returnSortedAreas()
+ var/area/A = input(usr, "Pick an area.", "Pick an area") in sortedAreas
if(A)
- M.loc = pick(get_area_turfs(A))
+ admin_forcemove(M, pick(get_area_turfs(A)))
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
- message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]")
\ No newline at end of file
+ message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]")
+
+/proc/admin_forcemove(var/mob/mover, var/atom/newloc)
+ var/startdensity = mover.density
+ var/startflags = mover.pass_flags
+ var/startincorporeal = 0
+ if(istype(mover, /mob/living))
+ var/mob/living/L = mover
+ startincorporeal = L.incorporeal_move
+ L.incorporeal_move = 1
+ mover.density = 0
+ mover.pass_flags = ALL
+ newloc.density = 0
+ . = mover.Move(newloc)
+ mover.density = startdensity
+ mover.pass_flags = startflags
+ if(istype(mover, /mob/living))
+ var/mob/living/L = mover
+ L.incorporeal_move = startincorporeal
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 8644ac28ff2..71023368948 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -597,6 +597,7 @@ var/global/list/g_fancy_list_of_types = null
"assassin",
"mobster",
"death commando",
+ "emergency response officer",
"centcom official",
"centcom commander",
"special ops officer",
@@ -653,7 +654,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(M), slot_r_hand)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchenknife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
@@ -748,7 +749,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
- M.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chaplain_hoodie(M), slot_wear_suit)
+ M.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/chaplain_hoodie(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store)
@@ -820,7 +821,15 @@ var/global/list/g_fancy_list_of_types = null
equip_deathsquad(M)
if("emergency response officer")
- equip_emergencyresponsesquad(M)
+ switch(input("Which class?") in list("Commander","Security","Engineer","Medical"))
+ if("Commander")
+ equip_emergencyresponsesquad(M, "commander")
+ if("Security")
+ equip_emergencyresponsesquad(M, "sec")
+ if("Engineer")
+ equip_emergencyresponsesquad(M, "eng")
+ if("Medic")
+ equip_emergencyresponsesquad(M, "med")
if("centcom official")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
@@ -883,7 +892,7 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle/M1911(M), slot_belt)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
@@ -1011,7 +1020,7 @@ var/global/list/g_fancy_list_of_types = null
for(var/obj/machinery/power/rad_collector/Rad in world)
if(Rad.anchored)
if(!Rad.P)
- var/obj/item/weapon/tank/plasma/Plasma = new/obj/item/weapon/tank/plasma(Rad)
+ var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad)
Plasma.air_contents.toxins = 70
Rad.drainratio = 0
Rad.P = Plasma
@@ -1087,10 +1096,10 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/shield/energy(M), slot_r_store)
- M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(M), slot_s_store)
+ M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
- M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse_rifle(M), slot_r_hand)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(M), slot_r_hand)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)//Here you go Deuryn
@@ -1107,21 +1116,82 @@ var/global/list/g_fancy_list_of_types = null
M.equip_to_slot_or_del(W, slot_wear_id)
//Emergency Response Team
-/proc/equip_emergencyresponsesquad(var/mob/living/carbon/human/M, var/officer)
+/proc/equip_emergencyresponsesquad(var/mob/living/carbon/human/M, var/ertrole)
var/obj/item/device/radio/R = new /obj/item/device/radio/headset(M)
R.set_frequency(1441)
M.equip_to_slot_or_del(R, slot_ears)
- if(officer)
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
-// M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back)
- M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert(M), slot_wear_id)
- else
- M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
- M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
- M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
+ switch(ertrole)
+ if("commander")
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert(M), slot_wear_suit)
+ M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert(M), slot_wear_id)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt)
+ M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
+
+ if("sec")
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert/sec(M), slot_wear_suit)
+ M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Security(M), slot_wear_id)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/handcuffs(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert/sec(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/carbine/loyalpin(M), slot_in_backpack)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt)
+
+ if("med")
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert/med(M), slot_wear_suit)
+ M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Medical(M), slot_wear_id)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert/med(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical(M), slot_belt)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_r_hand)
+
+ if("eng")
+ M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
+ M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
+ M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
+ M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/ert/engi(M), slot_wear_suit)
+ M.equip_to_slot_or_del(new /obj/item/weapon/card/id/ert/Engineer(M), slot_wear_id)
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(M), slot_back)
+ M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(M), slot_glasses)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/ert/engi(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/rcd/combat(M), slot_in_backpack)
+ M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
+
+ M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(M), slot_belt)
+ M.equip_to_slot_or_del(new /obj/item/weapon/rcd_ammo/large(M), slot_l_store)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
L.imp_in = M
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index cfac035390e..46ace545763 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -467,12 +467,19 @@ client/proc/one_click_antag()
var/mob/living/carbon/human/ERTOperative = new(spawnloc)
chosen_candidate.client.prefs.copy_to(ERTOperative)
ready_dna(ERTOperative)
- if(numagents == 1) //If Squad Leader
- ERTOperative.real_name = "Commander [pick(ERTOperative.real_name)]"
- equip_emergencyresponsesquad(ERTOperative, 1)
- else
- ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
- equip_emergencyresponsesquad(ERTOperative)
+ switch(numagents)
+ if(1)
+ ERTOperative.real_name = "Commander [pick(ERTOperative.real_name)]"
+ equip_emergencyresponsesquad(ERTOperative, "commander")
+ if(2 || 5)
+ ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
+ equip_emergencyresponsesquad(ERTOperative, "sec")
+ if(3 || 6)
+ ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
+ equip_emergencyresponsesquad(ERTOperative, "med")
+ if(4 || 7)
+ ERTOperative.real_name = "Officer [pick(ERTOperative.real_name)]"
+ equip_emergencyresponsesquad(ERTOperative, "eng")
ERTOperative.key = chosen_candidate.key
ERTOperative.mind.assigned_role = "ERT"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 716c923c789..5fa73c314ec 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -681,13 +681,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes") return
- if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
- var/choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel")
- if(choice == "Confirm")
- SSshuttle.emergencyFakeRecall = rand(5,9) * 0.1
- else
- return
-
SSshuttle.emergency.request()
feedback_add_details("admin_verb","CSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-called the emergency shuttle.")
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 24b3d0e0d09..703962ae3ba 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -148,7 +148,7 @@
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
corpseback = /obj/item/weapon/tank/jetpack/oxygen
- corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
+ corpsepocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
@@ -198,7 +198,6 @@
/obj/effect/landmark/corpse/engineer/rig
corpsesuit = /obj/item/clothing/suit/space/hardsuit
corpsemask = /obj/item/clothing/mask/breath
- corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit
/obj/effect/landmark/corpse/clown
name = "Clown"
@@ -236,7 +235,6 @@
/obj/effect/landmark/corpse/miner/rig
corpsesuit = /obj/item/clothing/suit/space/hardsuit/mining
corpsemask = /obj/item/clothing/mask/breath
- corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/mining
/////////////////Officers//////////////////////
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index f3d7830d6de..7ae4d730d3c 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -144,7 +144,7 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
- allowed = list(/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING
var/blood_overlay_type = "suit"
@@ -155,10 +155,10 @@ BLIND // can't see anything
// Meaning the the suit is defined directly after the corrisponding helmet. Just like below!
/obj/item/clothing/head/helmet/space
name = "space helmet"
- icon_state = "space"
- desc = "A special helmet designed for work in a hazardous, low-pressure environment."
+ icon_state = "spaceold"
+ desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays."
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
- item_state = "space"
+ item_state = "spaceold"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
@@ -173,14 +173,14 @@ BLIND // can't see anything
/obj/item/clothing/suit/space
name = "space suit"
desc = "A suit that protects against low pressure environments. Has a big 13 on the back."
- icon_state = "space"
+ icon_state = "spaceold"
item_state = "s_suit"
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals)
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index a6e76d0c5c1..85b3cd3af70 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -101,6 +101,14 @@
heat_protection = FEET|LEGS
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
+/obj/item/clothing/shoes/workboots
+ name = "work boots"
+ desc = "Nanotrasen-issue Engineering lace-up work boots for the especially blue-collar."
+ icon_state = "workboots"
+ item_state = "jackboots"
+ strip_delay = 40
+ put_on_delay = 40
+
/obj/item/clothing/shoes/cult
name = "cultist boots"
desc = "A pair of boots worn by the followers of Nar-Sie."
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 92f23576991..463ea5426d7 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -9,6 +9,7 @@
var/on = 0
item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite)
action_button_name = "Toggle Helmet Light"
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP
/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user)
if(!isturf(user.loc))
@@ -41,8 +42,10 @@
item_state = "eng_hardsuit"
slowdown = 2
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
-
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
+ var/obj/item/clothing/head/helmet/space/hardsuit/helmet
+ action_button_name = "Toggle Helmet"
+ var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit
//Atmospherics
/obj/item/clothing/head/helmet/space/hardsuit/atmos
@@ -63,6 +66,7 @@
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/atmos
//Chief Engineer's hardsuit
@@ -84,6 +88,7 @@
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/elite
//Mining hardsuit
@@ -93,7 +98,6 @@
icon_state = "hardsuit0-mining"
item_state = "mining_helm"
item_color = "mining"
- flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
/obj/item/clothing/suit/space/hardsuit/mining
@@ -102,7 +106,8 @@
desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating for wildlife encounters."
item_state = "mining_hardsuit"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
@@ -116,6 +121,7 @@
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
on = 1
action_button_name = "Toggle Helmet Mode"
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon()
icon_state = "hardsuit[on]-[item_color]"
@@ -157,7 +163,8 @@
var/on = 1
action_button_name = "Toggle Hardsuit Mode"
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50)
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
+ helmettype = null
/obj/item/clothing/suit/space/hardsuit/syndi/update_icon()
icon_state = "hardsuit[on]-[item_color]"
@@ -186,6 +193,7 @@
user.update_inv_wear_suit()
user.update_inv_w_uniform()
+
//Wizard hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/wizard
name = "gem-encrusted hardsuit helmet"
@@ -208,19 +216,22 @@
w_class = 3
unacidable = 1
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
- allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/internals)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
unacidable = 1
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard
//Medical hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/medical
name = "medical hardsuit helmet"
- desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort."
+ desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort, but does not protect the eyes from intense light."
icon_state = "hardsuit0-medical"
item_state = "medical_helm"
item_color = "medical"
+ flash_protect = 0
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
/obj/item/clothing/suit/space/hardsuit/medical
@@ -229,8 +240,9 @@
desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement."
item_state = "medical_hardsuit"
slowdown = 1
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical)
armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50)
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical
//Security hardsuit
@@ -247,5 +259,6 @@
name = "security hardsuit"
desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
item_state = "sec_hardsuit"
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index 5e4f5b97571..e610a351aa1 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -14,7 +14,7 @@
icon_state = "caparmor"
item_state = "capspacesuit"
w_class = 4
- allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
+ allowed = list(/obj/item/weapon/tank/internals, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
slowdown = 1
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -35,7 +35,7 @@
desc = "A heavily armored, advanced space suit that protects against most forms of damage."
icon_state = "deathsquad"
item_state = "swat_suit"
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
armor = list(melee = 80, bullet = 80, laser = 50,energy = 50, bomb = 100, bio = 100, rad = 100)
slowdown = 1
strip_delay = 130
@@ -73,7 +73,7 @@
item_state = "void"
desc = "An old, NASA Centcom branch designed, dark red space suit."
slowdown = 1
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/multitool)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/device/multitool)
//Space santa outfit suit
@@ -110,7 +110,7 @@
icon_state = "pirate"
item_state = "pirate"
w_class = 3
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
slowdown = 0
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
strip_delay = 40
@@ -125,21 +125,22 @@
item_color = "ert_commander"
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
strip_delay = 130
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
/obj/item/clothing/head/helmet/space/hardsuit/ert/sec
- desc = "Standard issue security helmet for the ERT"
+ desc = "Standard issue security helmet for the ERT."
icon_state = "hardsuit0-ert_security"
item_state = "hardsuit0-ert_security"
item_color = "ert_security"
/obj/item/clothing/head/helmet/space/hardsuit/ert/engi
- desc = "Standard issue engineer helmet for the ERT"
+ desc = "Standard issue engineer helmet for the ERT."
icon_state = "hardsuit0-ert_engineer"
item_state = "hardsuit0-ert_engineer"
item_color = "ert_engineer"
/obj/item/clothing/head/helmet/space/hardsuit/ert/med
- desc = "Standard issue medical helmet for the ERT"
+ desc = "Standard issue medical helmet for the ERT."
icon_state = "hardsuit0-ert_medical"
item_state = "hardsuit0-ert_medical"
item_color = "ert_medical"
@@ -149,9 +150,9 @@
desc = "Standard issue command suit for the ERT."
icon_state = "ert_command"
item_state = "ert_command"
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
- slowdown = 1
+ slowdown = 0
strip_delay = 130
/obj/item/clothing/suit/space/ert/sec
@@ -167,4 +168,21 @@
/obj/item/clothing/suit/space/ert/med
desc = "Standard issue medical suit for the ERT."
icon_state = "ert_medical"
- item_state = "ert_medical"
\ No newline at end of file
+ item_state = "ert_medical"
+
+/obj/item/clothing/suit/space/eva
+ name = "EVA suit"
+ icon_state = "space"
+ item_state = "s_suit"
+ desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies."
+ slowdown = 1
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
+
+/obj/item/clothing/head/helmet/space/eva
+ name = "EVA helmet"
+ icon_state = "space"
+ item_state = "space"
+ desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies."
+ flash_protect = 0
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm
index 93b9129c189..9c6c98d6396 100644
--- a/code/modules/clothing/spacesuits/ninja.dm
+++ b/code/modules/clothing/spacesuits/ninja.dm
@@ -13,7 +13,7 @@
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
icon_state = "s-ninja"
item_state = "s-ninja_suit"
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/stock_parts/cell)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals,/obj/item/weapon/stock_parts/cell)
slowdown = 0
unacidable = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index b4f4bf1d773..4f96b191df6 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -13,7 +13,7 @@
item_state = "space_suit_syndicate"
desc = "Has a tag on it: Totally not property of of a hostile corporation, honest!"
w_class = 3
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 95499d23afc..99caa01812d 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -112,7 +112,7 @@
name = "armor"
desc = "An armored vest with a detective's badge on it."
icon_state = "detective-armor"
- allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
+ allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
@@ -165,7 +165,7 @@
item_state = "centcom"
w_class = 4//bulky item
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals/emergency_oxygen)
flags = THICKMATERIAL
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 869d47d6856..7d75bef57d4 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -20,7 +20,7 @@
flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
- allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
+ allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
strip_delay = 70
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 5ee620e25c4..22a6d9b74e1 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -20,20 +20,26 @@
item_state = "bio_suit"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/internals/emergency_oxygen)
//Chaplain
-/obj/item/clothing/suit/toggle/chaplain_hoodie
+/obj/item/clothing/suit/hooded/chaplain_hoodie
name = "chaplain hoodie"
desc = "This suit says to you 'hush'!"
icon_state = "chaplain_hoodie"
item_state = "chaplain_hoodie"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
hooded = 1
- suittoggled = 0
- action_button_name = "Toggle Hoodie"
- togglename = "hood"
+ action_button_name = "Toggle Chaplain Hoodie"
+ hoodtype = /obj/item/clothing/head/chaplain_hood
+
+/obj/item/clothing/head/chaplain_hood
+ name = "chaplain hood"
+ desc = "For protecting your identity when immolating demons."
+ icon_state = "chaplain_hood"
+ body_parts_covered = HEAD
+ flags = NODROP
//Chaplain
/obj/item/clothing/suit/nun
@@ -43,7 +49,7 @@
item_state = "nun"
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
flags_inv = HIDESHOES|HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
//Chef
/obj/item/clothing/suit/toggle/chef
@@ -76,7 +82,7 @@
item_state = "det_suit"
blood_overlay_type = "coat"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
+ allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
@@ -94,7 +100,7 @@
icon_state = "hazard"
item_state = "hazard"
blood_overlay_type = "armor"
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/t_scanner,)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,)
//Lawyer
/obj/item/clothing/suit/toggle/lawyer
@@ -119,23 +125,6 @@
icon_state = "suitjacket_black"
item_state = "ro_suit"
-//Toggle exosuits for different aesthetic styles (hoodies, suit jacket buttons, etc)
-
-/obj/item/clothing/suit/toggle/attack_self()
- set src in usr
-
- if(!can_use(usr))
- return 0
-
- usr << "You toggle [src]'s [togglename]."
- if(src.suittoggled)
- src.icon_state = "[initial(icon_state)]"
- src.suittoggled = 0
- else if(!src.suittoggled)
- src.icon_state = "[initial(icon_state)]_t"
- src.suittoggled = 1
- usr.update_inv_wear_suit()
-
//Mime
/obj/item/clothing/suit/suspenders
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 53e796746ed..d18025b4472 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -86,7 +86,7 @@
item_state = "syndicate-black-red"
desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -106,7 +106,7 @@
item_state = "imperium_monk"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
/obj/item/clothing/suit/chickensuit
@@ -134,7 +134,7 @@
item_state = "w_suit"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
- allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
@@ -201,7 +201,7 @@
desc = "Aviators not included."
icon_state = "bomberjacket"
item_state = "brownjsuit"
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -221,65 +221,73 @@
// WINTER COATS
-/obj/item/clothing/suit/toggle/wintercoat
+/obj/item/clothing/suit/hooded/wintercoat
name = "winter coat"
desc = "A heavy jacket made from 'synthetic' animal furs."
icon_state = "coatwinter"
item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS|HEAD
- cold_protection = CHEST|GROIN|ARMS|HEAD
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
hooded = 1
action_button_name = "Toggle Winter Hood"
- togglename = "hood"
-/obj/item/clothing/suit/toggle/wintercoat/captain
+/obj/item/clothing/head/winterhood
+ name = "winter hood"
+ desc = "A hood attached to a heavy winter jacket."
+ icon_state = "generic_hood"
+ body_parts_covered = HEAD
+ cold_protection = HEAD
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ flags = NODROP
+
+/obj/item/clothing/suit/hooded/wintercoat/captain
name = "captain's winter coat"
icon_state = "coatcaptain"
armor = list(melee = 50, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
-/obj/item/clothing/suit/toggle/wintercoat/security
+/obj/item/clothing/suit/hooded/wintercoat/security
name = "security winter coat"
icon_state = "coatsecurity"
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite,/obj/item/weapon/melee/classic_baton/telescopic)
-/obj/item/clothing/suit/toggle/wintercoat/medical
+/obj/item/clothing/suit/hooded/wintercoat/medical
name = "medical winter coat"
icon_state = "coatmedical"
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
-/obj/item/clothing/suit/toggle/wintercoat/science
+/obj/item/clothing/suit/hooded/wintercoat/science
name = "science winter coat"
icon_state = "coatscience"
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
-/obj/item/clothing/suit/toggle/wintercoat/engineering
+/obj/item/clothing/suit/hooded/wintercoat/engineering
name = "engineering winter coat"
icon_state = "coatengineer"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20)
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner, /obj/item/weapon/rcd)
-/obj/item/clothing/suit/toggle/wintercoat/engineering/atmos
+/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
name = "atmospherics winter coat"
icon_state = "coatatmos"
-/obj/item/clothing/suit/toggle/wintercoat/hydro
+/obj/item/clothing/suit/hooded/wintercoat/hydro
name = "hydroponics winter coat"
icon_state = "coathydro"
allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
-/obj/item/clothing/suit/toggle/wintercoat/cargo
+/obj/item/clothing/suit/hooded/wintercoat/cargo
name = "cargo winter coat"
icon_state = "coatcargo"
-/obj/item/clothing/suit/toggle/wintercoat/miner
+/obj/item/clothing/suit/hooded/wintercoat/miner
name = "mining winter coat"
icon_state = "coatminer"
- allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
+ allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
\ No newline at end of file
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
new file mode 100644
index 00000000000..779ad6c05e4
--- /dev/null
+++ b/code/modules/clothing/suits/toggles.dm
@@ -0,0 +1,131 @@
+//Hoods for winter coats and chaplain hoodie etc
+
+/obj/item/clothing/suit/hooded
+ var/obj/item/clothing/head/winterhood/hood
+ var/hoodtype = /obj/item/clothing/head/winterhood //so the chaplain hoodie or other hoodies can override this
+
+/obj/item/clothing/suit/hooded/New()
+ MakeHood()
+ ..()
+
+/obj/item/clothing/suit/hooded/proc/MakeHood()
+ if(!hood)
+ var/obj/item/clothing/head/winterhood/W = new hoodtype(src)
+ hood = W
+
+/obj/item/clothing/suit/hooded/ui_action_click()
+ ToggleHood()
+
+/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
+ if(slot != slot_wear_suit)
+ RemoveHood()
+ ..()
+
+/obj/item/clothing/suit/hooded/proc/RemoveHood()
+ src.icon_state = "[initial(icon_state)]"
+ suittoggled = 0
+ if(ishuman(hood.loc))
+ var/mob/living/carbon/H = hood.loc
+ H.unEquip(hood, 1)
+ H.update_inv_wear_suit()
+ hood.loc = src
+
+/obj/item/clothing/suit/hooded/dropped()
+ RemoveHood()
+
+/obj/item/clothing/suit/hooded/proc/ToggleHood()
+ if(!suittoggled)
+ if(ishuman(src.loc))
+ var/mob/living/carbon/human/H = src.loc
+ if(H.wear_suit != src)
+ H << "You must be wearing [src] to put up the hood."
+ return
+ if(H.head)
+ H << "You're already wearing something on your head."
+ return
+ else
+ H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
+ suittoggled = 1
+ src.icon_state = "[initial(icon_state)]_t"
+ H.update_inv_wear_suit()
+ else
+ RemoveHood()
+
+//Toggle exosuits for different aesthetic styles (hoodies, suit jacket buttons, etc)
+
+/obj/item/clothing/suit/toggle/attack_self()
+ set src in usr
+
+ if(!can_use(usr))
+ return 0
+
+ usr << "You toggle [src]'s [togglename]."
+ if(src.suittoggled)
+ src.icon_state = "[initial(icon_state)]"
+ src.suittoggled = 0
+ else if(!src.suittoggled)
+ src.icon_state = "[initial(icon_state)]_t"
+ src.suittoggled = 1
+ usr.update_inv_wear_suit()
+
+//Hardsuit toggle code
+
+/obj/item/clothing/suit/space/hardsuit/New()
+ MakeHelmet()
+ ..()
+
+/obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet()
+ if(!helmettype)
+ return
+ if(!helmet)
+ var/obj/item/clothing/head/helmet/space/hardsuit/W = new helmettype(src)
+ helmet = W
+
+/obj/item/clothing/suit/space/hardsuit/ui_action_click()
+ ..()
+ ToggleHelmet()
+
+/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot)
+ if(!helmettype)
+ return
+ if(slot != slot_wear_suit)
+ RemoveHelmet()
+ ..()
+
+/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet()
+ if(!helmettype)
+ return
+ suittoggled = 0
+ if(ishuman(helmet.loc))
+ var/mob/living/carbon/H = helmet.loc
+ if(helmet.on)
+ helmet.attack_self(H)
+ H.unEquip(helmet, 1)
+ H.update_inv_wear_suit()
+ helmet.loc = src
+
+/obj/item/clothing/suit/space/hardsuit/dropped()
+ RemoveHelmet()
+
+/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet()
+ var/mob/living/carbon/human/H = src.loc
+ if(!helmettype)
+ return
+ if(!suittoggled)
+ if(ishuman(src.loc))
+ if(H.wear_suit != src)
+ H << "You must be wearing [src] to engage the helmet."
+ return
+ if(H.head)
+ H << "You're already wearing something on your head."
+ return
+ else
+ H << "You engage the helmet on the hardsuit."
+ H.equip_to_slot_if_possible(helmet,slot_head,0,0,1)
+ suittoggled = 1
+ H.update_inv_wear_suit()
+ playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
+ else
+ H << "You disengage the helmet on the hardsuit."
+ playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
+ RemoveHelmet()
\ No newline at end of file
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index 581cb073d03..89a5f7bc936 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -18,7 +18,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
@@ -121,7 +121,7 @@
permeability_coefficient = 0.50
flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
strip_delay = 60
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
index 43f8e49c5f4..1fb22fcd9a8 100644
--- a/code/modules/clothing/under/shorts.dm
+++ b/code/modules/clothing/under/shorts.dm
@@ -24,4 +24,8 @@
/obj/item/clothing/under/shorts/grey
icon_state = "greyshorts"
- item_color = "greyshorts"
\ No newline at end of file
+ item_color = "greyshorts"
+
+/obj/item/clothing/under/shorts/purple
+ icon_state = "purpleshorts"
+ item_color = "purpleshorts"
\ No newline at end of file
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index 098f7bfea7c..a2d323e81d8 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -8,26 +8,6 @@
var/mob/living/carbon/human/bloody_hands_mob
-
-/proc/blood_incompatible(donor,receiver)
-
- var/donor_antigen = copytext(donor,1,lentext(donor))
- var/receiver_antigen = copytext(receiver,1,lentext(receiver))
- var/donor_rh = findtext("+",donor)
- var/receiver_rh = findtext("+",receiver)
-
- if(donor_rh && !receiver_rh) return 1
- switch(receiver_antigen)
- if("A")
- if(donor_antigen != "A" && donor_antigen != "O") return 1
- if("B")
- if(donor_antigen != "B" && donor_antigen != "O") return 1
- if("O")
- if(donor_antigen != "O") return 1
- //AB is a universal receiver.
- return 0
-
-
/obj/item/weapon/reagent_containers/glass/rag
name = "damp rag"
desc = "For cleaning up messes, you suppose."
diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm
index ef02fe80bfe..5c7a0c4d47a 100644
--- a/code/modules/events/false_alarm.dm
+++ b/code/modules/events/false_alarm.dm
@@ -1,7 +1,7 @@
/datum/round_event_control/falsealarm
name = "False Alarm"
typepath = /datum/round_event/falsealarm
- weight = 9
+ weight = 20
max_occurrences = 5
/datum/round_event/falsealarm
@@ -11,7 +11,7 @@
/datum/round_event/falsealarm/announce()
var/list/events_list = list()
for(var/datum/round_event_control/E in SSevent.control)
- if(!E.holidayID) //No holiday cheer allowed during non-holidays. Not even fake holiday cheer.
+ if(!E.wizardevent && !E.holidayID) //No holiday cheer allowed during non-holidays. Not even fake holiday cheer.
events_list += E //No holiday cheer allowed during non-holidays. Not even fake holiday cheer.
var/datum/round_event_control/event_control = pick(events_list)
if(event_control)
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index ed41e80ee0a..727c5a0dce2 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -119,7 +119,7 @@
santa.equip_to_slot_or_del(new /obj/item/clothing/mask/breath, slot_wear_mask)
santa.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red, slot_gloves)
santa.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red, slot_shoes)
- santa.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double, slot_belt)
+ santa.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen/double, slot_belt)
santa.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain, slot_ears)
santa.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/santabag, slot_back)
santa.equip_to_slot_or_del(new /obj/item/device/flashlight, slot_r_store) //most blob spawn locations are really dark.
diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm
index 055204702ac..7396ef19ed8 100644
--- a/code/modules/events/ninja.dm
+++ b/code/modules/events/ninja.dm
@@ -375,7 +375,7 @@ ________________________________________________________________________________
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt)
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_r_store)
equip_to_slot_or_del(new /obj/item/weapon/c4(src), slot_l_store)
- equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store)
+ equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(src), slot_s_store)
equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/carbondioxide(src), slot_back)
var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(src)
diff --git a/code/modules/food&drinks/food/snacks_pastry.dm b/code/modules/food&drinks/food/snacks_pastry.dm
index 7a413438beb..86c7592ec6e 100644
--- a/code/modules/food&drinks/food/snacks_pastry.dm
+++ b/code/modules/food&drinks/food/snacks_pastry.dm
@@ -25,7 +25,7 @@
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
..()
extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "coco", "slimejelly", "banana", "berryjuice", "omnizine")
- reagents.add_reagent("[extra_reagent]" = 3)
+ reagents.add_reagent("[extra_reagent]", 3)
if(prob(30))
icon_state = "donut2"
name = "frosted chaos donut"
@@ -40,7 +40,7 @@
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
..()
- reagents.add_reagent("[extra_reagent]" = 5)
+ reagents.add_reagent("[extra_reagent]", 5)
if(prob(30))
icon_state = "jdonut2"
name = "frosted jelly Donut"
diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food&drinks/kitchen machinery/microwave.dm
index 19f1add42ef..c6229ec5410 100644
--- a/code/modules/food&drinks/kitchen machinery/microwave.dm
+++ b/code/modules/food&drinks/kitchen machinery/microwave.dm
@@ -267,7 +267,7 @@
return
start()
if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run
- if (!wzhzhzh(10))
+ if (!microwave_operate(10))
abort()
return
stop()
@@ -278,17 +278,17 @@
if (!recipe)
dirty += 1
if (prob(max(10,dirty*5)))
- if (!wzhzhzh(4))
+ if (!microwave_operate(4))
abort()
return
muck_start()
- wzhzhzh(4)
+ microwave_operate(4)
muck_finish()
cooked = fail()
cooked.loc = src.loc
return
else if (has_extra_item())
- if (!wzhzhzh(4))
+ if (!microwave_operate(4))
abort()
return
broke()
@@ -296,7 +296,7 @@
cooked.loc = src.loc
return
else
- if (!wzhzhzh(10))
+ if (!microwave_operate(10))
abort()
return
stop()
@@ -305,10 +305,10 @@
return
else
var/halftime = round(recipe.time/10/2)
- if (!wzhzhzh(halftime))
+ if (!microwave_operate(halftime))
abort()
return
- if (!wzhzhzh(halftime))
+ if (!microwave_operate(halftime))
abort()
cooked = fail()
cooked.loc = src.loc
@@ -321,7 +321,7 @@
cooked = new cooked.type(loc)
return
-/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num)
+/obj/machinery/microwave/proc/microwave_operate(var/seconds as num)
for (var/i=1 to seconds)
if (stat & (NOPOWER|BROKEN))
return 0
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index b757827c5da..10fad6295a6 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -138,7 +138,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/harebell
seed = /obj/item/seeds/harebell
name = "harebell"
- desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\""
+ desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\""
icon_state = "harebell"
slot_flags = SLOT_HEAD
@@ -478,6 +478,13 @@
reagents.add_reagent("vitamin", 1 + round((potency / 20), 1))
bitesize = 5
+/obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user)
+ user.visible_message("[user] is aiming the [src.name] at themself! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1)
+ sleep(15)
+ user.visible_message("[user] laughs so hard they begin to suffocate!")
+ return (OXYLOSS)
+
/obj/item/weapon/reagent_containers/food/snacks/grown/chili
seed = /obj/item/seeds/chiliseed
name = "chili"
@@ -1130,4 +1137,4 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice()
/obj/item/weapon/reagent_containers/food/snacks/grown/tea/astra/add_juice()
..()
- reagents.add_reagent("salglu_solution", 1 + round((potency / 20), 1))
\ No newline at end of file
+ reagents.add_reagent("salglu_solution", 1 + round((potency / 20), 1))
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index ccd46def4df..b1eab4fc945 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -257,6 +257,11 @@
throw_speed = 3
throw_range = 7
+/obj/item/weapon/grown/bananapeel/suicide_act(mob/user)
+ user.visible_message("[user] is deliberately slipping on the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, 'sound/misc/slip.ogg', 50, 1, -1)
+ return (BRUTELOSS)
+
/obj/item/weapon/grown/bananapeel/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 706efc22674..b207323395a 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -475,8 +475,7 @@
/obj/item/weapon/resonator/proc/CreateResonance(var/target, var/creator)
if(cooldown <= 0)
playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
- var/obj/effect/resonance/R = new /obj/effect/resonance(get_turf(target))
- R.creator = creator
+ new /obj/effect/resonance(get_turf(target), creator)
cooldown = 1
spawn(20)
cooldown = 0
@@ -498,16 +497,15 @@
layer = 4.1
mouse_opacity = 0
var/resonance_damage = 20
- var/creator = null
-/obj/effect/resonance/New()
+/obj/effect/resonance/New(loc, var/creator = null)
var/turf/proj_turf = get_turf(src)
if(!istype(proj_turf))
return
if(istype(proj_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = proj_turf
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
- M.gets_drilled()
+ M.gets_drilled(creator)
spawn(5)
qdel(src)
else
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 581ab4f176d..b9f0a945e3c 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -23,12 +23,12 @@
switch(severity)
if(3.0)
if (prob(75))
- src.gets_drilled()
+ src.gets_drilled(null, 1)
if(2.0)
if (prob(90))
- src.gets_drilled()
+ src.gets_drilled(null, 1)
if(1.0)
- src.gets_drilled()
+ src.gets_drilled(null, 1)
return
/turf/simulated/mineral/New()
@@ -208,12 +208,9 @@
if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) && stage == 1)
user.visible_message("You use [I] to locate where to cut off the chain reaction and attempt to stop it...")
defuse()
- if(istype(I, /obj/item/weapon/pickaxe))
- src.activated_ckey = "[user.ckey]"
- src.activated_name = "[user.name]"
..()
-/turf/simulated/mineral/gibtonite/proc/explosive_reaction()
+/turf/simulated/mineral/gibtonite/proc/explosive_reaction(var/mob/user = null, triggered_by_explosion = 0)
if(stage == 0)
icon_state = "rock_Gibtonite_active"
name = "gibtonite deposit"
@@ -222,13 +219,26 @@
visible_message("There was gibtonite inside! It's going to explode!")
var/turf/bombturf = get_turf(src)
var/area/A = get_area(bombturf)
- var/log_str = "[src.activated_ckey]? [src.activated_name] has triggered a gibtonite deposit reaction [A.name] (JMP)."
- if(z != 5)
- message_admins(log_str)
- log_game("[src.activated_ckey] ([src.activated_name]) has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).")
- countdown()
-/turf/simulated/mineral/gibtonite/proc/countdown()
+ if(user)
+ activated_ckey = "[user.ckey]"
+ activated_name = "[user.name]"
+ var/notify_admins = 0
+ if(z != 5)
+ notify_admins = 1
+ if(!triggered_by_explosion)
+ message_admins("[src.activated_ckey]/([src.activated_name])? has triggered a gibtonite deposit reaction at [A.name] (JMP).")
+ else
+ message_admins("An explosion has triggered a gibtonite deposit reaction at [A.name] (JMP).")
+
+ if(!triggered_by_explosion)
+ log_game("[src.activated_ckey] ([src.activated_name]) has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).")
+ else
+ log_game("An explosion has triggered a gibtonite deposit reaction at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
+
+ countdown(notify_admins)
+
+/turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0)
spawn(0)
while(stage == 1 && det_time > 0 && mineralAmt >= 1)
det_time--
@@ -236,7 +246,7 @@
if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
var/turf/bombturf = get_turf(src)
mineralAmt = 0
- explosion(bombturf,1,3,5, adminlog = 0)
+ explosion(bombturf,1,3,5, adminlog = notify_admins)
if(stage == 0 || stage == 2)
return
@@ -249,10 +259,10 @@
det_time = 0
visible_message("The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!")
-/turf/simulated/mineral/gibtonite/gets_drilled()
+/turf/simulated/mineral/gibtonite/gets_drilled(var/mob/user, triggered_by_explosion = 0)
if(stage == 0 && mineralAmt >= 1) //Gibtonite deposit is activated
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
- explosive_reaction()
+ explosive_reaction(user, triggered_by_explosion)
return
if(stage == 1 && mineralAmt >= 1) //Gibtonite deposit goes kaboom
var/turf/bombturf = get_turf(src)
@@ -397,7 +407,7 @@
if(do_after(user,P.digspeed))
user << "You finish cutting into the rock."
- gets_drilled()
+ gets_drilled(user)
else
return attack_hand(user)
return
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index fa1b079478e..f315cf87a18 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -132,7 +132,7 @@
..()
/obj/item/weapon/twohanded/required/gibtonite/ex_act()
- GibtoniteReaction(triggered_by_explosive = 1)
+ GibtoniteReaction(null, 1)
/obj/item/weapon/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by_explosive = 0)
if(!primed)
@@ -148,12 +148,12 @@
if(triggered_by_explosive)
message_admins("An explosion has triggered a [name] to detonate at [A.name] (JMP).")
else
- message_admins("[key_name(usr)]? has triggered a [name] to detonate at [A.name] (JMP).")
+ message_admins("[key_name(user)]? has triggered a [name] to detonate at [A.name] (JMP).")
if(triggered_by_explosive)
log_game("An explosion has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
else
user.visible_message("[user] strikes \the [src], causing a chain reaction!")
- log_game("[key_name(usr)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
+ log_game("[key_name(user)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
spawn(det_time)
if(primed)
if(quality == 3)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index c8e2e45e854..a29a6925d25 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -53,6 +53,8 @@
verbs -= /mob/dead/observer/verb/boo
verbs -= /mob/dead/observer/verb/possess
+ animate(src, pixel_y = 2, time = 10, loop = -1)
+
..()
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0)
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index 68370fa1c11..e70ea378428 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -28,3 +28,14 @@
/mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
return
+
+/mob/living/carbon/brain/Move(var/atom/newloc)
+ if(container)
+ container.Move(newloc)
+ else //something went very wrong.
+ CRASH("Brainmob without container")
+ . = ..()
+ loc = container
+
+/mob/living/carbon/brain/UnarmedAttack(var/atom/A)//Stops runtimes due to attack_animal being the default
+ return
diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm
index 4c1f2e55271..6c7b938288f 100644
--- a/code/modules/mob/living/carbon/brain/emote.dm
+++ b/code/modules/mob/living/carbon/brain/emote.dm
@@ -62,7 +62,7 @@
for(var/mob/M in dead_mob_list)
if (!M.client || istype(M, /mob/new_player))
continue //skip monkeys, leavers, and new_players
- if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
+ if(M.stat == DEAD && (M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT)) && !(M in viewers(src,null)))
M.show_message(message)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 3ed06021ef6..28d866c8d34 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -168,6 +168,8 @@
if(status == "")
status = "OK"
src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]."
+ if(H.blood_max)
+ src << "You are bleeding!"
if(staminaloss)
if(staminaloss > 30)
src << "You're completely exhausted."
@@ -361,7 +363,7 @@
dat += "
Back: [back ? back : "Nothing"]"
- if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
+ if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank/internals))
dat += "
[internal ? "Disable Internals" : "Set Internals"]"
if(handcuffed)
@@ -383,7 +385,7 @@
if(href_list["internal"])
var/slot = text2num(href_list["internal"])
var/obj/item/ITEM = get_item_by_slot(slot)
- if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
+ if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
visible_message("[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].", \
"[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].")
if(do_mob(usr, src, POCKET_STRIP_DELAY))
@@ -391,7 +393,7 @@
internal = null
if(internals)
internals.icon_state = "internal0"
- else if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
+ else if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
internal = ITEM
if(internals)
internals.icon_state = "internal1"
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index a1237ccd8c8..b934cd36517 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -12,6 +12,6 @@
//inventory slots
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
- var/obj/item/weapon/tank/internal = null
+ var/obj/item/weapon/tank/internals/internal = null
var/datum/dna/dna = null//Carbon
diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm
index a67f683174c..0c9893c0d39 100644
--- a/code/modules/mob/living/carbon/emote.dm
+++ b/code/modules/mob/living/carbon/emote.dm
@@ -188,7 +188,7 @@
for(var/mob/M in dead_mob_list)
if(!M.client || istype(M, /mob/new_player))
continue //skip monkeys, leavers and new players
- if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
+ if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
M.show_message(message)
diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm
new file mode 100644
index 00000000000..418e111c630
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/blood.dm
@@ -0,0 +1,318 @@
+/****************************************************
+ BLOOD SYSTEM
+****************************************************/
+//Blood levels
+var/const/BLOOD_VOLUME_SAFE = 501
+var/const/BLOOD_VOLUME_OKAY = 336
+var/const/BLOOD_VOLUME_BAD = 224
+var/const/BLOOD_VOLUME_SURVIVE = 122
+
+/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here.
+/mob/living/carbon/human/var/pale = 0 //Should affect how mob sprite is drawn, but currently doesn't.
+
+//Initializes blood vessels
+/mob/living/carbon/human/proc/make_blood()
+
+ if(vessel)
+ return
+
+ vessel = new/datum/reagents(600)
+ vessel.my_atom = src
+
+ if(NOBLOOD in dna.species.specflags)
+ return
+
+ vessel.add_reagent("blood",560)
+ spawn(1)
+ fixblood()
+
+//Resets blood data
+/mob/living/carbon/human/proc/fixblood()
+ for(var/datum/reagent/blood/B in vessel.reagent_list)
+ if(B.id == "blood")
+ B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
+
+/mob/living/carbon/human/proc/suppress_bloodloss(var/amount)
+ if(bleedsuppress)
+ return
+ else
+ bleedsuppress = 1
+ spawn(amount)
+ bleedsuppress = 0
+ if(stat != DEAD && blood_max)
+ src << "The blood soaks through your bandage."
+
+// Takes care blood loss and regeneration
+/mob/living/carbon/human/proc/handle_blood()
+
+ if(NOBLOOD in dna.species.specflags)
+ return
+
+ if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood.
+
+ var/blood_volume = round(vessel.get_reagent_amount("blood"))
+
+ //Blood regeneration if there is some space
+ if(blood_volume < 560 && blood_volume)
+ var/datum/reagent/blood/B = locate() in vessel.reagent_list //Grab some blood
+ if(B) // Make sure there's some blood at all
+ if(B.data["donor"] != src) //If it's not theirs, then we look for theirs
+ for(var/datum/reagent/blood/D in vessel.reagent_list)
+ if(D.data["donor"] == src)
+ B = D
+ break
+
+ B.volume += 0.1 // regenerate blood VERY slowly
+ if (reagents.has_reagent("nutriment")) //Getting food speeds it up
+ B.volume += 0.4
+ reagents.remove_reagent("nutriment", 0.1)
+ if (reagents.has_reagent("iron")) //Hematogen candy anyone?
+ B.volume += 0.4
+ reagents.remove_reagent("iron", 0.1)
+
+ //Effects of bloodloss
+ switch(blood_volume)
+ if(BLOOD_VOLUME_SAFE to 10000)
+ if(pale)
+ pale = 0
+ update_body()
+ if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE)
+ if(!pale)
+ pale = 1
+ update_body()
+ var/word = pick("dizzy","woozy","faint")
+ src << "You feel [word]."
+ if(oxyloss < 20)
+ oxyloss += 3
+ if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY)
+ if(!pale)
+ pale = 1
+ update_body()
+ if(oxyloss < 50)
+ oxyloss += 10
+ oxyloss += 1
+ if(prob(5))
+ eye_blurry += 6
+ var/word = pick("dizzy","woozy","faint")
+ src << "You feel very [word]."
+ if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD)
+ oxyloss += 5
+ if(prob(15))
+ Paralyse(rand(1,3))
+ var/word = pick("dizzy","woozy","faint")
+ src << "You feel extremely [word]."
+ if(0 to BLOOD_VOLUME_SURVIVE)
+ death()
+
+ //Bleeding out
+ blood_max = 0
+ for(var/obj/item/organ/limb/org in organs)
+ var/brutedamage = org.brute_dam
+
+ if(brutedamage > 30)
+ blood_max += 0.5
+ if(brutedamage > 50)
+ blood_max += 1
+ if(brutedamage > 70)
+ blood_max += 2
+ if(bleedsuppress)
+ blood_max = 0
+ drip(blood_max)
+
+//Makes a blood drop, leaking amt units of blood from the mob
+/mob/living/carbon/human/proc/drip(var/amt as num)
+
+ if(!amt)
+ return
+
+ vessel.remove_reagent("blood",amt)
+ blood_splatter(src,src)
+
+/****************************************************
+ BLOOD TRANSFERS
+****************************************************/
+
+//Gets blood from mob to the container, preserving all data in it.
+/mob/living/carbon/proc/take_blood(obj/item/weapon/reagent_containers/container, var/amount)
+
+ var/datum/reagent/B = get_blood(container.reagents)
+ if(!B) B = new /datum/reagent/blood
+ B.holder = container
+ B.volume += amount
+
+ //set reagent data
+ B.data["donor"] = src
+
+ /*
+ if(T.virus && T.virus.spread_type != SPECIAL)
+ B.data["virus"] = new T.virus.type(0)
+ */
+
+ for(var/datum/disease/D in src.viruses)
+ if(!B.data["viruses"])
+ B.data["viruses"] = list()
+
+ B.data["viruses"] += new D.type(0, D, 1)
+
+ B.data["blood_DNA"] = copytext(src.dna.unique_enzymes,1,0)
+ if(src.resistances&&src.resistances.len)
+ B.data["resistances"] = src.resistances.Copy()
+ var/list/temp_chem = list()
+ for(var/datum/reagent/R in src.reagents.reagent_list)
+ temp_chem += R.name
+ temp_chem[R.name] = R.volume
+ B.data["trace_chem"] = list2params(temp_chem)
+ if(mind)
+ B.data["mind"] = src.mind
+ if(ckey)
+ B.data["ckey"] = src.ckey
+ if(!suiciding)
+ B.data["cloneable"] = 1
+ B.data["blood_type"] = copytext(src.dna.blood_type,1,0)
+ B.data["gender"] = src.gender
+ B.data["real_name"] = src.real_name
+ B.data["factions"] = src.faction
+ return B
+
+//For humans, blood does not appear from blue, it comes from vessels.
+/mob/living/carbon/human/take_blood(obj/item/weapon/reagent_containers/container, var/amount)
+
+ if(NOBLOOD in dna.species.specflags)
+ return null
+
+ if(vessel.get_reagent_amount("blood") < amount)
+ return null
+
+ . = ..()
+ vessel.remove_reagent("blood",amount) // Removes blood if human
+
+//Transfers blood from container to vessels
+/mob/living/carbon/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
+
+ var/datum/reagent/blood/injected = get_blood(container.reagents)
+
+ if(!injected)
+ return
+
+ for(var/datum/disease/D in injected.data["viruses"])
+ var/datum/disease/new_virus = D.Copy(1)
+ injected.data["viruses"] += new_virus
+
+ var/list/chems = list()
+ chems = params2list(injected.data["trace_chem"])
+ for(var/C in chems)
+ src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * amount)//adds trace chemicals to owner's blood
+ reagents.update_total()
+
+ container.reagents.remove_reagent("blood", amount)
+
+//Transfers blood from container to vessels, respecting blood types compatability.
+/mob/living/carbon/human/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
+
+ var/datum/reagent/blood/injected = get_blood(container.reagents)
+
+ if(NOBLOOD in dna.species.specflags)
+ reagents.add_reagent("blood", amount, injected.data)
+ reagents.update_total()
+ return
+
+ var/datum/reagent/blood/our = get_blood(vessel)
+
+ if (!injected || !our)
+ return
+ if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) )
+ reagents.add_reagent("toxin",amount * 0.5)
+ reagents.update_total()
+ else
+ vessel.add_reagent("blood", amount, injected.data)
+ vessel.update_total()
+ ..()
+
+//Gets human's own blood.
+/mob/living/carbon/proc/get_blood(datum/reagents/container)
+ var/datum/reagent/blood/res = locate() in container.reagent_list //Grab some blood
+ if(res) // Make sure there's some blood at all
+ if(res.data["donor"] != src) //If it's not theirs, then we look for theirs
+ for(var/datum/reagent/blood/D in container.reagent_list)
+ if(D.data["donor"] == src)
+ return D
+ return res
+
+proc/blood_incompatible(donor,receiver,donor_species,receiver_species)
+ if(!donor || !receiver) return 0
+
+ if(donor_species && receiver_species)
+ if(donor_species != receiver_species)
+ return 1
+
+ var/donor_antigen = copytext(donor,1,lentext(donor))
+ var/receiver_antigen = copytext(receiver,1,lentext(receiver))
+ var/donor_rh = (findtext(donor,"+")>0)
+ var/receiver_rh = (findtext(receiver,"+")>0)
+
+ if(donor_rh && !receiver_rh) return 1
+ switch(receiver_antigen)
+ if("A")
+ if(donor_antigen != "A" && donor_antigen != "O") return 1
+ if("B")
+ if(donor_antigen != "B" && donor_antigen != "O") return 1
+ if("O")
+ if(donor_antigen != "O") return 1
+ //AB is a universal receiver.
+ return 0
+
+proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
+
+ var/obj/effect/decal/cleanable/blood/B
+ var/decal_type = /obj/effect/decal/cleanable/blood/splatter
+ var/turf/T = get_turf(target)
+
+ if(istype(source,/mob/living/carbon/human))
+ var/mob/living/carbon/human/M = source
+ source = M.get_blood(M.vessel)
+ else if(istype(source,/mob/living/carbon/monkey))
+ var/mob/living/carbon/monkey/donor = source
+ if(donor.dna)
+ source = new()
+ source.data["blood_DNA"] = donor.dna.unique_enzymes
+ source.data["blood_type"] = donor.dna.blood_type
+
+ // Are we dripping or splattering?
+ var/list/drips = list()
+ // Only a certain number of drips (or one large splatter) can be on a given turf.
+ for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
+ drips |= drop.drips
+ del(drop)
+ if(!large && drips.len < 3)
+ decal_type = /obj/effect/decal/cleanable/blood/drip
+
+ // Find a blood decal or create a new one.
+ B = locate(decal_type) in T
+ if(!B)
+ B = new decal_type(T)
+
+ var/obj/effect/decal/cleanable/blood/drip/drop = B
+ if(istype(drop) && drips && drips.len && !large)
+ drop.overlays |= drips
+ drop.drips |= drips
+
+ // If there's no data to copy, call it quits here.
+ if(!source)
+ return B
+
+ // Update blood information.
+ if(source.data["blood_DNA"])
+ B.blood_DNA = list()
+ if(source.data["blood_type"])
+ B.blood_DNA[source.data["blood_DNA"]] = source.data["blood_type"]
+ else
+ B.blood_DNA[source.data["blood_DNA"]] = "O+"
+
+/* // Update virus information.
+ for(var/datum/disease/D in source.data["viruses"])
+ var/datum/disease/new_virus = D.Copy(1)
+ source.data["viruses"] += new_virus
+ new_virus.holder = B
+*/
+
+ return B
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 53eaa53884f..4846abc0eb7 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -322,7 +322,7 @@
for(var/mob/M in dead_mob_list)
if(!M.client || istype(M, /mob/new_player))
continue //skip monkeys, leavers and new players
- if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
+ if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
M.show_message(message)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 8d0aeed8e5c..e2290b92404 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -230,6 +230,14 @@
else
msg += "[t_He] [t_is] quite chubby.\n"
+ if(pale)
+ msg += "[t_He] [t_has] pale skin.\n"
+
+ if(bleedsuppress)
+ msg += "[t_He] [t_is] bandaged with something.\n"
+ else if(blood_max)
+ msg += "[t_He] [t_is] bleeding!\n"
+
msg += ""
if(!appears_dead)
@@ -252,21 +260,37 @@
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
- if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/hud/security/sunglasses))
- if(!user.stat && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
- var/criminal = "None"
-
- var/perpname = get_face_name(get_id_name(""))
- if(perpname)
- var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud))
+ var/perpname = get_face_name(get_id_name(""))
+ if(perpname)
+ var/datum/data/record/R = find_record("name", perpname, data_core.general)
+ if(R)
+ msg += "Rank: [R.fields["rank"]]
"
+ msg += "\[Front photo\] "
+ msg += "\[Side photo\]
"
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
if(R)
- criminal = R.fields["criminal"]
+ var/health = R.fields["p_stat"]
+ msg += "\[[health]\]"
+ health = R.fields["m_stat"]
+ msg += "\[[health]\]
"
+ R = find_record("name", perpname, data_core.medical)
+ if(R)
+ msg += "\[Medical evaluation\]
"
- msg += "Criminal status: \[[criminal]\]\n"
- msg += "Security record: \[View\] "
- msg += "\[Add crime\] "
- msg += "\[View comment log\] "
- msg += "\[Add comment\]\n"
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
+ if(!user.stat && user != src) //|| !user.canmove || user.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
+ var/criminal = "None"
+
+ R = find_record("name", perpname, data_core.security)
+ if(R)
+ criminal = R.fields["criminal"]
+
+ msg += "Criminal status: \[[criminal]\]\n"
+ msg += "Security record: \[View\] "
+ msg += "\[Add crime\] "
+ msg += "\[View comment log\] "
+ msg += "\[Add comment\]\n"
msg += "*---------*"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 068333c71a1..5af48151fba 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -30,6 +30,8 @@
ready_dna(src)
randomize_human(src)
+ make_blood()
+
..()
var/mob/M = src
faction |= "\ref[M]"
@@ -158,7 +160,7 @@
| |
"}
dat += "| Back: | [(back && !(back.flags&ABSTRACT)) ? back : "Empty"]"
- if(has_breathable_mask && istype(back, /obj/item/weapon/tank))
+ if(has_breathable_mask && istype(back, /obj/item/weapon/tank/internals))
dat += " [internal ? "Disable Internals" : "Set Internals"]"
dat += " |
| |
"
@@ -185,7 +187,7 @@
dat += "| Exosuit: | [(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "Empty"] |
"
if(wear_suit)
dat += "| ↳Suit Storage: | [(s_store && !(s_store.flags&ABSTRACT)) ? s_store : "Empty"]"
- if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank))
+ if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank/internals))
dat += " [internal ? "Disable Internals" : "Set Internals"]"
dat += " |
"
else
@@ -212,7 +214,7 @@
dat += "| ↳Belt: |
"
else
dat += "| ↳Belt: | [(belt && !(belt.flags&ABSTRACT)) ? belt : "Empty"]"
- if(has_breathable_mask && istype(belt, /obj/item/weapon/tank))
+ if(has_breathable_mask && istype(belt, /obj/item/weapon/tank/internals))
dat += " [internal ? "Disable Internals" : "Set Internals"]"
dat += " |
"
dat += "| ↳Pockets: | [(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]"
@@ -247,7 +249,6 @@
siemens_coeff = G.siemens_coefficient
return ..(shock_damage,source,siemens_coeff)
-
/mob/living/carbon/human/Topic(href, href_list)
if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
if(href_list["item"])
@@ -293,113 +294,194 @@
..()
- if(href_list["criminal"])
+///////HUDs///////
+ if(href_list["hud"])
if(istype(usr, /mob/living/carbon/human))
var/mob/living/carbon/human/H = usr
- if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
- if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
- return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
- // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
- var/allowed_access = null
- var/obj/item/clothing/glasses/G = H.glasses
- if (!G.emagged)
- if(H.wear_id)
- var/list/access = H.wear_id.GetAccess()
- if(access_sec_doors in access)
- allowed_access = H.get_authentification_name()
- else
- allowed_access = "@%&ERROR_%$*"
-
-
- if(!allowed_access)
- H << "ERROR: Invalid Access"
- return
-
- var/perpname = get_face_name(get_id_name(""))
- if(perpname)
- var/datum/data/record/R = find_record("name", perpname, data_core.security)
+ var/perpname = get_face_name(get_id_name(""))
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud))
+ var/datum/data/record/R = find_record("name", perpname, data_core.general)
+ if(href_list["photo_front"] || href_list["photo_side"])
if(R)
- if(href_list["status"])
- var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
+ if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud)) return
+ var/obj/item/weapon/photo/P = null
+ if(href_list["photo_front"])
+ P = R.fields["photo_front"]
+ else if(href_list["photo_side"])
+ P = R.fields["photo_side"]
+ if(P)
+ P.show(H)
+
+ if(href_list["hud"] == "m")
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
+ if(href_list["p_stat"])
+ var/health = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel")
if(R)
- if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
+ if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return
+ if(health && health != "Cancel")
+ R.fields["p_stat"] = health
+ return
+ if(href_list["m_stat"])
+ var/health = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel")
+ if(R)
+ if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health)) return
+ if(health && health != "Cancel")
+ R.fields["m_stat"] = health
+ return
+ if(href_list["evaluation"])
+ if(!getBruteLoss() && !getFireLoss() && !getOxyLoss() && getToxLoss() < 20)
+ usr << "No external injuries detected. "
+ return
+ var/span = "notice"
+ var/status = ""
+ if(getBruteLoss())
+ usr << "Physical trauma analysis:"
+ for(var/obj/item/organ/limb/org in organs)
+ var/brutedamage = org.brute_dam
+ if(brutedamage > 0)
+ status = "received minor physical injuries."
+ span = "notice"
+ if(brutedamage > 20)
+ status = "been seriously damaged."
+ span = "danger"
+ if(brutedamage > 40)
+ status = "sustained major trauma!"
+ span = "userdanger"
+ if(brutedamage)
+ usr << "The [org.getDisplayName()] appears to have [status]"
+ if(getFireLoss())
+ usr << "Analysis of skin burns:"
+ for(var/obj/item/organ/limb/org in organs)
+ var/burndamage = org.burn_dam
+ if(burndamage > 0)
+ status = "signs of minor burns."
+ span = "notice"
+ if(burndamage > 20)
+ status = "serious burns."
+ span = "danger"
+ if(burndamage > 40)
+ status = "major burns!"
+ span = "userdanger"
+ if(burndamage)
+ usr << "The [org.getDisplayName()] appears to have [status]"
+ if(getOxyLoss())
+ usr << "Patient has signs of suffocation, emergency treatment may be required!"
+ if(getToxLoss() > 20)
+ usr << "Gathered data is inconsistent with the analysis, possible cause: poisoning."
+
+ if(href_list["hud"] == "s")
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
+ if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
+ return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
+ // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
+ var/allowed_access = null
+ var/obj/item/clothing/glasses/G = H.glasses
+ if (!G.emagged)
+ if(H.wear_id)
+ var/list/access = H.wear_id.GetAccess()
+ if(access_sec_doors in access)
+ allowed_access = H.get_authentification_name()
+ else
+ allowed_access = "@%&ERROR_%$*"
+
+
+ if(!allowed_access)
+ H << "ERROR: Invalid Access"
+ return
+
+ if(perpname)
+ R = find_record("name", perpname, data_core.security)
+ if(R)
+ if(href_list["status"])
+ var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel")
if(setcriminal != "Cancel")
- investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
- R.fields["criminal"] = setcriminal
- sec_hud_set_security_status()
- return
-
- if(href_list["view"])
- if(R)
- if(usr.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
- return
- usr << "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]"
- usr << "Minor Crimes:"
- for(var/datum/data/crime/c in R.fields["mi_crim"])
- usr << "Crime: [c.crimeName]"
- usr << "Details: [c.crimeDetails]"
- usr << "Added by [c.author] at [c.time]"
- usr << "----------"
- usr << "Major Crimes:"
- for(var/datum/data/crime/c in R.fields["ma_crim"])
- usr << "Crime: [c.crimeName]"
- usr << "Details: [c.crimeDetails]"
- usr << "Added by [c.author] at [c.time]"
- usr << "----------"
- usr << "Notes: [R.fields["notes"]]"
- return
-
- if(href_list["add_crime"])
- switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
- if("Minor Crime")
- if(R)
- var/t1 = copytext(sanitize(input("Please input minor crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
- var/t2 = copytext(sanitize(input("Please input minor crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
if(R)
- if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
- return
- var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
- data_core.addMinorCrime(R.fields["id"], crime)
- usr << "Successfully added a minor crime."
- return
- if("Major Crime")
- if(R)
- var/t1 = copytext(sanitize(input("Please input major crime names:", "Security HUD", "", null) as text),1,MAX_MESSAGE_LEN)
- var/t2 = copytext(sanitize(input("Please input major crime details:", "Security HUD", "", null) as message),1,MAX_MESSAGE_LEN)
- if(R)
- if (!t1 || !t2 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
- return
- var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
- data_core.addMajorCrime(R.fields["id"], crime)
- usr << "Successfully added a major crime."
- return
- else return
-
- if(href_list["view_comment"])
- if(R)
- if(H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
+ if(H.canUseHUD())
+ if(istype(H.glasses, /obj/item/clothing/glasses/hud/security))
+ investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records")
+ R.fields["criminal"] = setcriminal
+ sec_hud_set_security_status()
return
- usr << "Comments/Log:"
- var/counter = 1
- while(R.fields[text("com_[]", counter)])
- usr << R.fields[text("com_[]", counter)]
- usr << "----------"
- counter++
- return
- if(href_list["add_comment"])
- if(R)
- var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
- if(R)
- if (!t1 || !allowed_access || H.stat || H.weakened || H.stunned || H.restrained() || !istype(H.glasses, /obj/item/clothing/glasses/hud/security))
+ if(href_list["view"])
+ if(R)
+ if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
+ usr << "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]"
+ usr << "Minor Crimes:"
+ for(var/datum/data/crime/c in R.fields["mi_crim"])
+ usr << "Crime: [c.crimeName]"
+ usr << "Details: [c.crimeDetails]"
+ usr << "Added by [c.author] at [c.time]"
+ usr << "----------"
+ usr << "Major Crimes:"
+ for(var/datum/data/crime/c in R.fields["ma_crim"])
+ usr << "Crime: [c.crimeName]"
+ usr << "Details: [c.crimeDetails]"
+ usr << "Added by [c.author] at [c.time]"
+ usr << "----------"
+ usr << "Notes: [R.fields["notes"]]"
+ return
+
+ if(href_list["add_crime"])
+ switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
+ if("Minor Crime")
+ if(R)
+ var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null)
+ var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null)
+ if(R)
+ if (!t1 || !t2 || !allowed_access) return
+ else if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
+ var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
+ data_core.addMinorCrime(R.fields["id"], crime)
+ usr << "Successfully added a minor crime."
+ return
+ if("Major Crime")
+ if(R)
+ var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null)
+ var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null)
+ if(R)
+ if (!t1 || !t2 || !allowed_access) return
+ else if (!H.canUseHUD()) return
+ else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
+ var/crime = data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text())
+ data_core.addMajorCrime(R.fields["id"], crime)
+ usr << "Successfully added a major crime."
+ return
+
+ if(href_list["view_comment"])
+ if(R)
+ if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
+ usr << "Comments/Log:"
+ var/counter = 1
+ while(R.fields[text("com_[]", counter)])
+ usr << R.fields[text("com_[]", counter)]
+ usr << "----------"
+ counter++
return
- var/counter = 1
- while(R.fields[text("com_[]", counter)])
- counter++
- R.fields[text("com_[]", counter)] = text("Made by [] on [] [], [] []", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
- usr << "Successfully added comment."
- return
- usr << "Unable to locate a data core entry for this person."
+
+ if(href_list["add_comment"])
+ if(R)
+ var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
+ if(R)
+ if (!t1 || !allowed_access) return
+ else if(!H.canUseHUD()) return
+ else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security)) return
+ var/counter = 1
+ while(R.fields[text("com_[]", counter)])
+ counter++
+ R.fields[text("com_[]", counter)] = text("Made by [] on [] [], [] []", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), year_integer+540, t1,)
+ usr << "Successfully added comment."
+ return
+ usr << "Unable to locate a data core entry for this person."
+
+/mob/living/carbon/human/proc/canUseHUD()
+ return !(src.stat || src.weakened || src.stunned || src.restrained())
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index b13f76395c3..b15db63a746 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -140,6 +140,10 @@ mob/living/carbon/human/proc/hat_fall_prob()
if(update) update_damage_overlays(0)
+/mob/living/carbon/human/proc/restore_blood()
+ if(!NOBLOOD in dna.species.specflags)
+ var/blood_volume = vessel.get_reagent_amount("blood")
+ vessel.add_reagent("blood",560.0-blood_volume)
////////////////////////////////////////////
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index de9f0ea57c0..6bd44a4115d 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -17,7 +17,7 @@
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
var/age = 30 //Player's age (pure fluff)
- var/blood_type = "A+" //Player's bloodtype (Not currently used, just character fluff)
+ var/blood_type = "A+" //Player's bloodtype
var/underwear = "Nude" //Which underwear the player wants
var/undershirt = "Nude" //Which undershirt the player wants
@@ -49,3 +49,6 @@
var/xylophone = 0 //For the spoooooooky xylophone cooldown
var/gender_ambiguous = 0 //if something goes wrong during gender reassignment this generates a line in examine
+
+ var/blood_max = 0 //how much are we bleeding
+ var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 4b8964e6f20..a6477d24f93 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -84,6 +84,9 @@
//Disabilities
handle_disabilities()
+ //Blud
+ handle_blood()
+
//Random events (vomiting etc)
handle_random_events()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 71b54ef8970..aa2ce1fb29b 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -21,8 +21,6 @@
/mob/living/carbon/human/treat_message(message)
if(dna)
message = dna.species.handle_speech(message,src)
- message = dna.mutations_say_mods(message)
-
if(viruses.len)
for(var/datum/disease/pierrot_throat/D in viruses)
var/list/temp_message = text2list(message, " ") //List each word in the message
@@ -37,7 +35,8 @@
pick_list -= H //Make sure that you dont HONK the same word twice
message = list2text(temp_message, " ")
message = ..(message)
-
+ if(dna)
+ message = dna.mutations_say_mods(message)
return message
/mob/living/carbon/human/GetVoice()
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index f0dff8e7523..161d4caca11 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -697,8 +697,8 @@
if((H.disabilities & FAT) && grav)
mspeed += 1.5
- if(H.bodytemperature < 283.222 && grav)
- mspeed += (283.222 - H.bodytemperature) / 10 * 1.75
+ if(H.bodytemperature < 283.222)
+ mspeed += (283.222 - H.bodytemperature) / 10 * (grav+0.5)
mspeed += speedmod
@@ -731,7 +731,7 @@
return 0
if(H.cpr_time < world.time + 30)
- add_logs(H, M, "CPRed")
+ add_logs(M, H, "CPRed")
M.visible_message("[M] is trying to perform CPR on [H]!", \
"You try to perform CPR on [H]. Hold still!")
if(!do_mob(M, H))
diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm
index 719aa2cda70..15c107c539b 100644
--- a/code/modules/mob/living/carbon/human/species_types.dm
+++ b/code/modules/mob/living/carbon/human/species_types.dm
@@ -127,6 +127,7 @@
sexes = 0
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/shadow
+ specflags = list(NOBREATH,NOBLOOD,RADIMMUNE)
/datum/species/shadow/spec_life(mob/living/carbon/human/H)
var/light_amount = 0
@@ -152,7 +153,7 @@
default_color = "00FFFF"
darksight = 3
invis_sight = SEE_INVISIBLE_LEVEL_ONE
- specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
+ specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
hair_color = "mutcolor"
hair_alpha = 150
ignored_by = list(/mob/living/carbon/slime)
@@ -169,7 +170,7 @@
default_color = "00FF90"
say_mod = "chirps"
eyes = "jelleyes"
- specflags = list(MUTCOLORS,EYECOLOR)
+ specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/slime
/*
@@ -228,6 +229,7 @@
id = "skeleton"
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/skeleton
+ specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
/*
ZOMBIES
*/
@@ -239,6 +241,7 @@
say_mod = "moans"
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/zombie
+ specflags = list(NOBREATH,HEATRES,COLDRES,NOBLOOD,RADIMMUNE)
/datum/species/zombie/handle_speech(message)
var/list/message_list = text2list(message, " ")
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index 77be26fc621..b7df925da57 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -46,7 +46,7 @@
var/list/listening_dead = list()
for(var/mob/M in player_list)
- if(M.stat == DEAD && ((M.client.prefs.toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7)))
+ if(M.stat == DEAD && M.client && ((M.client.prefs.toggles & CHAT_GHOSTWHISPER) || (get_dist(M, src) <= 7)))
listening_dead |= M
var/list/listening = get_hearers_in_view(1, src)
diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm
index d0703c45ccd..e3503bd5a57 100644
--- a/code/modules/mob/living/carbon/slime/slime.dm
+++ b/code/modules/mob/living/carbon/slime/slime.dm
@@ -204,6 +204,12 @@
updatehealth()
return
+/mob/living/carbon/slime/MouseDrop(var/atom/movable/A as mob|obj)
+ if(isliving(A) && A != src && usr == src)
+ var/mob/living/Food = A
+ if(Food.Adjacent(src) && !stat && Food.stat != DEAD) //messy
+ Feedon(Food)
+ ..()
/mob/living/carbon/slime/unEquip(obj/item/W as obj)
return
@@ -216,14 +222,19 @@
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
..()
- var/damage = rand(1, 3)
+ if(src.Victim)
+ src.Victim = null
+ visible_message("[M] pulls [src] off!")
+ return
attacked += 5
- if(M.is_adult)
- damage = rand(1, 6)
- else
- damage = rand(1, 3)
- adjustBruteLoss(damage)
- updatehealth()
+ if(src.nutrition >= 100) //steal some nutrition. negval handled in life()
+ src.nutrition -= (50 + (5 * M.amount_grown))
+ M.add_nutrition(50 + (5 * M.amount_grown))
+ if(src.health > 0)
+ src.adjustBruteLoss(4 + (2 * M.amount_grown)) //amt_grown isn't very linear but it works
+ src.updatehealth()
+ M.adjustBruteLoss(-4 + (-2 * M.amount_grown))
+ M.updatehealth()
return
/mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob)
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 9adb0fd4188..891fae0abeb 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -268,7 +268,7 @@
if(!M.client || istype(M, /mob/new_player))
continue //skip monkeys, leavers and new players
var/T = get_turf(src)
- if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null)))
+ if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(T,null)))
M.show_message(message)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 3695061147c..dd64719253f 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -74,7 +74,7 @@ Sorry Giacom. Please don't be mad :(
//okay, so we didn't switch. but should we push?
//not if he's not CANPUSH of course
- if(!(M.status_flags & CANPUSH) )
+ if(!(M.status_flags & CANPUSH))
return 1
//anti-riot equipment is also anti-push
if(M.r_hand && istype(M.r_hand, /obj/item/weapon/shield/riot))
@@ -410,6 +410,9 @@ Sorry Giacom. Please don't be mad :(
dead_mob_list -= src
living_mob_list += src
if(!isanimal(src)) stat = CONSCIOUS
+ if(ishuman(src))
+ var/mob/living/carbon/human/human_mob = src
+ human_mob.restore_blood()
update_fire()
regenerate_icons()
..()
@@ -492,30 +495,8 @@ Sorry Giacom. Please don't be mad :(
M.stop_pulling()
//this is the gay blood on floor shit -- Added back -- Skie
- if (M.lying && (prob(M.getBruteLoss() / 2)))
- var/blood_exists = 0
- var/trail_type = M.getTrail()
- for(var/obj/effect/decal/cleanable/trail_holder/C in M.loc) //checks for blood splatter already on the floor
- blood_exists = 1
- if (istype(M.loc, /turf/simulated) && trail_type != null)
- var/newdir = get_dir(T, M.loc)
- if(newdir != M.dir)
- newdir = newdir | M.dir
- if(newdir == 3) //N + S
- newdir = NORTH
- else if(newdir == 12) //E + W
- newdir = EAST
- if((newdir in list(1, 2, 4, 8)) && (prob(50)))
- newdir = turn(get_dir(T, M.loc), 180)
- if(!blood_exists)
- new /obj/effect/decal/cleanable/trail_holder(M.loc)
- for(var/obj/effect/decal/cleanable/trail_holder/H in M.loc)
- if((!(newdir in H.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && H.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled)
- H.existing_dirs += newdir
- H.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir))
- if(check_dna_integrity(M)) //blood DNA
- var/mob/living/carbon/DNA_helper = pulling
- H.blood_DNA[DNA_helper.dna.unique_enzymes] = DNA_helper.dna.blood_type
+ if(M.lying && (prob(M.getBruteLoss() / 2)))
+ makeTrail(T, M)
pulling.Move(T, get_dir(pulling, T))
if(M)
M.start_pulling(t)
@@ -532,6 +513,35 @@ Sorry Giacom. Please don't be mad :(
for(var/mob/living/carbon/slime/M in view(1,src))
M.UpdateFeed(src)
+/mob/living/proc/makeTrail(var/turf/T, var/mob/living/M)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if((NOBLOOD in H.dna.species.specflags) || (!H.blood_max) || (H.bleedsuppress))
+ return
+ var/blood_exists = 0
+ var/trail_type = M.getTrail()
+ for(var/obj/effect/decal/cleanable/trail_holder/C in M.loc) //checks for blood splatter already on the floor
+ blood_exists = 1
+ if (istype(M.loc, /turf/simulated) && trail_type != null)
+ var/newdir = get_dir(T, M.loc)
+ if(newdir != M.dir)
+ newdir = newdir | M.dir
+ if(newdir == 3) //N + S
+ newdir = NORTH
+ else if(newdir == 12) //E + W
+ newdir = EAST
+ if((newdir in list(1, 2, 4, 8)) && (prob(50)))
+ newdir = turn(get_dir(T, M.loc), 180)
+ if(!blood_exists)
+ new /obj/effect/decal/cleanable/trail_holder(M.loc)
+ for(var/obj/effect/decal/cleanable/trail_holder/H in M.loc)
+ if((!(newdir in H.existing_dirs) || trail_type == "trails_1" || trail_type == "trails_2") && H.existing_dirs.len <= 16) //maximum amount of overlays is 16 (all light & heavy directions filled)
+ H.existing_dirs += newdir
+ H.overlays.Add(image('icons/effects/blood.dmi',trail_type,dir = newdir))
+ if(check_dna_integrity(M)) //blood DNA
+ var/mob/living/carbon/DNA_helper = pulling
+ H.blood_DNA[DNA_helper.dna.unique_enzymes] = DNA_helper.dna.blood_type
+
/mob/living/proc/getTrail() //silicon and simple_animals don't get blood trails
return null
@@ -667,8 +677,7 @@ Sorry Giacom. Please don't be mad :(
var/mob/living/carbon/CM = L
if(CM.on_fire && CM.canmove)
CM.fire_stacks -= 5
- CM.weakened = max(CM.weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
- CM.update_canmove()
+ CM.Weaken(3,1)
CM.spin(32,2)
CM.visible_message("[CM] rolls on the floor, trying to put themselves out!", \
"You stop, drop, and roll!")
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index dd3745d4245..f94e95160da 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -161,7 +161,7 @@ var/list/department_radio_keys = list(
var/list/listening = get_hearers_in_view(message_range, source)
var/list/listening_dead = list()
for(var/mob/M in player_list)
- if(M.stat == DEAD && ((M.client.prefs.toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7))&& client) // client is so that ghosts don't have to listen to mice
+ if(M.stat == DEAD && M.client && ((M.client.prefs.toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice
listening_dead |= M
listening -= listening_dead //so ghosts dont hear stuff twice
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 98c5347f8e5..0f7e32324ba 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -34,7 +34,6 @@ var/list/ai_list = list()
radiomod = ";" //AIs will, by default, state their laws on the internal radio.
var/obj/item/device/pda/ai/aiPDA = null
var/obj/item/device/multitool/aiMulti = null
- var/obj/item/device/camera/siliconcam/aicamera = null
var/obj/machinery/bot/Bot
//MALFUNCTION
@@ -318,7 +317,7 @@ var/list/ai_list = list()
return 0
/mob/living/silicon/ai/proc/ai_cancel_call()
- set category = "AI Commands"
+ set category = "Malfunction"
if(src.stat == 2)
src << "You can't send the shuttle back because you are dead!"
return
diff --git a/code/modules/mob/living/silicon/ai/vox_sounds.dm b/code/modules/mob/living/silicon/ai/vox_sounds.dm
index aa2bb96cfe2..317e887e90a 100644
--- a/code/modules/mob/living/silicon/ai/vox_sounds.dm
+++ b/code/modules/mob/living/silicon/ai/vox_sounds.dm
@@ -673,7 +673,6 @@ var/list/vox_sounds = list("," = 'sound/vox_fem/,.ogg',
"vox" = 'sound/vox_fem/vox.ogg',
"vox_login" = 'sound/vox_fem/vox_login.ogg',
"voxtest" = 'sound/vox_fem/voxtest.ogg',
-"voxtest2" = 'sound/vox_fem/voxtest2.ogg',
"w" = 'sound/vox_fem/w.ogg',
"walk" = 'sound/vox_fem/walk.ogg',
"wall" = 'sound/vox_fem/wall.ogg',
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index f96b7223b00..ac5153b71ae 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -178,6 +178,14 @@
/mob/living/silicon/pai/UnarmedAttack(var/atom/A)//Stops runtimes due to attack_animal being the default
return
+/mob/living/silicon/pai/Move(var/atom/newloc)
+ if(card)
+ card.Move(newloc)
+ else //something went very wrong.
+ CRASH("pAI without card")
+ . = ..()
+ loc = card
+
//Addition by Mord_Sith to define AI's network change ability
/*
/mob/living/silicon/pai/proc/pai_network_change()
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index 9c4913dd830..3e12bfe9639 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -30,7 +30,7 @@
else
message = "[src] beeps."
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
- m_type = 1
+ m_type = 2
if ("bow")
if (!src.buckled)
@@ -63,7 +63,17 @@
else
message = "[src] buzzes."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
- m_type = 1
+ m_type = 2
+
+ if ("buzz2")
+ message = "[src] buzzes twice."
+ playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
+ m_type = 2
+
+ if ("chime") //You have mail!
+ message = "[src] chimes."
+ playsound(loc, 'sound/machines/chime.ogg', 50, 0)
+ m_type = 2
if ("clap")
if (!src.restrained())
@@ -107,6 +117,11 @@
else
message = "[src] glares."
+ if ("honk") //Honk!
+ message = "[src] honks!"
+ playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
+ m_type = 2
+
if ("look")
var/M = null
if (param)
@@ -153,7 +168,12 @@
else
message = "[src] pings."
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
- m_type = 1
+ m_type = 2
+
+ if ("sad") //When words cannot express...
+ message = "[src] plays a sad trombone."
+ playsound(loc, 'sound/misc/sadtrombone.ogg', 50, 0)
+ m_type = 2
if ("salute")
if (!src.buckled)
@@ -194,8 +214,13 @@
message = "[src] twitches."
m_type = 1
+ if ("warn") //HUMAN HARM DETECTED. PLEASE DIE IN AN ORDERLY FASHION.
+ message = "[src] blares an alarm!"
+ playsound(loc, 'sound/machines/warning-buzzer.ogg', 50, 0)
+ m_type = 2
+
if ("help")
- src << "Help for cyborg emotes. You can use these emotes with say \"*emote\":\n\naflap, beep-(none)/mob, bow-(none)/mob, buzz-(none)/mob, clap, custom, deathgasp, flap, glare-(none)/mob, look-(none)/mob, me, nod, ping-(none)/mob, \nsalute-(none)/mob, twitch, twitch_s,"
+ src << "Help for cyborg emotes. You can use these emotes with say \"*emote\":\n\naflap, beep-(none)/mob, bow-(none)/mob, buzz-(none)/mob,buzz2,chime, clap, custom, deathgasp, flap, glare-(none)/mob, honk, look-(none)/mob, me, nod, ping-(none)/mob, sad, \nsalute-(none)/mob, twitch, twitch_s, warn,"
else
src << "Unusable emote '[act]'. Say *help for a list."
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index e69830054bc..570e6b320d2 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -56,7 +56,6 @@
var/obj/item/weapon/tank/internal = null //Hatred. Used if a borg has a jetpack.
var/obj/item/robot_parts/robot_suit/robot_suit = null //Used for deconstruction to remember what the borg was constructed out of..
- var/obj/item/device/camera/siliconcam/aicamera = null //photography
var/toner = 0
var/tonermax = 40
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 9bb9e39ac2d..5458b66ba5f 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -253,6 +253,7 @@
modules += new /obj/item/weapon/card/emag(src)
modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
modules += new /obj/item/weapon/crowbar(src)
+ modules += new /obj/item/weapon/pinpointer/operative(src)
emag = null
fix_modules()
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 4b6e2ae91e5..1d241afcca8 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -9,6 +9,7 @@
var/list/alarms_to_clear = list()
var/designation = ""
var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all.
+ var/obj/item/device/camera/siliconcam/aicamera = null //photography
var/obj/item/device/radio/borg/radio = null //AIs dont use this but this is at the silicon level to advoid copypasta in say()
@@ -413,4 +414,8 @@
return
/mob/living/silicon/setEarDamage()
- return
\ No newline at end of file
+ return
+
+/mob/living/silicon/proc/GetPhoto()
+ if (aicamera)
+ return aicamera.selectpicture(aicamera)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index 405b882ea17..7e8d710e44b 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -110,7 +110,7 @@
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
corpseback = /obj/item/weapon/tank/jetpack/oxygen
- corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
+ corpsepocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 9546b077482..5d470a986bd 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -153,8 +153,8 @@
/obj/item/device/radio,
/obj/item/device/radio/off,
/obj/item/clothing/suit/cardborg,
- /obj/item/weapon/tank/oxygen,
- /obj/item/weapon/tank/air,
+ /obj/item/weapon/tank/internals/oxygen,
+ /obj/item/weapon/tank/internals/air,
/obj/item/weapon/extinguisher
)
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index e35eaa148dd..e7023880534 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -11,6 +11,7 @@
response_harm = "hits"
speed = 0
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
+ skin_type = /obj/item/stack/sheet/animalhide/xeno
meat_amount = 3
maxHealth = 100
health = 100
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 6bdbc2cc728..e6f77f15489 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -21,6 +21,7 @@
melee_damage_upper = 12
attacktext = "attacks"
attack_sound = 'sound/weapons/bite.ogg'
+ var/Attackemote = "growls at"
min_oxy = 0
max_oxy = 0
@@ -38,7 +39,7 @@
/mob/living/simple_animal/hostile/mimic/FindTarget()
. = ..()
if(.)
- emote("me", 1, "growls at [.].")
+ emote("me", 1, "[Attackemote] [.].")
/mob/living/simple_animal/hostile/mimic/Die()
..()
@@ -232,3 +233,116 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
return 0
return ..()
+//
+//animated blasters, wands, etc
+//
+
+/mob/living/simple_animal/hostile/mimic/copy/ranged
+ name = "animated shooty gun"
+ desc = "there's something fishy here."
+ environment_smash = 0 //needed? seems weird for them to do so
+ ranged = 1
+ retreat_distance = 1 //just enough to shoot
+ minimum_distance = 6
+ projectiletype = /obj/item/projectile/magic/
+ projectilesound = 'sound/items/bikehorn.ogg'
+ casingtype = null
+ Attackemote = "aims menacingly at"
+ var/obj/item/weapon/gun/TrueGun = null
+ var/obj/item/weapon/gun/magic/Zapstick = list()
+ var/obj/item/weapon/gun/projectile/Pewgun = list()
+ var/obj/item/weapon/gun/energy/Zapgun = list()
+
+/mob/living/simple_animal/hostile/mimic/copy/ranged/New(loc, var/obj/copy, var/mob/living/creator, var/destroy_original = 0)
+ ..()
+
+
+/mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(var/obj/O, var/mob/living/creator, var/destroy_original = 0)
+ if(destroy_original || CheckObject(O))
+
+ O.loc = src
+ name = O.name
+ desc = O.desc
+ icon = O.icon
+ icon_state = O.icon_state
+ icon_living = icon_state
+
+ if(istype(O, /obj/item/weapon/gun)) //leaving for sanity i guess
+ var/obj/item/weapon/gun/G = O
+ health = 15 * G.w_class
+ melee_damage_upper = G.force
+ melee_damage_lower = G.force - max(0, (G.force / 2))
+ move_to_delay = 2 * G.w_class + 1
+ projectilesound = G.fire_sound
+ TrueGun = G
+
+ if(istype(G, /obj/item/weapon/gun/magic))
+ Zapstick = G
+ var/obj/item/ammo_casing/magic/Zapshot = new Zapstick.ammo_type //this is done because ammo_type.proj_type can't be directly checked
+ projectiletype = Zapshot.projectile_type
+ qdel(Zapshot) //is this needed? i dare not risk piles of nullspace bullets
+
+ if(istype(G, /obj/item/weapon/gun/projectile))
+ Pewgun = G
+ var/obj/item/ammo_box/magazine/Pewmag = new Pewgun.mag_type //same problem, mag_type.ammo_type.proj_type can't be checked directly
+ var/obj/item/ammo_casing/Pewshot = new Pewmag.ammo_type
+ projectiletype = Pewshot.projectile_type
+ casingtype = Pewmag.ammo_type
+ qdel(Pewshot)
+ qdel(Pewmag)
+
+ if(istype(G, /obj/item/weapon/gun/energy))
+ Zapgun = G
+ var/selectfiresetting = Zapgun.select
+ var/obj/item/ammo_casing/energy/Energyammotype = Zapgun.ammo_type[selectfiresetting]
+ projectiletype = Energyammotype.projectile_type
+
+ maxHealth = health
+ if(creator)
+ src.creator = creator
+ faction += "\ref[creator]"
+ if(destroy_original)
+ qdel(O)
+ return 1
+ return
+
+/mob/living/simple_animal/hostile/mimic/copy/ranged/OpenFire(var/the_target)
+ if(Zapgun)
+ if(Zapgun.power_supply) //sanity
+ var/obj/item/ammo_casing/energy/shot = Zapgun.ammo_type[Zapgun.select]
+ if(Zapgun.power_supply.charge >= shot.e_cost) //if she can zap
+ Zapgun.power_supply.use(shot.e_cost)
+ Zapgun.update_icon()
+ ..() //zap 'em
+ if(Zapstick)
+ if(Zapstick.charges)
+ Zapstick.charges--
+ Zapstick.update_icon()
+ ..()
+ if(Pewgun)
+ if(Pewgun.chambered)
+ if(Pewgun.chambered.BB)
+ qdel(Pewgun.chambered.BB)
+ Pewgun.chambered.BB = null //because qdel takes too long, ensures icon update
+ Pewgun.chambered.update_icon()
+ ..()
+ else
+ visible_message("The [src] clears a jam!")
+ Pewgun.chambered.loc = src.loc //rip revolver immersions, blame shotgun snowflake procs
+ Pewgun.chambered = null
+ if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len)
+ Pewgun.chambered = Pewgun.magazine.get_round(0)
+ Pewgun.chambered.loc = Pewgun
+ Pewgun.update_icon()
+ else if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) //only true for pumpguns i think
+ Pewgun.chambered = Pewgun.magazine.get_round(0)
+ Pewgun.chambered.loc = Pewgun
+ visible_message("The [src] cocks itself!")
+
+ else //if somehow the mimic has no weapon
+ src.ranged = 0 //BANZAIIII
+ src.retreat_distance = 0
+ src.minimum_distance = 1
+ src.icon_state = TrueGun.icon_state
+ src.icon_living = TrueGun.icon_state
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index c1eb6157ddb..45dbf172af0 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -20,6 +20,7 @@
var/turns_since_move = 0
var/meat_amount = 0
var/meat_type
+ var/skin_type
var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals.
var/wander = 1 // Does the mob wander around when idle?
var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it.
@@ -219,6 +220,8 @@
if(meat_amount && meat_type)
for(var/i = 0; i < meat_amount; i++)
new meat_type(src.loc)
+ if(skin_type)
+ new skin_type(src.loc)
..()
@@ -347,7 +350,7 @@
else
user << " [src] is dead, medical items won't bring it back to life."
return
- if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
+ if((meat_type || skin_type) && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if(istype(O, /obj/item/weapon/kitchenknife))
harvest()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 9a1f9689eac..776eb11e729 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -705,6 +705,8 @@ var/list/slot_equipment_priority = list( \
ETA = "ETD"
if(SHUTTLE_ESCAPE)
ETA = "ESC"
+ if(SHUTTLE_STRANDED)
+ ETA = "ERR"
if(ETA)
var/timeleft = SSshuttle.emergency.timeLeft()
stat(null, "[ETA]-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
@@ -867,8 +869,8 @@ var/list/slot_equipment_priority = list( \
update_canmove()
return
-/mob/proc/Weaken(amount)
- if(status_flags & CANWEAKEN)
+/mob/proc/Weaken(amount, var/ignore_canweaken = 0)
+ if(status_flags & CANWEAKEN || ignore_canweaken)
weakened = max(max(weakened,amount),0)
update_canmove() //updates lying, canmove and icons
return
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 84961dff068..08029e1a5f5 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -68,7 +68,7 @@
var/icon/clothes_s = null
if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high'
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
else if(backbag == 3)
@@ -78,7 +78,7 @@
switch(job_civilian_high)
if(HOP)
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hopcap"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -86,7 +86,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(BARTENDER)
clothes_s = new /icon('icons/mob/uniform.dmi', "bar_suit_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armoralt"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -94,7 +94,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(BOTANIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY)
if(backbag == 2)
@@ -103,7 +103,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(COOK)
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "chef"), ICON_OVERLAY)
if(backbag == 2)
@@ -112,22 +112,22 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(JANITOR)
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(LIBRARIAN)
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(QUARTERMASTER)
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
+ clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -135,21 +135,21 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CARGOTECH)
clothes_s = new /icon('icons/mob/uniform.dmi', "cargo_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(MINER)
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
if(backbag == 3)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(LAWYER)
clothes_s = new /icon('icons/mob/uniform.dmi', "bluesuit_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "briefcase"), ICON_OVERLAY)
if(backbag == 2)
@@ -158,7 +158,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CHAPLAIN)
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "bible"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -166,12 +166,12 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CLOWN)
clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY)
if(MIME)
clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY)
@@ -185,7 +185,7 @@
switch(job_medsci_high)
if(RD)
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY)
if(backbag == 2)
@@ -194,7 +194,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(SCIENTIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -202,7 +202,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CHEMIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -210,7 +210,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(CMO)
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY)
if(backbag == 2)
@@ -219,7 +219,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(DOCTOR)
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY)
if(backbag == 2)
@@ -228,7 +228,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(GENETICIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
@@ -236,7 +236,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(VIROLOGIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir"), ICON_OVERLAY)
if(backbag == 2)
@@ -245,7 +245,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
if(ROBOTICIST)
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "toolbox_blue"), ICON_OVERLAY)
if(backbag == 2)
@@ -257,9 +257,9 @@
switch(job_engsec_high)
if(CAPTAIN)
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_OVERLAY)
+ clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "captainpack"), ICON_OVERLAY)
@@ -267,10 +267,10 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY)
if(HOS)
clothes_s = new /icon('icons/mob/uniform.dmi', "hos_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberetblack"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY)
+ clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
@@ -278,10 +278,10 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(WARDEN)
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "policehelm"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY)
+ clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
@@ -289,7 +289,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(DETECTIVE)
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY)
@@ -300,9 +300,9 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(OFFICER)
clothes_s = new /icon('icons/mob/uniform.dmi', "security_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret_badge"), ICON_OVERLAY)
+ clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
@@ -310,7 +310,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
if(CHIEF)
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
@@ -321,7 +321,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(ENGINEER)
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "workboots"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY)
if(backbag == 2)
@@ -330,7 +330,7 @@
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
if(ATMOSTECH)
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
+ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY)
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
if(backbag == 2)
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index db3b9544368..cb7008ca6d9 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -27,10 +27,6 @@
var/rigged = 0
var/spam_flag = 0
- var/const/deffont = "Verdana"
- var/const/signfont = "Times New Roman"
- var/const/crayonfont = "Comic Sans MS"
-
/obj/item/weapon/paper/New()
..()
@@ -148,8 +144,8 @@
info_links = info
var/i = 0
for(i=1,i<=fields,i++)
- addtofield(i, "write", 1)
- info_links = info_links + "write"
+ addtofield(i, "write", 1)
+ info_links = info_links + "write"
/obj/item/weapon/paper/proc/clearpaper()
@@ -178,7 +174,7 @@
t = replacetext(t, "\[/u\]", "")
t = replacetext(t, "\[large\]", "")
t = replacetext(t, "\[/large\]", "")
- t = replacetext(t, "\[sign\]", "[user.real_name]")
+ t = replacetext(t, "\[sign\]", "[user.real_name]")
t = replacetext(t, "\[field\]", "")
if(!iscrayon)
@@ -189,7 +185,7 @@
t = replacetext(t, "\[list\]", "")
t = replacetext(t, "\[/list\]", " ")
- t = "[t]"
+ t = "[t]"
else // If it is a crayon, and he still tries to use these, make them empty!
t = replacetext(t, "\[*\]", "")
t = replacetext(t, "\[hr\]", "")
@@ -198,7 +194,7 @@
t = replacetext(t, "\[list\]", "")
t = replacetext(t, "\[/list\]", "")
- t = "[t]"
+ t = "[t]"
// t = replacetext(t, "#", "") // Junk converted to nothing!
@@ -244,6 +240,8 @@
if(href_list["write"])
var/id = href_list["write"]
var/t = stripped_multiline_input("Enter what you want to write:", "Write")
+ if(!t)
+ return
var/obj/item/i = usr.get_active_hand() //Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/iscrayon = 0
if(!istype(i, /obj/item/weapon/pen))
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index e4e8a72694d..8f9f44e41ff 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -49,7 +49,7 @@
P = new /obj/item/weapon/paper
if(SSevent.holiday == "April Fool's Day")
if(prob(30))
- P.info = "HONK HONK HONK HONK HONK HONK HONK HOOOOOOOOOOOOOOOOOOOOOONK APRIL FOOLS"
+ P.info = "HONK HONK HONK HONK HONK HONK HONK HOOOOOOOOOOOOOOOOOOOOOONK APRIL FOOLS"
P.rigged = 1
P.updateinfolinks()
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 8f9bb4c1fc6..5e8763958d4 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -70,8 +70,8 @@
else //no toner? shitty copies for you!
c.info = ""
var/copied = copy.info
- copied = replacetext(copied, ""
c.name = copy.name
@@ -188,7 +188,7 @@
var/datum/picture/selection
var/mob/living/silicon/ai/tempAI = usr
if(tempAI.aicamera.aipictures.len == 0)
- usr << "No images saved"
+ usr << "No images saved"
return
for(var/datum/picture/t in tempAI.aicamera.aipictures)
nametemp += t.fields["name"]
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index a3db1f6b3b7..247b0356c00 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -332,22 +332,22 @@
else
injectaialbum(icon, img, desc, pixel_x, pixel_y, blueprintsinject)
-
-obj/item/device/camera/siliconcam/proc/viewpichelper(var/obj/item/device/camera/siliconcam/targetloc)
+obj/item/device/camera/siliconcam/proc/selectpicture(var/obj/item/device/camera/siliconcam/targetloc)
var/list/nametemp = list()
var/find
- var/datum/picture/selection
if(targetloc.aipictures.len == 0)
usr << "No images saved"
return
for(var/datum/picture/t in targetloc.aipictures)
nametemp += t.fields["name"]
find = input("Select image (numbered in order taken)") in nametemp
- var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
for(var/datum/picture/q in targetloc.aipictures)
if(q.fields["name"] == find)
- selection = q
- break // just in case some AI decides to take 10 thousand pictures in a round
+ return q
+
+obj/item/device/camera/siliconcam/proc/viewpichelper(var/obj/item/device/camera/siliconcam/targetloc)
+ var/obj/item/weapon/photo/P = new/obj/item/weapon/photo()
+ var/datum/picture/selection = selectpicture(targetloc)
P.photocreate(selection.fields["icon"], selection.fields["img"], selection.fields["desc"])
P.pixel_x = selection.fields["pixel_x"]
P.pixel_y = selection.fields["pixel_y"]
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index c6b16fc7d3e..48ebf2b88e3 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -13,6 +13,10 @@
pressure_resistance = 2
attack_verb = list("stamped")
+/obj/item/weapon/stamp/suicide_act(mob/user)
+ user.visible_message("[user] stamps 'VOID' on \his forehead, then promptly falls over, dead.")
+ return (OXYLOSS)
+
/obj/item/weapon/stamp/qm
name = "quartermaster's rubber stamp"
icon_state = "stamp-qm"
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 8e07804317d..dcbda800de8 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -10,7 +10,7 @@ var/global/list/rad_collectors = list()
density = 1
req_access = list(access_engine_equip)
// use_power = 0
- var/obj/item/weapon/tank/plasma/P = null
+ var/obj/item/weapon/tank/internals/plasma/P = null
var/last_power = 0
var/active = 0
var/locked = 0
@@ -57,7 +57,7 @@ var/global/list/rad_collectors = list()
return 1
else if(istype(W, /obj/item/device/analyzer) && P)
atmosanalyzer_scan(P.air_contents, user)
- else if(istype(W, /obj/item/weapon/tank/plasma))
+ else if(istype(W, /obj/item/weapon/tank/internals/plasma))
if(!src.anchored)
user << "The [src] needs to be secured to the floor first."
return 1
@@ -115,7 +115,7 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/proc/eject()
locked = 0
- var/obj/item/weapon/tank/plasma/Z = src.P
+ var/obj/item/weapon/tank/internals/plasma/Z = src.P
if (!Z)
return
Z.loc = get_turf(src)
diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm
index 0bf2aca5611..04afcf54d7f 100644
--- a/code/modules/projectiles/ammunition/energy.dm
+++ b/code/modules/projectiles/ammunition/energy.dm
@@ -38,24 +38,6 @@
select_name = "DESTROY"
fire_sound = 'sound/weapons/pulse.ogg'
-/obj/item/ammo_casing/energy/laser/pulse/carbine
- e_cost = 50
-
-/obj/item/ammo_casing/energy/laser/carbine
- e_cost = 50
-
-/obj/item/ammo_casing/energy/electrode/carbine
- e_cost = 50
-
-/obj/item/ammo_casing/energy/laser/pulse/pistol
- e_cost = 100
-
-/obj/item/ammo_casing/energy/laser/pistol
- e_cost = 50
-
-/obj/item/ammo_casing/energy/electrode/pistol
- e_cost = 50
-
/obj/item/ammo_casing/energy/laser/bluetag
projectile_type = /obj/item/projectile/lasertag/bluetag
select_name = "bluetag"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 2ca204489cb..252d9e0bc58 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -123,6 +123,8 @@
user << "You don't have the dexterity to do this!"
return 0
+ if(!handle_pins(user))
+ return 0
if(trigger_guard)
if(istype(user) && user.dna)
@@ -150,9 +152,6 @@
/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params)
add_fingerprint(user)
- if(!handle_pins(user))
- return 0
-
for(var/i = 1 to burst_size)
if(!issilicon(user))
if( i>1 && !(src in get_both_hands(user))) //for burst firing
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 4474aa5a6cc..f7be8cb5618 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -89,4 +89,14 @@
return
/obj/item/weapon/gun/energy/ui_action_click()
- toggle_gunlight()
\ No newline at end of file
+ toggle_gunlight()
+
+/obj/item/weapon/gun/energy/suicide_act(mob/user)
+ if (src.can_shoot())
+ user.visible_message("[user] is trying to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, fire_sound, 50, 1, -1)
+ return(FIRELOSS)
+ else
+ user.visible_message("[user] is pretending to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide!")
+ playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
+ return (OXYLOSS)
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index d0bacd57617..26955c38d71 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -23,6 +23,7 @@ obj/item/weapon/gun/energy/laser/retro
/obj/item/weapon/gun/energy/laser/captain
icon_state = "caplaser"
+ item_state = "caplaser"
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
force = 10
origin_tech = null
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index dc0e90b608e..be1d07818b0 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -1,58 +1,60 @@
-/obj/item/weapon/gun/energy/pulse_rifle
+/obj/item/weapon/gun/energy/pulse
name = "pulse rifle"
desc = "A heavy-duty, multifaceted energy rifle with three modes. Preferred by front-line combat personnel."
icon_state = "pulse"
- item_state = "pulse"
- w_class = 4.0
+ item_state = null
+ w_class = 4
force = 10
flags = CONDUCT
slot_flags = SLOT_BACK
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
- cell_type = "/obj/item/weapon/stock_parts/cell/super"
+ cell_type = "/obj/item/weapon/stock_parts/cell/pulse"
-
-/obj/item/weapon/gun/energy/pulse_rifle/attack_self(mob/living/user as mob)
+/obj/item/weapon/gun/energy/pulse/attack_self(mob/living/user as mob)
select_fire(user)
-/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine
+/obj/item/weapon/gun/energy/pulse/emp_act(severity)
+ return
+
+/obj/item/weapon/gun/energy/pulse/loyalpin
+ pin = /obj/item/device/firing_pin/implant/loyalty
+
+/obj/item/weapon/gun/energy/pulse/carbine
name = "pulse carbine"
- desc = "A ligther weight varient of the pulse rifle, a multifaceted energy carbine with three modes."
- w_class = 3.0
+ desc = "A compact variant of the pulse rifle with less firepower but easier storage."
+ w_class = 3
+ slot_flags = SLOT_BELT
icon_state = "pulse_carbine"
item_state = "pulse"
- ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse/carbine, /obj/item/ammo_casing/energy/electrode/carbine, /obj/item/ammo_casing/energy/laser/carbine)
- cell_type = "/obj/item/weapon/stock_parts/cell"
+ cell_type = "/obj/item/weapon/stock_parts/cell/pulse/carbine"
-/obj/item/weapon/gun/energy/pulse_rifle/pulse_carbine/loyalpin
+/obj/item/weapon/gun/energy/pulse/carbine/loyalpin
pin = /obj/item/device/firing_pin/implant/loyalty
-/obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol
+/obj/item/weapon/gun/energy/pulse/pistol
name = "pulse pistol"
- desc = "A ligther weight varient of the pulse rifle, a multifaceted energy pistol with three modes."
- w_class = 2.0
+ desc = "A pulse rifle in an easily concealed handgun package with low capacity."
+ w_class = 2
+ slot_flags = SLOT_BELT
icon_state = "pulse_pistol"
- item_state = "pulse"
- ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse/pistol, /obj/item/ammo_casing/energy/electrode/pistol, /obj/item/ammo_casing/energy/laser/pistol)
- cell_type = "/obj/item/weapon/stock_parts/cell"
+ item_state = "gun"
+ cell_type = "/obj/item/weapon/stock_parts/cell/pulse/pistol"
-/obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol/loyalpin
+/obj/item/weapon/gun/energy/pulse/pistol/loyalpin
pin = /obj/item/device/firing_pin/implant/loyalty
-/obj/item/weapon/gun/energy/pulse_rifle/destroyer
+/obj/item/weapon/gun/energy/pulse/destroyer
name = "pulse destroyer"
desc = "A heavy-duty energy rifle built for pure destruction."
cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse)
-/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob)
+/obj/item/weapon/gun/energy/pulse/destroyer/attack_self(mob/living/user as mob)
user << "[src.name] has three settings, and they are all DESTROY."
-
-
-/obj/item/weapon/gun/energy/pulse_rifle/M1911
- name = "m1911-P"
+/obj/item/weapon/gun/energy/pulse/pistol/m1911
+ name = "\improper M1911-P"
desc = "A compact pulse core in a classic handgun frame for Nanotrasen officers. It's not the size of the gun, it's the size of the hole it puts through people."
icon_state = "m1911-p"
- cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
-
-
+ item_state = "gun"
+ cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 0cf46acaa26..8c182db9167 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -122,6 +122,8 @@
overheat = 0
recent_reload = 0
..()
+/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity)
+ return
/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user)
if(overheat || recent_reload)
@@ -245,6 +247,7 @@
name = "cyborg lmg"
desc = "A machinegun that fires 3d-printed flachettes slowly regenerated using a cyborg's internal power source."
icon_state = "l6closed0"
+ icon = 'icons/obj/guns/projectile.dmi'
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet)
var/charge_tick = 0
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
index 0fdbc0456bb..2c8147992ea 100644
--- a/code/modules/projectiles/guns/magic.dm
+++ b/code/modules/projectiles/guns/magic.dm
@@ -70,4 +70,9 @@
/obj/item/weapon/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
user << "The [name] whizzles quietly."
- return
\ No newline at end of file
+ return
+
+/obj/item/weapon/gun/magic/suicide_act(mob/user)
+ user.visible_message("[user] is casting a spell on themself with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, fire_sound, 50, 1, -1)
+ return (FIRELOSS)
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index db55594fa4d..624244252dd 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -132,6 +132,16 @@
boolets += magazine.ammo_count()
return boolets
+/obj/item/weapon/gun/projectile/suicide_act(mob/user)
+ if (src.chambered)
+ user.visible_message("[user] is trying to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide.")
+ playsound(loc, fire_sound, 50, 1, -1)
+ return(BRUTELOSS)
+ else
+ user.visible_message("[user] is pretending to blow \his brains out with the [src.name]! It looks like \he's trying to commit suicide!")
+ playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
+ return (OXYLOSS)
+
/obj/item/weapon/suppressor
name = "suppressor"
desc = "A universal syndicate small-arms suppressor for maximum espionage."
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 8b331d13087..d758cc24516 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -26,6 +26,9 @@
return
/obj/item/weapon/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob)
+ . = ..()
+ if(.)
+ return
if(istype(A, /obj/item/ammo_box/magazine))
var/obj/item/ammo_box/magazine/AM = A
if(istype(AM, mag_type))
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index aa4f32157b4..2e33aa0c094 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -94,14 +94,18 @@
/obj/item/projectile/magic/door/on_hit(var/atom/target)
var/atom/T = target.loc
- if(isturf(target))
- if(target.density)
- new /obj/structure/mineral_door/wood(target)
- target:ChangeTurf(/turf/simulated/floor/plating)
- else if (isturf(T))
- if(T.density)
- new /obj/structure/mineral_door/wood(T)
- T:ChangeTurf(/turf/simulated/floor/plating)
+ if(isturf(target) && target.density)
+ CreateDoor(target)
+ else if (isturf(T) && T.density)
+ CreateDoor(T)
+
+/obj/item/projectile/magic/door/proc/CreateDoor(var/turf/T)
+ new /obj/structure/mineral_door/wood(T)
+ if(istype(T,/turf/simulated/shuttle/wall))
+ T.ChangeTurf(/turf/simulated/shuttle/plating)
+ else
+ T.ChangeTurf(/turf/simulated/floor/plating)
+
/obj/item/projectile/magic/change
name = "bolt of change"
@@ -196,7 +200,7 @@ proc/wabbajack(mob/living/M)
if("magicarp") new_mob = new /mob/living/simple_animal/hostile/carp/ranged(M.loc)
if("chaosmagicarp") new_mob = new /mob/living/simple_animal/hostile/carp/ranged/chaos(M.loc)
else
- var/animal = pick("parrot","corgi","crab","pug","cat","mouse","chicken","cow","lizard","chick","fox")
+ var/animal = pick("parrot","corgi","crab","pug","cat","mouse","chicken","cow","lizard","chick","fox","butterfly")
switch(animal)
if("parrot") new_mob = new /mob/living/simple_animal/parrot(M.loc)
if("corgi") new_mob = new /mob/living/simple_animal/corgi(M.loc)
@@ -208,6 +212,7 @@ proc/wabbajack(mob/living/M)
if("cow") new_mob = new /mob/living/simple_animal/cow(M.loc)
if("lizard") new_mob = new /mob/living/simple_animal/lizard(M.loc)
if("fox") new_mob = new /mob/living/simple_animal/fox(M.loc)
+ if("butterfly") new_mob = new /mob/living/simple_animal/butterfly(M.loc)
else new_mob = new /mob/living/simple_animal/chick(M.loc)
new_mob.languages |= HUMAN
if("human")
@@ -265,7 +270,11 @@ proc/wabbajack(mob/living/M)
return
else
var/obj/O = change
- new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer)
+ if(istype(O, /obj/item/weapon/gun))
+ new /mob/living/simple_animal/hostile/mimic/copy/ranged(O.loc, O, firer)
+ else
+ new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer)
+
else if(istype(change, /mob/living/simple_animal/hostile/mimic/copy))
// Change our allegiance!
var/mob/living/simple_animal/hostile/mimic/copy/C = change
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 597ca6550ca..05a9ad91036 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -127,7 +127,7 @@ obj/item/projectile/kinetic/New()
var/turf/target_turf= get_turf(target)
if(istype(target_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = target_turf
- M.gets_drilled()
+ M.gets_drilled(firer)
new /obj/item/effect/kinetic_blast(target_turf)
..()
diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm
index 9afb2cc233b..04a1f9bddb0 100644
--- a/code/modules/reagents/Chemistry-Goon-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm
@@ -14,7 +14,7 @@ datum/reagent/silver_sulfadiazine
datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
if(method == TOUCH)
- M.adjustFireLoss((volume-(volume*2))*REM)
+ M.adjustFireLoss(-volume)
M << "You feel your burns healing!"
M.emote("scream")
if(method == INGEST)
@@ -25,8 +25,7 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth
datum/reagent/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
- if(prob(55))
- M.adjustFireLoss(-2*REM)
+ M.adjustFireLoss(-2*REM)
..()
return
@@ -40,7 +39,7 @@ datum/reagent/styptic_powder
datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
if(method == TOUCH)
- M.heal_organ_damage(volume*REM,0)
+ M.adjustBruteLoss(-volume)
M << "You feel your wounds knitting back together!"
M.emote("scream")
if(method == INGEST)
@@ -52,7 +51,7 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO
datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(55))
- M.adjustBruteLoss(-2*REM)
+ M.adjustBruteLoss(-8*REM)
..()
return
@@ -81,8 +80,8 @@ datum/reagent/synthflesh
datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if(!M) M = holder.my_atom
if(method == TOUCH)
- M.adjustBruteLoss(-(1*volume)*REM)
- M.adjustFireLoss(-(1*volume)*REM)
+ M.adjustBruteLoss(-1.5*volume)
+ M.adjustFireLoss(-1.5*volume)
M << "You feel your burns healing and your flesh knitting together!"
..()
return
@@ -496,7 +495,7 @@ datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
name = "Oculine"
id = "oculine"
result = "oculine"
- required_reagents = list("atropine" = 1, "spaceacillin" = 1, "salglu_solution" = 1)
+ required_reagents = list("charcoal" = 1, "carbon" = 1, "hydrogen" = 1)
result_amount = 3
mix_message = "The mixture sputters loudly and becomes a pale pink color."
@@ -601,24 +600,23 @@ datum/reagent/strange_reagent
metabolization_rate = 0.2
datum/reagent/strange_reagent/reaction_mob(var/mob/living/carbon/human/M as mob, var/method=TOUCH, var/volume)
- if(M.bruteloss > 80 || M.fireloss > 80)
- if(ishuman(M) || ismonkey(M))
- var/mob/living/carbon/C_target = M
- var/obj/item/organ/brain/B = C_target.getorgan(/obj/item/organ/brain)
- if(B)
- B.loc = get_turf(C_target)
- B.transfer_identity(C_target)
- C_target.internal_organs -= B
- M.gib()
- else if(M.stat == DEAD)
+ if(M.stat == DEAD)
+ if(M.getBruteLoss() >= 80 || M.getFireLoss() >= 80)
+ if(ishuman(M) || ismonkey(M))
+ var/mob/living/carbon/C_target = M
+ var/obj/item/organ/brain/B = C_target.getorgan(/obj/item/organ/brain)
+ if(B)
+ B.loc = get_turf(C_target)
+ B.transfer_identity(C_target)
+ C_target.internal_organs -= B
+ M.gib(M)
+ return
var/mob/dead/observer/ghost = M.get_ghost()
M.visible_message("[M]'s body convulses a bit.")
- if(M.health <= config.health_threshold_dead && !M.suiciding && !ghost && !(NOCLONE in M.mutations))
+ if(!M.suiciding && !ghost && !(NOCLONE in M.mutations))
M.stat = 1
- M.adjustBruteLoss(-10)
- M.adjustFireLoss(-10)
- M.adjustOxyLoss(-10)
- M.adjustToxLoss(-10)
+ M.adjustOxyLoss(-20)
+ M.adjustToxLoss(-20)
dead_mob_list -= M
living_mob_list |= list(M)
M.emote("gasp")
@@ -814,4 +812,4 @@ datum/reagent/stimulants/overdose_process(var/mob/living/M as mob)
M.adjustToxLoss(2*REM)
M.losebreath++
..()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/reagents/Chemistry-Goon-Other.dm b/code/modules/reagents/Chemistry-Goon-Other.dm
index 62b5a848c9a..963e85a214c 100644
--- a/code/modules/reagents/Chemistry-Goon-Other.dm
+++ b/code/modules/reagents/Chemistry-Goon-Other.dm
@@ -118,8 +118,8 @@ datum/reagent/colorful_reagent
required_reagents = list("stable_plasma" = 1, "radium" = 1, "space_drugs" = 1, "cryoxadone" = 1, "triple_citrus" = 1)
result_amount = 5
-datum/reagent/colorful_reagent/reaction_mob(var/mob/M, var/volume)
- if(M)
+datum/reagent/colorful_reagent/reaction_mob(var/mob/living/M, var/volume)
+ if(M && isliving(M))
M.color = pick(potential_colors)
..()
return
@@ -147,4 +147,4 @@ datum/reagent/triple_citrus
id = "triple_citrus"
result = "triple_citrus"
required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1)
- result_amount = 5
\ No newline at end of file
+ result_amount = 5
diff --git a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm
index ddb358b72b5..777ec06fdf0 100644
--- a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm
+++ b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm
@@ -140,4 +140,5 @@ proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull
for(var/i = 0, i < pull_times, i++)
step_away(X,T)
else
- X.throw_at(T)
\ No newline at end of file
+ for(var/i = 0, i < pull_times, i++)
+ step_towards(X,T)
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm
index 4264afcefa2..8c0a3b7d61c 100644
--- a/code/modules/reagents/Chemistry-Goon-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm
@@ -103,12 +103,11 @@ datum/reagent/neurotoxin2
datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob)
cycle_count++
- if(!M) M = holder.my_atom
if(M.brainloss + M.toxloss <= 60)
M.adjustBrainLoss(1*REM)
M.adjustToxLoss(1*REM)
if(cycle_count == 17)
- M.sleeping += 1
+ M.sleeping += 10 // buffed so it works
..()
return
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 50258b5f234..a5c6f90546e 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -107,9 +107,13 @@ datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var
var/part = amount / src.total_volume
var/trans_data = null
for (var/datum/reagent/current_reagent in src.reagent_list)
+ if (current_reagent.id == "blood" && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.inject_blood(my_atom, amount)
+ continue
var/current_reagent_transfer = current_reagent.volume * part
if(preserve_data)
- trans_data = current_reagent.data
+ trans_data = copy_data(current_reagent)
R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer)
@@ -524,6 +528,38 @@ datum/reagents/proc/delete()
if(my_atom)
my_atom.reagents = null
+ //two helper functions to preserve data across reactions (needed for xenoarch)
+datum/reagents/proc/get_data(var/reagent_id)
+ for(var/datum/reagent/D in reagent_list)
+ if(D.id == reagent_id)
+ //world << "proffering a data-carrying reagent ([reagent_id])"
+ return D.data
+
+datum/reagents/proc/set_data(var/reagent_id, var/new_data)
+ for(var/datum/reagent/D in reagent_list)
+ if(D.id == reagent_id)
+ //world << "reagent data set ([reagent_id])"
+ D.data = new_data
+
+datum/reagents/proc/copy_data(var/datum/reagent/current_reagent)
+ if (!current_reagent || !current_reagent.data) return null
+ if (!istype(current_reagent.data, /list)) return current_reagent.data
+
+ var/list/trans_data = current_reagent.data.Copy()
+
+ // We do this so that introducing a virus to a blood sample
+ // doesn't automagically infect all other blood samples from
+ // the same donor.
+ //
+ // Technically we should probably copy all data lists, but
+ // that could possibly eat up a lot of memory needlessly
+ // if most data lists are read-only.
+ if (trans_data["viruses"])
+ var/list/v = trans_data["viruses"]
+ trans_data["viruses"] = v.Copy()
+
+ return trans_data
+
///////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 21bbbefc1be..97d07b4d732 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -20,7 +20,7 @@
var/image/icon_beaker = null //cached overlay
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron",
- "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","fluorine","stable_plasma")
+ "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","stable_plasma")
/obj/machinery/chem_dispenser/proc/recharge()
if(stat & (BROKEN|NOPOWER)) return
@@ -189,9 +189,9 @@
amount = 5
recharge_delay = 30
dispensable_reagents = list()
- var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen"),
- list("lithium", "sugar", "sacid", "water", "copper", "mercury", "sodium"),
- list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron"))
+ var/list/special_reagents = list(list("hydrogen", "oxygen", "silicon", "phosphorus", "sulfur", "carbon", "nitrogen", "water"),
+ list("lithium", "sugar", "sacid", "copper", "mercury", "sodium","iodine","bromine"),
+ list("ethanol", "chlorine", "potassium", "aluminium", "radium", "fluorine", "iron", "fuel","silver","stable_plasma"))
/obj/machinery/chem_dispenser/constructable/New()
..()
@@ -251,12 +251,13 @@
icon_state = "mixer0"
use_power = 1
idle_power_usage = 20
- var/beaker = null
+ var/obj/item/weapon/reagent_containers/glass/beaker = null
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
var/mode = 0
var/condi = 0
var/useramount = 30 // Last used amount
+
/obj/machinery/chem_master/New()
create_reagents(100)
overlays += "waitlight"
@@ -277,15 +278,14 @@
stat |= NOPOWER
-/obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
+/obj/machinery/chem_master/attackby(var/obj/item/B as obj, var/mob/user as mob)
if(default_unfasten_wrench(user, B))
return
if(istype(B, /obj/item/weapon/reagent_containers/glass))
-
if(src.beaker)
- user << "A beaker is already loaded into the machine."
+ user << "A beaker is already loaded into the machine."
return
src.beaker = B
user.drop_item()
@@ -294,17 +294,16 @@
src.updateUsrDialog()
icon_state = "mixer1"
- else if(istype(B, /obj/item/weapon/storage/pill_bottle))
-
+ else if(!condi && istype(B, /obj/item/weapon/storage/pill_bottle))
if(src.loaded_pill_bottle)
- user << "A pill bottle is already loaded into the machine."
+ user << "A pill bottle is already loaded into the machine."
return
-
src.loaded_pill_bottle = B
user.drop_item()
B.loc = src
user << "You add the pill bottle into the dispenser slot!"
src.updateUsrDialog()
+
return
/obj/machinery/chem_master/Topic(href, href_list)
@@ -313,44 +312,63 @@
usr.set_machine(src)
-
- if (href_list["ejectp"])
+ if(href_list["ejectp"])
if(loaded_pill_bottle)
loaded_pill_bottle.loc = src.loc
loaded_pill_bottle = null
+
else if(href_list["close"])
usr << browse(null, "window=chem_master")
usr.unset_machine()
return
+ else if(href_list["toggle"])
+ mode = !mode
+
+ else if(href_list["createbottle"])
+ if(!condi)
+ var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
+ if(!name)
+ return
+ var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
+ P.name = trim("[name] bottle")
+ P.pixel_x = rand(-7, 7) //random position
+ P.pixel_y = rand(-7, 7)
+ reagents.trans_to(P, 30)
+ else
+ var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
+ reagents.trans_to(P, 50)
+
if(beaker)
- var/datum/reagents/R = beaker:reagents
+ var/datum/reagents/R = beaker.reagents
if (href_list["analyze"])
var/dat = ""
- if(!condi)
- dat += "Chemmaster 3000Chemical infos:
Name: [href_list["name"]]
Description: [href_list["desc"]]
(Back)"
- else
- dat += "Condimaster 3000Condiment infos:
Name: [href_list["name"]]
Description: [href_list["desc"]]
(Back)"
- usr << browse(dat, "window=chem_master;size=575x400")
+ dat += "[condi ? "Condiment" : "Chemical"] information:
"
+ dat += "Name: [href_list["name"]]
"
+ dat += "Description: [href_list["desc"]]
"
+ dat += "Back"
+ var/datum/browser/popup = new(usr, "chem_master", name)
+ popup.set_content(dat)
+ popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open(1)
return
- else if (href_list["add"])
-
+ else if(href_list["add"])
if(href_list["amount"])
var/id = href_list["add"]
var/amount = text2num(href_list["amount"])
if (amount < 0) return
R.trans_id_to(src, id, amount)
- else if (href_list["addcustom"])
-
+ else if(href_list["addcustom"])
var/id = href_list["addcustom"]
- useramount = input("Select the amount to transfer.", 30, useramount) as num
- useramount = isgoodnumber(useramount)
+ var/amt_temp = isgoodnumber(input(usr, "Select the amount to transfer.", "Transfer how much?", useramount) as num|null)
+ if(!amt_temp)
+ return
+ useramount = amt_temp
src.Topic(null, list("amount" = "[useramount]", "add" = "[id]"))
- else if (href_list["remove"])
-
+ else if(href_list["remove"])
if(href_list["amount"])
var/id = href_list["remove"]
var/amount = text2num(href_list["amount"])
@@ -360,35 +378,38 @@
else
reagents.remove_reagent(id, amount)
-
- else if (href_list["removecustom"])
-
+ else if(href_list["removecustom"])
var/id = href_list["removecustom"]
- useramount = input("Select the amount to transfer.", 30, useramount) as num
- useramount = isgoodnumber(useramount)
+ var/amt_temp = isgoodnumber(input(usr, "Select the amount to transfer.", "Transfer how much?", useramount) as num|null)
+ if(!amt_temp)
+ return
+ useramount = amt_temp
src.Topic(null, list("amount" = "[useramount]", "remove" = "[id]"))
- else if (href_list["toggle"])
- mode = !mode
-
- else if (href_list["main"])
+ else if(href_list["main"])
attack_hand(usr)
return
- else if (href_list["eject"])
+
+ else if(href_list["eject"])
if(beaker)
- beaker:loc = src.loc
+ beaker.loc = src.loc
beaker = null
reagents.clear_reagents()
icon_state = "mixer0"
- else if (href_list["createpill"]) //Also used for condiment packs.
+
+ else if(href_list["createpill"]) //Also used for condiment packs.
if(reagents.total_volume == 0) return
if(!condi)
var/amount = 1
var/vol_each = min(reagents.total_volume, 50)
if(text2num(href_list["many"]))
- amount = min(max(round(input(usr, "Amount:", "How many pills?") as num), 1), 10)
- vol_each = min(reagents.total_volume/amount, 50)
- var/name = reject_bad_text(input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)"))
+ amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many pills?", amount) as num|null), 0), 10)
+ if(!amount)
+ return
+ vol_each = min(reagents.total_volume / amount, 50)
+ var/name = stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
+ if(!name || !reagents.total_volume)
+ return
var/obj/item/weapon/reagent_containers/pill/P
for(var/i = 0; i < amount; i++)
@@ -396,47 +417,38 @@
P = new/obj/item/weapon/reagent_containers/pill(loaded_pill_bottle)
else
P = new/obj/item/weapon/reagent_containers/pill(src.loc)
- if(!name) name = reagents.get_master_reagent_name()
- P.name = "[name] pill"
+ P.name = trim("[name] pill")
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P,vol_each)
else
- var/name = reject_bad_text(input(usr,"Name:","Name your bag!",reagents.get_master_reagent_name()))
+ var/name = stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN)
+ if(!name || !reagents.total_volume)
+ return
var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(src.loc)
- if(!name) name = reagents.get_master_reagent_name()
P.originalname = name
- P.name = "[name] pack"
+ P.name = trim("[name] pack")
P.desc = "A small condiment pack. The label says it contains [name]."
reagents.trans_to(P,10)
- else if (href_list["createbottle"])
- if(!condi)
- var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))
- var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
- if(!name) name = reagents.get_master_reagent_name()
- P.name = "[name] bottle"
- P.pixel_x = rand(-7, 7) //random position
- P.pixel_y = rand(-7, 7)
- reagents.trans_to(P,30)
- else
- var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
- reagents.trans_to(P,50)
else if(href_list["createpatch"])
if(reagents.total_volume == 0) return
var/amount = 1
var/vol_each = min(reagents.total_volume, 50)
if(text2num(href_list["many"]))
- amount = min(max(round(input(usr, "Amount:", "How many patches?") as num), 1), 10)
- vol_each = min(reagents.total_volume/amount, 50)
- var/name = reject_bad_text(input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)"))
+ amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many patches?", amount) as num|null), 0), 10)
+ if(!amount)
+ return
+ vol_each = min(reagents.total_volume / amount, 50)
+ var/name = stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
+ if(!name || !reagents.total_volume)
+ return
var/obj/item/weapon/reagent_containers/pill/P
for(var/i = 0; i < amount; i++)
P = new/obj/item/weapon/reagent_containers/pill/patch(src.loc)
- if(!name) name = reagents.get_master_reagent_name()
- P.name = "[name] patch"
+ P.name = trim("[name] patch")
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P,vol_each)
@@ -453,61 +465,76 @@
/obj/machinery/chem_master/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
+
user.set_machine(src)
var/dat = ""
- if(!beaker)
+ if(beaker)
+ dat += "Beaker \[[beaker.reagents.total_volume]/[beaker.volume]\] Eject and Clear Buffer "
+ else
dat = "Please insert beaker. "
- if(src.loaded_pill_bottle)
- dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]
"
- else
- dat += "No pill bottle inserted.
"
- dat += "Close"
- else
- var/datum/reagents/R = beaker:reagents
- dat += "Eject beaker and Clear Buffer "
- if(src.loaded_pill_bottle)
- dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]
"
- else
- dat += "No pill bottle inserted.
"
- if(!R.total_volume)
- dat += "Beaker is empty."
- else
- dat += "Add to buffer: "
- for(var/datum/reagent/G in R.reagent_list)
- dat += "[G.name] , [G.volume] Units - "
- dat += "(Analyze) "
- dat += "(1) "
- dat += "(5) "
- dat += "(10) "
- dat += "(All) "
- dat += "(Custom) "
- dat += " Transfer to [(!mode ? "disposal" : "beaker")]: "
- if(reagents.total_volume)
- for(var/datum/reagent/N in reagents.reagent_list)
- dat += "[N.name] , [N.volume] Units - "
- dat += "(Analyze) "
- dat += "(1) "
- dat += "(5) "
- dat += "(10) "
- dat += "(All) "
- dat += "(Custom) "
+ dat += " Add to buffer: Transfer to [(!mode ? "disposal" : "beaker")]:"
+ if(reagents.total_volume)
+ for(var/datum/reagent/N in reagents.reagent_list)
+ dat += "- [N.name], [N.volume] Units - "
+ dat += "Analyze "
+ dat += "1 "
+ dat += "5 "
+ dat += "10 "
+ dat += "All "
+ dat += "Custom"
+ else
+ dat += "
- Buffer is empty."
+ dat += "
"
+
+ if(!condi)
+ if(src.loaded_pill_bottle)
+ dat += "Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\] Eject"
+ else
+ dat += "No pill bottle inserted."
+ else
+ dat += " "
+
+ dat += ""
+ if(!condi)
+ if(beaker && reagents.total_volume)
+ dat += "- Create pill (50 units max)"
+ dat += "
- Create multiple pills
"
+ dat += " - Create patch (50 units max)"
+ dat += "
- Create multiple patches
"
+ else
+ dat += " - Create pill (50 units max)"
+ dat += "
- Create multiple pills
"
+ dat += " - Create patch (50 units max)"
+ dat += "
- Create multiple patches
"
+ else
+ if(beaker && reagents.total_volume)
+ dat += " - Create pack (10 units max)
"
+ else
+ dat += " - Create pack (10 units max)
"
+ dat += " - Create bottle ([condi ? "50" : "30"] units max)"
+ dat += "
"
+ dat += " Close"
+ var/datum/browser/popup = new(user, "chem_master", name, 470, 500)
+ popup.set_content(dat)
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open(1)
return
/obj/machinery/chem_master/proc/isgoodnumber(var/num)
@@ -515,7 +542,7 @@
if(num > 200)
num = 200
else if(num < 0)
- num = 1
+ num = 0
else
num = round(num)
return num
@@ -523,7 +550,6 @@
return 0
-
/obj/machinery/chem_master/condimaster
name = "CondiMaster 3000"
desc = "Used to create condiments and other cooking supplies."
diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm
index 43b13f3c0f9..34a109b7dc5 100644
--- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm
@@ -75,7 +75,7 @@ datum/reagent/blob/acid
datum/reagent/blob/acid/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
if(method == TOUCH)
- M.acid_act(20,1,10)
+ M.acid_act(10,1,5)
M.apply_damage(10, BRUTE)
M << "The blob's tendrils melt though your equipment!"
@@ -148,4 +148,4 @@ datum/reagent/blob/explosive/reaction_mob(var/mob/living/M as mob, var/method=TO
step_away(X,pull)
step_away(X,pull)
else
- X.throw_at(pull)
\ No newline at end of file
+ X.throw_at(pull)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
index 9e859298063..335c2be3a81 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm
@@ -166,7 +166,6 @@ datum/reagent/blood/on_merge(var/list/data)
src.data["viruses"] = preserve
return 1
-
datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
if(!istype(T)) return
var/datum/reagent/blood/self = src
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index c97db6d16bd..e81ee2c5813 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1066,7 +1066,7 @@ datum/chemical_reaction/pestkiller
required_other = 1
/datum/chemical_reaction/slimecell/on_reaction(var/datum/reagents/holder, var/created_volume)
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
+ var/obj/item/weapon/stock_parts/cell/high/slime/P = new /obj/item/weapon/stock_parts/cell/high/slime
P.loc = get_turf(holder.my_atom)
/datum/chemical_reaction/slimeglow
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
new file mode 100644
index 00000000000..088c6ae2236
--- /dev/null
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -0,0 +1,52 @@
+/obj/item/weapon/reagent_containers/blood
+ name = "blood pack"
+ desc = "Contains blood used for transfusion. Must be attached to an IV drip."
+ icon = 'icons/obj/bloodpack.dmi'
+ icon_state = "empty"
+ volume = 200
+
+ var/blood_type = null
+
+/obj/item/weapon/reagent_containers/blood/New()
+ ..()
+ if(blood_type != null)
+ name = "blood pack [blood_type]"
+ reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
+ update_icon()
+
+/obj/item/weapon/reagent_containers/blood/on_reagent_change()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/blood/update_icon()
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9) icon_state = "empty"
+ if(10 to 50) icon_state = "half"
+ if(51 to INFINITY) icon_state = "full"
+
+/obj/item/weapon/reagent_containers/blood/random/New()
+ blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-")
+ ..()
+
+/obj/item/weapon/reagent_containers/blood/APlus
+ blood_type = "A+"
+
+/obj/item/weapon/reagent_containers/blood/AMinus
+ blood_type = "A-"
+
+/obj/item/weapon/reagent_containers/blood/BPlus
+ blood_type = "B+"
+
+/obj/item/weapon/reagent_containers/blood/BMinus
+ blood_type = "B-"
+
+/obj/item/weapon/reagent_containers/blood/OPlus
+ blood_type = "O+"
+
+/obj/item/weapon/reagent_containers/blood/OMinus
+ blood_type = "O-"
+
+/obj/item/weapon/reagent_containers/blood/empty
+ name = "empty blood pack"
+ desc = "Seems pretty useless... Maybe if there were a way to fill it?"
+ icon_state = "empty"
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 8ab2d181cff..239782e0faa 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -115,7 +115,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/traitor/New()
..()
extra_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "neurotoxin2", "cyanide")
- reagents.add_reagent("[extra_reagent]" = 3)
+ reagents.add_reagent("[extra_reagent]", 3)
/obj/item/weapon/reagent_containers/glass/bottle/polonium
name = "polonium bottle"
@@ -139,7 +139,7 @@
name = "formaldehyde bottle"
desc = "A small bottle. Contains Formaldehyde."
icon_state = "bottle16"
- list_reagents = list("formaldehye" = 30)
+ list_reagents = list("formaldehyde" = 30)
/obj/item/weapon/reagent_containers/glass/bottle/histamine
name = "histamine bottle"
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index bbe19ffdbc3..8a0afbfe290 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -50,7 +50,7 @@
ignore_flags = 1 // So they can heal their comrades.
list_reagents = list("epinephrine" = 15, "salglu_solution" = 15)
-obj/item/weapon/reagent_containers/hypospray/combat/nanites
+/obj/item/weapon/reagent_containers/hypospray/combat/nanites
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with expensive medical nanites for rapid healing."
volume = 100
list_reagents = list("nanites" = 80, "synaptizine" = 20)
@@ -66,6 +66,7 @@ obj/item/weapon/reagent_containers/hypospray/combat/nanites
volume = 10
ignore_flags = 1 //so you can medipen through hardsuits
flags = null
+ list_reagents = list("epinephrine" = 10)
/obj/item/weapon/reagent_containers/hypospray/medipen/New()
..()
@@ -105,4 +106,4 @@ obj/item/weapon/reagent_containers/hypospray/combat/nanites
/obj/item/weapon/reagent_containers/hypospray/medipen/morphine
name = "morphine medipen"
desc = "A rapid way to get you out of a tight situation and fast! You'll feel rather drowsy, though."
- list_reagents = list("morphine" = 10)
+ list_reagents = list("morphine" = 10)
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 04131cd4de8..dfdb24a2863 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -8,11 +8,14 @@
volume = 50
var/apply_type = INGEST
var/apply_method = "swallow"
+ var/roundstart = 0
/obj/item/weapon/reagent_containers/pill/New()
..()
if(!icon_state)
icon_state = "pill[rand(1,20)]"
+ if(reagents.total_volume && roundstart)
+ name += " ([reagents.total_volume]u)"
/obj/item/weapon/reagent_containers/pill/attack_self(mob/user)
@@ -70,63 +73,64 @@
desc = "Highly toxic."
icon_state = "pill5"
list_reagents = list("toxin" = 50)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/cyanide
name = "cyanide pill"
desc = "Don't swallow this."
icon_state = "pill5"
list_reagents = list("cyanide" = 50)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/adminordrazine
name = "adminordrazine pill"
desc = "It's magic. We don't have to explain it."
icon_state = "pill16"
list_reagents = list("adminordrazine" = 50)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/morphine
name = "morphine pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
list_reagents = list("morphine" = 30)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/stimulant
name = "stimulant pill"
desc = "Often taken by overworked employees, athletes, and the inebriated. You'll snap to attention immediately!"
icon_state = "pill19"
list_reagents = list("ephedrine" = 10, "ethylredoxrazine" = 10, "coffee" = 30)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/salbutamol
name = "salbutamol pill"
desc = "Used to treat oxygen deprivation."
icon_state = "pill18"
list_reagents = list("salbutamol" = 30)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/charcoal
name = "antitoxin pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
list_reagents = list("charcoal" = 50)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/epinephrine
name = "epinephrine pill"
desc = "Used to stabilize patients."
icon_state = "pill5"
- list_reagents = list("epinephrine" = 50)
-
+ list_reagents = list("epinephrine" = 15)
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/mannitol
name = "mannitol pill"
desc = "Used to treat brain damage."
icon_state = "pill17"
list_reagents = list("mannitol" = 50)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/mutadone
name = "mutadone pill"
desc = "Used to treat genetic damage."
icon_state = "pill20"
list_reagents = list("mutadone" = 50)
-
+ roundstart = 1
/obj/item/weapon/reagent_containers/pill/salicyclic
- name = "salicyclic acid pill"
+ name = "salicylic acid pill"
desc = "Used to dull pain."
icon_state = "pill5"
- list_reagents = list("sal_acid" = 50)
+ list_reagents = list("sal_acid" = 24)
+ roundstart = 1
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index d231d8b4f35..a97f1f44a08 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -77,11 +77,10 @@
if(istype(target, /mob/living/carbon)) //maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
var/amount = src.reagents.maximum_volume - src.reagents.total_volume
var/mob/living/carbon/T = target
- var/datum/reagent/B = new /datum/reagent/blood
if(!check_dna_integrity(T))
user << "You are unable to locate any blood."
return
- if(NOCLONE in T.mutations) //target done been et, no more blood in him
+ if(NOCLONE in T.mutations) //target done been eat, no more blood in him
user << "You are unable to locate any blood."
return
if(target != user)
@@ -92,46 +91,14 @@
busy = 0
return
busy = 0
- B.holder = src
- B.volume = amount
- //set reagent data
- B.data["donor"] = T
+ var/datum/reagent/B
+ B = T.take_blood(src,amount)
- /*
- if(T.virus && T.virus.spread_type != SPECIAL)
- B.data["virus"] = new T.virus.type(0)
- */
-
- for(var/datum/disease/D in T.viruses)
- if(!B.data["viruses"])
- B.data["viruses"] = list()
-
- B.data["viruses"] += new D.type(0, D, 1)
-
- B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
- if(T.resistances&&T.resistances.len)
- B.data["resistances"] = T.resistances.Copy()
- if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
- var/mob/living/carbon/human/HT = target
- B.data["blood_type"] = copytext(HT.dna.blood_type,1,0)
- var/list/temp_chem = list()
- for(var/datum/reagent/R in target.reagents.reagent_list)
- temp_chem += R.name
- temp_chem[R.name] = R.volume
- B.data["trace_chem"] = list2params(temp_chem)
- if(T.mind)
- B.data["mind"] = T.mind
- if(T.ckey)
- B.data["ckey"] = T.ckey
- if(!T.suiciding)
- B.data["cloneable"] = 1
- B.data["gender"] = T.gender
- B.data["real_name"] = T.real_name
- B.data["factions"] = T.faction
- reagents.reagent_list += B
- reagents.update_total()
- on_reagent_change()
- reagents.handle_reactions()
+ if (B)
+ src.reagents.reagent_list += B
+ src.reagents.update_total()
+ src.on_reagent_change()
+ src.reagents.handle_reactions()
user.visible_message("[user] takes a blood sample from [target].")
else //if not mob
@@ -190,10 +157,17 @@
reagents.reaction(target, INGEST)
spawn(5)
- target.add_fingerprint(user)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "You inject [trans] unit\s of the solution. [src] now contains [reagents.total_volume] unit\s."
- if(reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
+ var/datum/reagent/blood/B
+ for(var/datum/reagent/blood/d in src.reagents.reagent_list)
+ B = d
+ break
+ if(B && istype(target,/mob/living/carbon))
+ var/mob/living/carbon/C = target
+ C.inject_blood(src,5)
+ else
+ src.reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You inject 5 units of the solution. The syringe now contains [src.reagents.total_volume] units."
+ if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
mode = SYRINGE_DRAW
update_icon()
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 41c7d2f53ee..50aaac4afb1 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -331,14 +331,14 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
////////////Janitor Designs//////////////
/////////////////////////////////////////
-/datum/design/advmop
- name = "Advanced Mop"
- desc = "An upgraded mop with a large internal capacity for holding water or other cleaning chemicals."
- id = "advmop"
- req_tech = list("materials" = 4, "engineering" = 3)
+/datum/design/buffer
+ name = "Floor Buffer Upgrade"
+ desc = "A floor buffer that can be attached to vehicular janicarts."
+ id = "buffer"
+ req_tech = list("materials" = 5, "engineering" = 3)
build_type = PROTOLATHE
- materials = list("$metal" = 2500, "$glass" = 200)
- build_path = /obj/item/weapon/mop/advanced
+ materials = list("$metal" = 3000, "$glass" = 200)
+ build_path = /obj/item/janiupgrade
category = list("Equipement")
/datum/design/holosign
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index a983d2fb1d8..e6f476df192 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -630,15 +630,17 @@
id = "borg_upgrade_vtec"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/vtec
- materials = list("$metal"=80000 , "$glass"=6000 , "$gold"= 5000)
+ req_tech = list("engineering" = 4, "materials" = 5)
+ materials = list("$metal"=80000 , "$glass"=6000 , "$uranium"= 5000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
-/datum/design/borg_upgrade_disablercooler
- name = "Cyborg Upgrade Module (Rapid Disabler Cooling Module)"
- id = "borg_upgrade_disablercooler"
+/datum/design/borg_upgrade_tasercooler
+ name = "Cyborg Upgrade Module (Rapid Taser Cooling Module)"
+ id = "borg_upgrade_tasercooler"
build_type = MECHFAB
- build_path = /obj/item/borg/upgrade/disablercooler
+ build_path = /obj/item/borg/upgrade/tasercooler
+ req_tech = list("combat" = 5, "power" = 4)
materials = list("$metal"=80000 , "$glass"=6000 , "$gold"= 2000, "$diamond" = 500)
construction_time = 120
category = list("Cyborg Upgrade Modules")
@@ -648,7 +650,8 @@
id = "borg_upgrade_jetpack"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/jetpack
- materials = list("$metal"=10000,"$plasma"=15000,"$uranium" = 20000)
+ req_tech = list("engineering" = 4, "power" = 4)
+ materials = list("$metal"=10000,"$plasma"=12000,"$uranium" = 10000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index e8d38856d04..6f48cc3e3c5 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -14,7 +14,7 @@
#define EFFECT_PROB_HIGH 75
#define EFFECT_PROB_VERYHIGH 95
-#define FAIL 7
+#define FAIL 8
/obj/machinery/r_n_d/experimentor
name = "E.X.P.E.R.I-MENTOR"
icon = 'icons/obj/machines/heavy_lathe.dmi'
@@ -313,7 +313,7 @@
var/list/chems = list("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = src
- R.add_reagent(pick(chems), 50)
+ R.add_reagent(pick(chems) , 50)
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
smoke.set_up(R, 1, 0, src, 0, silent = 1)
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -322,10 +322,10 @@
ejectItem(TRUE)
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("[src]'s chemical chamber has sprung a leak!.")
- var/list/chems = list("mutationtoxin","amutationtoxin","nanites","xenomicrobes")
+ var/list/chems = list("mutationtoxin","nanomachines","xenomicrobes")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = src
- R.add_reagent(pick(chems), 50)
+ R.add_reagent(pick(chems) , 50)
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
smoke.set_up(R, 1, 0, src, 0, silent = 1)
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -347,7 +347,7 @@
var/obj/item/weapon/reagent_containers/food/drinks/coffee/C = new /obj/item/weapon/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src))))
var/list/chems = list("plasma","capsaicin","ethanol")
C.reagents.remove_any(25)
- C.reagents.add_reagent(pick(chems),25)
+ C.reagents.add_reagent(pick(chems) , 50)
C.name = "Cup of Suspicious Liquid"
C.desc = "It has a large hazard symbol printed on the side in fading ink."
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
@@ -382,16 +382,16 @@
if(prob(EFFECT_PROB_LOW) && criticalReaction)
visible_message("[src]'s emergency coolant system gives off a small ping!")
var/obj/machinery/vending/coffee/C = new /obj/machinery/vending/coffee(get_turf(pick(oview(1,src))))
- var/list/chems = list("uranium","frostoil","hyperzine")
+ var/list/chems = list("uranium","frostoil","ephedrine")
C.reagents.remove_any(25)
- C.reagents.add_reagent(pick(chems),25)
+ C.reagents.add_reagent(pick(chems) , 50)
C.name = "Cup of Suspicious Liquid"
C.desc = "It has a large hazard symbol printed on the side in fading ink."
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = src
- R.add_reagent("frostoil", 50)
+ R.add_reagent("frostoil" , 50)
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
smoke.set_up(R, 1, 0, src, 0, silent = 1)
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -547,6 +547,7 @@
#undef SCANTYPE_HEAT
#undef SCANTYPE_COLD
#undef SCANTYPE_OBLITERATE
+#undef SCANTYPE_DISCOVER
#undef EFFECT_PROB_VERYLOW
#undef EFFECT_PROB_LOW
@@ -660,4 +661,4 @@
visible_message("The [src] twists and bends, relocating itself!")
throwSmoke(get_turf(user))
do_teleport(user, get_turf(user), 8, asoundin = 'sound/effects/phasein.ogg')
- throwSmoke(get_turf(user))
\ No newline at end of file
+ throwSmoke(get_turf(user))
diff --git a/code/world.dm b/code/world.dm
index 55f7260d0d9..1b0a3d17072 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -58,7 +58,7 @@
world.log << "Database connection established."
- data_core = new /obj/effect/datacore()
+ data_core = new /datum/datacore()
spawn(-1)
@@ -66,6 +66,7 @@
process_teleport_locs() //Sets up the wizard teleport locations
process_ghost_teleport_locs() //Sets up ghost teleport locations.
+ SortAreas() //Build the list of all existing areas and sort it alphabetically
#ifdef MAP_NAME
map_name = "[MAP_NAME]"
diff --git a/config/admins.txt b/config/admins.txt
index 3081f865151..dc149720d8b 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -77,3 +77,4 @@ thurgatar = Game Master
xerux = Game Master
dannno = Game Master
allura = Game Master
+lo6a4evskiy = Game Master
diff --git a/config/game_options.txt b/config/game_options.txt
index 75b6b241adf..8280e42debf 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -159,8 +159,7 @@ GATEWAY_DELAY 18000
### ACCESS ###
-## If the number of players ready at round starts exceeds this threshold, JOBS_HAVE_MINIMAL_ACCESS will automatically toggle on.
-## If the number of players does not reach this threshold, JOBS_HAVE_MINIMAL_ACCESS will automatically toggle off, and assistants/security will be given maintenance access.
+## If the number of players ready at round starts exceeds this threshold, JOBS_HAVE_MINIMAL_ACCESS will automatically be enabled. Otherwise, it will be disabled.
## This is useful for accomodating both low and high population rounds on the same server.
## Comment out or set to 0 to disable this automatic toggle.
MINIMAL_ACCESS_THRESHOLD 20
@@ -168,7 +167,7 @@ MINIMAL_ACCESS_THRESHOLD 20
## Comment this out if you wish to use the setup where jobs have more access.
## This is intended for servers with low populations - where there are not enough
## players to fill all roles, so players need to do more than just one job.
-## This option is ignored if MINIMAL_ACCESS_THRESHOLD is non-zero.
+## This option is ignored if MINIMAL_ACCESS_THRESHOLD is used.
#JOBS_HAVE_MINIMAL_ACCESS
## Uncomment to give assistants maint access.
diff --git a/html/changelog.html b/html/changelog.html
index 43d0588467c..123c3211958 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,98 @@
-->
+
+ 04 February 2015
+ Danno updated:
+
+ - Fixes dufflebag's storage capacity.
+
+ Deantwo updated:
+
+ - Removes duplicate fluorine from Chemical Dispenser.
+ - Added GoonChems to the Portable Chem Dispenser.
+ - Added cancel buttons to the ChemMaster and CondiMaster when making bottles, pills, etc.
+
+ Delimusca updated:
+
+ - Added new foam armblade toy to arcade prizes.
+ - Slimes can drag themselves to mobs to start feeding.
+ - Attacking another slime will pull them off their victim if they're feeding or steal some of their mass.
+
+ GunHog updated:
+
+ - Five new silicon emotes: *buzz2, *chime, *honk, *sad and *warn
+
+ Incoming5643 updated:
+
+ - New contraband crate containing fifty butterflies.
+ - Shuttle will now always arrive, but won't launch in rounds where it would've been previously auto-recalled.
+
+ Menshin updated:
+
+ - Fixed being unable to place cables on plating.
+
+ Paprika updated:
+
+ - Helmets for hardsuits are stored inside the suit and cannot be equipped without the suit on.
+ - EVA space suits are now lighter for faster movement but lack flash or welding protection, don't hide your identity and have less radiation protection.
+
+ Perakp updated:
+
+ - Tweaked slowdown due to coldness when in in low gravity.
+
+ Steelpoint updated:
+
+ - ERT base equipment rooms are now access restriction to each role.
+ - ERT commander spawns wearing hardsuit for identification.
+ - Two boxes of metal foam grenades added for ERT engineers.
+ - Deep space sensors recently detected the derelict remains of the NTSS Omen, a outdated Medical Frigate thought lost, within close proximity to Space Station 13.
+ - If any SS13 EVA Personal are able to locate this ship, they will be able to pilot it back to the station for recovery. The ship may also have cordinates for other locations.
+
+ Xhuis updated:
+
+ - Changelings now have the ability Strained Muscles, which lets them move at inhuman speeds at the cost of rapid stamina damage. It costs one evolution points=.
+ - Changelings now have the ability Augmented Eyesight, which lets them see creatures through walls and see in the dark. It costs two evolution points.
+ - After many failed raids, the Syndicate have finally done something about poor communications between cyborgs and operatives.
+ - Syndicate Cyborgs now come equipped with operative pinpointers, which will automatically point to the nearest nuclear operative.
+ - Handheld crew monitors can now be stored in medical belts.
+
+
+
+
+ 26 January 2015
+ Dannno updated:
+
+ - Added fannypacks of multiple colors, 3 of which are accessible from the clothing vendor.
+ - Added dufflebags to multiple lockers throughout the station and to the syndicate shuttle, more storage slots at the cost of move speed.
+
+ Deantwo updated:
+
+ - Fixed some bugs in PDA's NTRC Chatroom feature.
+ - You can now use PaperBBCode/PenCode when writing news articles on the newscaster.
+ - PDA's Notekeeper now uses PaperBBCode/PenCode rather than HTML.
+ - Scanning paper with your PDA is now more informative.
+
+ Firecage updated:
+
+ - We, at NanoTrasen, have recently upgraded the Kitchen Spikes to include the skin of both Monkeys and Aliens when you harvest their flesh!
+ - In other news, a station in a nearby Sector has been making monkey and xeno costumes. We are not sure why.
+ - Added the ability to reform mineral floortiles back into sheets/bars
+
+ Ikarrus updated:
+
+ - Added a new config option MINIMAL_ACCESS_THRESHOLD that can be used to automatically give players more access during low-population rounds. See game_options.txt for more information.
+
+ Lo6a4evskiy updated:
+
+ - The kitchen now contains a brand new food cart. It can store foods and liquids, mix them into cocktails and dispense where needed. Food delivery has never been easier!
+
+ fleure updated:
+
+ - Added briefcase filled with cash to uplink.
+
+
+
21 January 2015
Iamgoofball updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index e81e3a38aa1..444c27d60ce 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -2349,3 +2349,80 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
and Unstable Mutagen.
- rscadd: Adds 9 new Disabilites and 2 new genetic powers.
- rscadd: You can now heat donk pockets once more. Rejoice.
+2015-01-26:
+ Dannno:
+ - rscadd: Added fannypacks of multiple colors, 3 of which are accessible from the
+ clothing vendor.
+ - rscadd: Added dufflebags to multiple lockers throughout the station and to the
+ syndicate shuttle, more storage slots at the cost of move speed.
+ Deantwo:
+ - bugfix: Fixed some bugs in PDA's NTRC Chatroom feature.
+ - rscadd: You can now use PaperBBCode/PenCode when writing news articles on the
+ newscaster.
+ - rscadd: PDA's Notekeeper now uses PaperBBCode/PenCode rather than HTML.
+ - tweak: Scanning paper with your PDA is now more informative.
+ Firecage:
+ - rscadd: We, at NanoTrasen, have recently upgraded the Kitchen Spikes to include
+ the skin of both Monkeys and Aliens when you harvest their flesh!
+ - rscadd: In other news, a station in a nearby Sector has been making monkey and
+ xeno costumes. We are not sure why.
+ - rscadd: Added the ability to reform mineral floortiles back into sheets/bars
+ Ikarrus:
+ - rscadd: Added a new config option MINIMAL_ACCESS_THRESHOLD that can be used to
+ automatically give players more access during low-population rounds. See game_options.txt
+ for more information.
+ Lo6a4evskiy:
+ - rscadd: The kitchen now contains a brand new food cart. It can store foods and
+ liquids, mix them into cocktails and dispense where needed. Food delivery has
+ never been easier!
+ fleure:
+ - rscadd: Added briefcase filled with cash to uplink.
+2015-02-04:
+ Danno:
+ - bugfix: Fixes dufflebag's storage capacity.
+ Deantwo:
+ - bugfix: Removes duplicate fluorine from Chemical Dispenser.
+ - bugfix: Added GoonChems to the Portable Chem Dispenser.
+ - bugfix: Added cancel buttons to the ChemMaster and CondiMaster when making bottles,
+ pills, etc.
+ Delimusca:
+ - rscadd: Added new foam armblade toy to arcade prizes.
+ - tweak: Slimes can drag themselves to mobs to start feeding.
+ - tweak: Attacking another slime will pull them off their victim if they're feeding
+ or steal some of their mass.
+ GunHog:
+ - rscadd: 'Five new silicon emotes: *buzz2, *chime, *honk, *sad and *warn'
+ Incoming5643:
+ - rscadd: New contraband crate containing fifty butterflies.
+ - tweak: Shuttle will now always arrive, but won't launch in rounds where it would've
+ been previously auto-recalled.
+ Menshin:
+ - bugfix: Fixed being unable to place cables on plating.
+ Paprika:
+ - wip: Helmets for hardsuits are stored inside the suit and cannot be equipped without
+ the suit on.
+ - tweak: EVA space suits are now lighter for faster movement but lack flash or welding
+ protection, don't hide your identity and have less radiation protection.
+ Perakp:
+ - tweak: Tweaked slowdown due to coldness when in in low gravity.
+ Steelpoint:
+ - rscadd: ERT base equipment rooms are now access restriction to each role.
+ - tweak: ERT commander spawns wearing hardsuit for identification.
+ - rscadd: Two boxes of metal foam grenades added for ERT engineers.
+ - rscadd: Deep space sensors recently detected the derelict remains of the NTSS
+ Omen, a outdated Medical Frigate thought lost, within close proximity to Space
+ Station 13.
+ - rscadd: If any SS13 EVA Personal are able to locate this ship, they will be able
+ to pilot it back to the station for recovery. The ship may also have cordinates
+ for other locations.
+ Xhuis:
+ - rscadd: Changelings now have the ability Strained Muscles, which lets them move
+ at inhuman speeds at the cost of rapid stamina damage. It costs one evolution
+ points=.
+ - rscadd: Changelings now have the ability Augmented Eyesight, which lets them see
+ creatures through walls and see in the dark. It costs two evolution points.
+ - tweak: After many failed raids, the Syndicate have finally done something about
+ poor communications between cyborgs and operatives.
+ - rscadd: Syndicate Cyborgs now come equipped with operative pinpointers, which
+ will automatically point to the nearest nuclear operative.
+ - tweak: Handheld crew monitors can now be stored in medical belts.
diff --git a/html/changelogs/Danno-Suicide-7496.yml b/html/changelogs/Danno-Suicide-7496.yml
new file mode 100644
index 00000000000..e32356f3002
--- /dev/null
+++ b/html/changelogs/Danno-Suicide-7496.yml
@@ -0,0 +1,5 @@
+author: Dannno
+
+delete-after: True
+ - rscadd: "Added specific suicide messages to guns of all types."
+ - rscadd: "Added special suicide messages to various different items."
\ No newline at end of file
diff --git a/html/changelogs/Deantwo-PR-7445.yml b/html/changelogs/Deantwo-PR-7445.yml
new file mode 100644
index 00000000000..d31b8778699
--- /dev/null
+++ b/html/changelogs/Deantwo-PR-7445.yml
@@ -0,0 +1,6 @@
+author: Deantwo
+
+delete-after: True
+
+changes:
+ - tweak: "Updated the ChemMaster's UI to the station default along with some functionality improvements."
diff --git a/html/changelogs/FIRECAGE-PR-7141.yml b/html/changelogs/FIRECAGE-PR-7141.yml
deleted file mode 100644
index 494429c0798..00000000000
--- a/html/changelogs/FIRECAGE-PR-7141.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Firecage
-
-delete-after: True
-
-changes:
- - rscadd: "Added the ability to reform mineral floortiles back into sheets/bars"
\ No newline at end of file
diff --git a/html/changelogs/Iamgoofball-Buffs.yml b/html/changelogs/Iamgoofball-Buffs.yml
new file mode 100644
index 00000000000..5763d9702db
--- /dev/null
+++ b/html/changelogs/Iamgoofball-Buffs.yml
@@ -0,0 +1,6 @@
+ author: Iamgoofball
+
+delete-after: True
+
+changes:
+ - rscadd: "Buffs the shit out of Styptic Powder and Silver Sulf, they're now viable to use. Synthflesh is still good for general treatment, but overall Styptic and Silver Sulf deal with their respective damage types way better now."
\ No newline at end of file
diff --git a/html/changelogs/Lo6a4evskiy-PR-6892.yml b/html/changelogs/Lo6a4evskiy-PR-6892.yml
deleted file mode 100644
index 9ef7e38802d..00000000000
--- a/html/changelogs/Lo6a4evskiy-PR-6892.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Lo6a4evskiy
-
-delete-after: True
-
-changes:
- - rscadd: "The kitchen now contains a brand new food cart. It can store foods and liquids, mix them into cocktails and dispense where needed. Food delivery has never been easier!"
diff --git a/html/changelogs/Changelog.yml b/html/changelogs/Lo6a4evskiy-PR-7257.yml
similarity index 66%
rename from html/changelogs/Changelog.yml
rename to html/changelogs/Lo6a4evskiy-PR-7257.yml
index 6b3f5925849..507f2478826 100644
--- a/html/changelogs/Changelog.yml
+++ b/html/changelogs/Lo6a4evskiy-PR-7257.yml
@@ -22,7 +22,7 @@
#################################
# Your name.
-author: Ikarrus
+author: Lo6a4evskiy
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -33,4 +33,7 @@ delete-after: True
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- - rscadd: "Added a new config option MINIMAL_ACCESS_THRESHOLD that can be used to automatically give players more access during low-population rounds. See game_options.txt for more information."
+ - rscadd: "General record now contains a species field and a photo of the crewmember. Security record consoles allow you to update it with a photo taken in-game (with detective's camera, for example, or AI's)."
+ - rscadd: "Expanded functionality of security HUDs to display rank and photos."
+ - rscadd: "Medical HUDs allow user to change others' mental and physical status. Currently has no gameplay effect other than changing records."
+ - rscadd: "Medical HUDs can perform an examination at the distance, similrarly to how attacking yourself with help intent works. Has limited ability to detect suffocation and toxin damage."
\ No newline at end of file
diff --git a/html/changelogs/Paprka-ablightonrobotics.yml b/html/changelogs/Paprka-ablightonrobotics.yml
new file mode 100644
index 00000000000..1595635449b
--- /dev/null
+++ b/html/changelogs/Paprka-ablightonrobotics.yml
@@ -0,0 +1,4 @@
+author: Paprika
+delete-after: True
+changes:
+ - tweak: "Added rnd requirements to borg upgrades and tweaked the prices."
\ No newline at end of file
diff --git a/html/changelogs/Paprka-ointmentandshit.yml b/html/changelogs/Paprka-ointmentandshit.yml
new file mode 100644
index 00000000000..ea04e9e1fa0
--- /dev/null
+++ b/html/changelogs/Paprka-ointmentandshit.yml
@@ -0,0 +1,4 @@
+author: Paprika
+delete-after: True
+changes:
+ - rscadd: "Added blood and bleeding. If you take enough brute damage on a certain limb, you will start bleeding, and will need to patch your bleeding with gauze from medbay. You can replace lost blood by eating nutritious food and waiting for your heart to reproduce it, or by getting a blood transfusion from an IV drip."
\ No newline at end of file
diff --git a/html/changelogs/TZK13-PR-7197.yml b/html/changelogs/TZK13-PR-7197.yml
new file mode 100644
index 00000000000..665b84e1627
--- /dev/null
+++ b/html/changelogs/TZK13-PR-7197.yml
@@ -0,0 +1,9 @@
+author: TZK13
+
+delete-after: True
+
+changes:
+ - rscadd: "Advancements in the field of virology by Nanotrasen's finest have uncovered three new disease symptoms for further research:"
+ - rscadd: "Ocular Restoration heals any eye trauma experienced by the infected patient."
+ - rscadd: "Revitiligo increases the pigmentation levels of the infected patient's skin."
+ - rscadd: "Spontaneous Combustion ignites the infected patient without warning."
\ No newline at end of file
diff --git a/html/changelogs/Vekter-PR-7526.yml b/html/changelogs/Vekter-PR-7526.yml
new file mode 100644
index 00000000000..e6166381f0c
--- /dev/null
+++ b/html/changelogs/Vekter-PR-7526.yml
@@ -0,0 +1,6 @@
+author: Vekter
+
+delete-after: True
+
+changes:
+ - rscadd: "Added a toy red button to the Arcade cabinets."
diff --git a/html/changelogs/dannno-dufflebags-7245.yml b/html/changelogs/dannno-dufflebags-7245.yml
deleted file mode 100644
index fc09f91c8e9..00000000000
--- a/html/changelogs/dannno-dufflebags-7245.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: Dannno
-
-delete-after: True
-
-changes:
- - rscadd: Added fannypacks of multiple colors, 3 of which are accessible from the clothing vendor.
- - rscadd: Added dufflebags to multiple lockers throughout the station and to the syndicate shuttle, more storage slots at the cost of move speed.
\ No newline at end of file
diff --git a/html/changelogs/drovidi-PR-7440.yml b/html/changelogs/drovidi-PR-7440.yml
new file mode 100644
index 00000000000..116b7dcf634
--- /dev/null
+++ b/html/changelogs/drovidi-PR-7440.yml
@@ -0,0 +1,8 @@
+author: drovidi
+
+delete-after: True
+
+changes:
+ - tweak: "Blobs who burst in space will be given a 30 second warning before dying."
+ - tweak: "If a blob does die from bursting in space, a new crewmember will be infected."
+ - bugfix: "If there are no blobs or infected crew left after bursting, the round will now end properly, rather than becoming endless."
\ No newline at end of file
diff --git a/html/changelogs/fleure-PR-6871.yml b/html/changelogs/fleure-PR-6871.yml
deleted file mode 100644
index a2f27f334a8..00000000000
--- a/html/changelogs/fleure-PR-6871.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-# Your name.
-author: fleure
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
-# Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
-changes:
-- rscadd: "Added briefcase filled with cash to uplink."
\ No newline at end of file
diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi
index c78843e5863..a36887103d1 100644
Binary files a/icons/effects/drip.dmi and b/icons/effects/drip.dmi differ
diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi
index da1c71022d3..858fb2ba7c9 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 5db57cf7454..20b5c68d940 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi
index 82c22ba0bd5..90d2cf71b71 100644
Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ
diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi
index 4bafe703ed9..85a2fb942d9 100644
Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 3d80a2669ea..aadeecc5da8 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/bloodpack.dmi b/icons/obj/bloodpack.dmi
new file mode 100644
index 00000000000..afd95f6dba5
Binary files /dev/null and b/icons/obj/bloodpack.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index c9169705640..eac882be2d0 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index 725367cf135..eee89a7e0d6 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 8e5b28e1b1d..b4c76ec8664 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi
index 12791090e09..030c6b6fb04 100644
Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
index c149fb50bc0..50c51284344 100644
Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 166062cd3be..dbb4e8b1265 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi
new file mode 100644
index 00000000000..016513245e1
Binary files /dev/null and b/icons/obj/iv_drip.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 825dee8bb49..51b57125584 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/smoothlattice.dmi b/icons/obj/smoothlattice.dmi
index 4e67b50f5fb..f734835271a 100644
Binary files a/icons/obj/smoothlattice.dmi and b/icons/obj/smoothlattice.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index f58d43dae90..90a2579ab6a 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi
index 1ba74f830a8..e0b13f390a7 100644
Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ
diff --git a/icons/turf/shuttle.dmi b/icons/turf/shuttle.dmi
index f14fcb88c45..192e89f7afd 100644
Binary files a/icons/turf/shuttle.dmi and b/icons/turf/shuttle.dmi differ
diff --git a/sound/vox_fem/voxtest2.ogg b/sound/vox_fem/voxtest2.ogg
deleted file mode 100644
index da1f57bc93a..00000000000
Binary files a/sound/vox_fem/voxtest2.ogg and /dev/null differ
diff --git a/tgstation.dme b/tgstation.dme
index 22415f30456..428476630ae 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -189,6 +189,7 @@
#include "code\datums\diseases\advance\symptoms\deafness.dm"
#include "code\datums\diseases\advance\symptoms\dizzy.dm"
#include "code\datums\diseases\advance\symptoms\fever.dm"
+#include "code\datums\diseases\advance\symptoms\fire.dm"
#include "code\datums\diseases\advance\symptoms\flesh_eating.dm"
#include "code\datums\diseases\advance\symptoms\genetics.dm"
#include "code\datums\diseases\advance\symptoms\hallucigen.dm"
@@ -198,11 +199,11 @@
#include "code\datums\diseases\advance\symptoms\oxygen.dm"
#include "code\datums\diseases\advance\symptoms\shedding.dm"
#include "code\datums\diseases\advance\symptoms\shivering.dm"
+#include "code\datums\diseases\advance\symptoms\skin.dm"
#include "code\datums\diseases\advance\symptoms\sneeze.dm"
#include "code\datums\diseases\advance\symptoms\stimulant.dm"
#include "code\datums\diseases\advance\symptoms\symptoms.dm"
-#include "code\datums\diseases\advance\symptoms\visionloss.dm"
-#include "code\datums\diseases\advance\symptoms\vitiligo.dm"
+#include "code\datums\diseases\advance\symptoms\vision.dm"
#include "code\datums\diseases\advance\symptoms\voice_change.dm"
#include "code\datums\diseases\advance\symptoms\vomit.dm"
#include "code\datums\diseases\advance\symptoms\weight.dm"
@@ -294,6 +295,7 @@
#include "code\game\gamemodes\changeling\evolution_menu.dm"
#include "code\game\gamemodes\changeling\traitor_chan.dm"
#include "code\game\gamemodes\changeling\powers\absorb.dm"
+#include "code\game\gamemodes\changeling\powers\augmented_eyesight.dm"
#include "code\game\gamemodes\changeling\powers\digitalcamo.dm"
#include "code\game\gamemodes\changeling\powers\epinephrine.dm"
#include "code\game\gamemodes\changeling\powers\fakedeath.dm"
@@ -308,6 +310,7 @@
#include "code\game\gamemodes\changeling\powers\revive.dm"
#include "code\game\gamemodes\changeling\powers\shriek.dm"
#include "code\game\gamemodes\changeling\powers\spiders.dm"
+#include "code\game\gamemodes\changeling\powers\strained_muscles.dm"
#include "code\game\gamemodes\changeling\powers\tiny_prick.dm"
#include "code\game\gamemodes\changeling\powers\transform.dm"
#include "code\game\gamemodes\cult\cult.dm"
@@ -370,6 +373,7 @@
#include "code\game\machinery\Freezer.dm"
#include "code\game\machinery\hologram.dm"
#include "code\game\machinery\igniter.dm"
+#include "code\game\machinery\iv_drip.dm"
#include "code\game\machinery\lightswitch.dm"
#include "code\game\machinery\machinery.dm"
#include "code\game\machinery\magnet.dm"
@@ -616,6 +620,7 @@
#include "code\game\objects\items\weapons\vending_items.dm"
#include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
+#include "code\game\objects\items\weapons\grenades\clusterbuster.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm"
#include "code\game\objects\items\weapons\grenades\ghettobomb.dm"
@@ -705,6 +710,7 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm"
+#include "code\game\objects\structures\crates_lockers\closets\secure\misc.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
@@ -858,6 +864,7 @@
#include "code\modules\clothing\suits\jobs.dm"
#include "code\modules\clothing\suits\labcoat.dm"
#include "code\modules\clothing\suits\miscellaneous.dm"
+#include "code\modules\clothing\suits\toggles.dm"
#include "code\modules\clothing\suits\utility.dm"
#include "code\modules\clothing\suits\wiz_robe.dm"
#include "code\modules\clothing\under\chameleon.dm"
@@ -1073,6 +1080,7 @@
#include "code\modules\mob\living\carbon\brain\life.dm"
#include "code\modules\mob\living\carbon\brain\MMI.dm"
#include "code\modules\mob\living\carbon\brain\say.dm"
+#include "code\modules\mob\living\carbon\human\blood.dm"
#include "code\modules\mob\living\carbon\human\death.dm"
#include "code\modules\mob\living\carbon\human\emote.dm"
#include "code\modules\mob\living\carbon\human\examine.dm"
@@ -1296,6 +1304,7 @@
#include "code\modules\reagents\Chemistry-Reagents\Consumable-Reagents\Food-Reagents.dm"
#include "code\modules\reagents\Chemistry-Reagents\Consumable-Reagents\Drink-Reagents\Alcohols.dm"
#include "code\modules\reagents\Chemistry-Reagents\Consumable-Reagents\Drink-Reagents\Drinks.dm"
+#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\bottle.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"
|