")
t = replacetext(t, "\[cell\]", "")
t = replacetext(t, "\[logo\]", " ")
+ t = replacetext(t, "\[barcode\]", " ")
t = replacetext(t, "\[time\]", "[worldtime2text()]")
t = replacetext(t, "\[date\]", "[worlddate2text()]")
t = replacetext(t, "\[editorbr\]", " ")
diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm
index 5c80a00ad67..f863e586172 100644
--- a/code/_helpers/time.dm
+++ b/code/_helpers/time.dm
@@ -50,3 +50,10 @@ proc/round_duration()
last_round_duration = "[hours]:[mins]"
next_duration_update = world.time + 1 MINUTES
return last_round_duration
+
+/var/midnight_rollovers = 0
+/var/rollovercheck_last_timeofday = 0
+/proc/update_midnight_rollover()
+ if (world.timeofday < rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS!
+ return midnight_rollovers++
+ return midnight_rollovers
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 6d16d53bfdb..f6a5c6b5f73 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -331,42 +331,42 @@ Turf and target are seperate in case you want to teleport some distance from a t
//Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame()
//Last modified by Carn
/mob/proc/rename_self(var/role, var/allow_numbers=0)
- spawn(0)
- var/oldname = real_name
+ set waitfor = FALSE
+ var/oldname = real_name
- var/time_passed = world.time
- var/newname
+ var/time_passed = world.time
+ var/newname
- for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name.
- newname = input(src,"You are \a [role]. Would you like to change your name to something else?", "Name change",oldname) as text
- if((world.time-time_passed)>3000)
- return //took too long
- newname = sanitizeName(newname, ,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters.
+ for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name.
+ newname = input(src,"You are \a [role]. Would you like to change your name to something else?", "Name change",oldname) as text
+ if((world.time-time_passed)>3000)
+ return //took too long
+ newname = sanitizeName(newname, ,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters.
- for(var/mob/living/M in player_list)
- if(M == src)
- continue
- if(!newname || M.real_name == newname)
- newname = null
- break
- if(newname)
- break //That's a suitable name!
- src << "Sorry, that [role]-name wasn't appropriate, please try another. It's possibly too long/short, has bad characters or is already taken."
+ for(var/mob/living/M in player_list)
+ if(M == src)
+ continue
+ if(!newname || M.real_name == newname)
+ newname = null
+ break
+ if(newname)
+ break //That's a suitable name!
+ src << "Sorry, that [role]-name wasn't appropriate, please try another. It's possibly too long/short, has bad characters or is already taken."
- if(!newname) //we'll stick with the oldname then
- return
+ if(!newname) //we'll stick with the oldname then
+ return
- if(cmptext("ai",role))
- if(isAI(src))
- var/mob/living/silicon/ai/A = src
- oldname = null//don't bother with the records update crap
- //world << "[newname] is the AI! "
- //world << sound('sound/AI/newAI.ogg')
- // Set eyeobj name
- A.SetName(newname)
+ if(cmptext("ai",role))
+ if(isAI(src))
+ var/mob/living/silicon/ai/A = src
+ oldname = null//don't bother with the records update crap
+ //world << "[newname] is the AI! "
+ //world << sound('sound/AI/newAI.ogg')
+ // Set eyeobj name
+ A.SetName(newname)
- fully_replace_character_name(oldname,newname)
+ fully_replace_character_name(oldname,newname)
@@ -856,16 +856,24 @@ proc/GaussRandRound(var/sigma,var/roundto)
var/old_dir1 = T.dir
var/old_icon_state1 = T.icon_state
var/old_icon1 = T.icon
- var/old_overlays = T.overlays.Copy()
var/old_underlays = T.underlays.Copy()
+ // SSoverlays makes this a bit more complex.
+ var/old_our_overlays = T.our_overlays
+ T.our_overlays = null
+ var/old_priority_overlays = T.priority_overlays
+ T.priority_overlays = null
+
var/turf/X = B.ChangeTurf(T.type)
X.set_dir(old_dir1)
X.icon_state = old_icon_state1
X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
- X.overlays = old_overlays
X.underlays = old_underlays
+ X.our_overlays = old_our_overlays
+ X.priority_overlays = old_priority_overlays
+ X.compile_overlays()
+
var/turf/simulated/ST = T
if(istype(ST) && ST.zone)
var/turf/simulated/SX = X
@@ -897,21 +905,23 @@ proc/GaussRandRound(var/sigma,var/roundto)
X.icon = nextturf.icon
X.icon_state = nextturf.icon_state
+ for (var/thing in T)
+ if (isobj(thing))
+ var/obj/O = thing
- for(var/obj/O in T)
-
- // Reset the shuttle corners
- if(O.tag == "delete me")
- X.icon = 'icons/turf/shuttle.dmi'
- X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state
- X.name = "wall"
- qdel(O) // prevents multiple shuttle corners from stacking
- continue
- if(!istype(O,/obj)) continue
- O.loc = X
- for(var/mob/M in T)
- if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable
- M.loc = X
+ // Reset the shuttle corners
+ if(O.tag == "delete me")
+ X.icon = 'icons/turf/shuttle.dmi'
+ X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state
+ X.name = "wall"
+ qdel(O) // prevents multiple shuttle corners from stacking
+ continue
+
+ O.forceMove(X)
+
+ else if (ismob(thing) && !istype(thing, /mob/eye) && !istype(thing, /mob/dview))
+ var/mob/M = thing
+ M.forceMove(X)
toupdate += X
@@ -1050,24 +1060,15 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
copiedobjs += newobjs
copiedobjs += newmobs
-// var/area/AR = X.loc
-
-// if(AR.lighting_use_dynamic)
-// X.opacity = !X.opacity
-// X.sd_SetOpacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn
-
toupdate += X
refined_src -= T
refined_trg -= B
continue moving
-
-
-
if(toupdate.len)
for(var/turf/simulated/T1 in toupdate)
- air_master.mark_for_update(T1)
+ SSair.mark_for_update(T1)
return copiedobjs
@@ -1210,7 +1211,7 @@ proc/is_hot(obj/item/W as obj)
return 1000
else
return 0
- if(/obj/item/weapon/pickaxe/plasmacutter)
+ if(/obj/item/weapon/gun/energy/plasmacutter)
return 3800
if(/obj/item/weapon/melee/energy)
return 3500
@@ -1357,64 +1358,6 @@ var/list/WALLITEMS = list(
color = origin.color
set_light(origin.light_range, origin.light_power, origin.light_color)
-//This is just so you can stop an orbit.
-//orbit() can run without it (swap orbiting for A)
-//but then you can never stop it and that's just silly.
-/atom/movable/var/atom/orbiting = null
-
-//A: atom to orbit
-//radius: range to orbit at, radius of the circle formed by orbiting
-//clockwise: whether you orbit clockwise or anti clockwise
-//rotation_speed: how fast to rotate
-//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
-//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
-//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts)
-
-/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE)
- if(!istype(A))
- return
-
- if(orbiting)
- stop_orbit()
-
- orbiting = A
- var/matrix/initial_transform = matrix(transform)
- var/lastloc = loc
-
- //Head first!
- if(pre_rotation)
- var/matrix/M = matrix(transform)
- var/pre_rot = 90
- if(!clockwise)
- pre_rot = -90
- M.Turn(pre_rot)
- transform = M
-
- var/matrix/shift = matrix(transform)
- shift.Translate(0,radius)
- transform = shift
-
- SpinAnimation(rotation_speed, -1, clockwise, rotation_segments)
-
- //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
- transform = initial_transform
- while(orbiting && orbiting == A && A.loc)
- var/targetloc = get_turf(A)
- if(!lockinorbit && loc != lastloc && loc != targetloc)
- break
- loc = targetloc
- lastloc = loc
- sleep(0.6)
-
- if (orbiting == A) //make sure we haven't started orbiting something else.
- orbiting = null
- SpinAnimation(0,0)
-
-
-
-/atom/movable/proc/stop_orbit()
- orbiting = null
-
// call to generate a stack trace and print to runtime logs
/proc/crash_with(msg)
CRASH(msg)
@@ -1439,9 +1382,62 @@ var/list/WALLITEMS = list(
return 0//If we get here, we must be buried many layers deep in nested containers. Shouldn't happen
+//similar function to RANGE_TURFS(), but will search spiralling outwards from the center (like the above, but only turfs)
+/proc/spiral_range_turfs(dist=0, center=usr, orange=0)
+ if(!dist)
+ if(!orange)
+ return list(center)
+ else
+ return list()
+
+ var/turf/t_center = get_turf(center)
+ if(!t_center)
+ return list()
+
+ var/list/L = list()
+ var/turf/T
+ var/y
+ var/x
+ var/c_dist = 1
+
+ if(!orange)
+ L += t_center
+
+ while( c_dist <= dist )
+ y = t_center.y + c_dist
+ x = t_center.x - c_dist + 1
+ for(x in x to t_center.x+c_dist)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+
+ y = t_center.y + c_dist - 1
+ x = t_center.x + c_dist
+ for(y in t_center.y-c_dist to y)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+
+ y = t_center.y - c_dist
+ x = t_center.x + c_dist - 1
+ for(x in t_center.x-c_dist to x)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+
+ y = t_center.y - c_dist + 1
+ x = t_center.x - c_dist
+ for(y in y to t_center.y+c_dist)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+ c_dist++
+
+ return L
+
//Increases delay as the server gets more overloaded,
//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful
-#define DELTA_CALC max((max(world.tick_usage,world.cpu)/100),1)
+#define DELTA_CALC max(((max(world.tick_usage, world.cpu) / 100) * max(Master.sleep_delta,1)), 1)
/proc/stoplag()
. = 0
@@ -1450,6 +1446,6 @@ var/list/WALLITEMS = list(
. += round(i*DELTA_CALC)
sleep(i*world.tick_lag*DELTA_CALC)
i *= 2
- while (world.tick_usage > TICK_LIMIT)
+ while (world.tick_usage > min(TICK_LIMIT_TO_RUN, CURRENT_TICKLIMIT))
#undef DELTA_CALC
diff --git a/code/_macros.dm b/code/_macros.dm
index a534d96df48..3cc39e58cbb 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -43,6 +43,8 @@
#define isslime(A) istype(A, /mob/living/carbon/slime)
#define to_chat(target, message) target << message
+#define MAP_IMAGE_PATH "nano/images/"
+#define map_image_file_name(z_level) "Aurora-[z_level].png"
#define to_world(message) world << message
#define sound_to(target, sound) target << sound
#define to_file(file_entry, file_content) file_entry << file_content
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index 47e7e99a927..053d3d50381 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -102,14 +102,14 @@ Quick adjacency (to turf):
This can be safely removed if border firedoors are ever moved to be on top of doors
so they can be interacted with without opening the door.
*/
-/obj/machinery/door/Adjacent(var/atom/neighbor)
+/*/obj/machinery/door/Adjacent(var/atom/neighbor)
var/obj/machinery/door/firedoor/border_only/BOD = locate() in loc
if(BOD)
BOD.throwpass = 1 // allow click to pass
. = ..()
BOD.throwpass = 0
return .
- return ..()
+ return ..()*/
/*
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 88bfc332a38..b9c6692b714 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -176,8 +176,7 @@
return
/mob/living/UnarmedAttack(var/atom/A, var/proximity_flag)
-
- if(!ticker)
+ if(!Master.round_started)
src << "You cannot attack people before the game has started."
return 0
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index a00112428ef..fe35d1024c2 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -30,6 +30,7 @@
/datum/action/Destroy()
if(owner)
Remove(owner)
+ return ..()
/datum/action/proc/Grant(mob/living/T)
if(owner)
@@ -220,4 +221,4 @@
#undef AB_WEST_OFFSET
#undef AB_NORTH_OFFSET
-#undef AB_MAX_COLUMNS
\ No newline at end of file
+#undef AB_MAX_COLUMNS
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index af6b86e3a66..aad84c1b275 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -2,16 +2,8 @@
The global hud:
Uses the same visual objects for all players.
*/
-var/datum/global_hud/global_hud = new()
-var/list/global_huds = list(
- global_hud.druggy,
- global_hud.blurry,
- global_hud.vimpaired,
- global_hud.darkMask,
- global_hud.nvg,
- global_hud.thermal,
- global_hud.meson,
- global_hud.science)
+var/datum/global_hud/global_hud // Initialized in SSatoms.
+var/list/global_huds
/datum/hud/var/obj/screen/grab_intent
/datum/hud/var/obj/screen/hurt_intent
@@ -142,7 +134,7 @@ datum/hud/New(mob/owner)
..()
/datum/hud/Destroy()
- ..()
+ . = ..()
grab_intent = null
hurt_intent = null
disarm_intent = null
diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm
index b45dce4e0f0..cb21437bd87 100644
--- a/code/_onclick/hud/parallax.dm
+++ b/code/_onclick/hud/parallax.dm
@@ -1,9 +1,3 @@
-// Until we convert to planes.
-#define PLANE_SPACE_BACKGROUND -98
-#define PLANE_SPACE_PARALLAX (PLANE_SPACE_BACKGROUND + 1) // -97
-#define PLANE_SPACE_DUST (PLANE_SPACE_PARALLAX + 1) // -96
-#define PLANE_ABOVE_PARALLAX (PLANE_SPACE_BACKGROUND + 3) // -95
-
/*
* This file handles all parallax-related business once the parallax itself is initialized with the rest of the HUD
*/
@@ -11,11 +5,6 @@
#define PARALLAX_IMAGE_TILES (PARALLAX_IMAGE_WIDTH**2)
#define GRID_WIDTH 3
-var/list/parallax_on_clients = list()
-var/parallax_initialized = 0
-var/space_color = "#050505"
-var/list/parallax_icon[(GRID_WIDTH**2)*3]
-
/obj/screen/parallax
var/base_offset_x = 0
var/base_offset_y = 0
@@ -32,24 +21,26 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
/obj/screen/plane_master
appearance_flags = PLANE_MASTER
screen_loc = "CENTER,CENTER"
-
+
/obj/screen/plane_master/parallax_master
plane = PLANE_SPACE_PARALLAX
blend_mode = BLEND_MULTIPLY
color = list(
- 1,0,0,0,
- 0,1,0,0,
- 0,0,1,0,
- 0,0,0,0,
- 0,0,0,1)
+ 1,0,0,0,
+ 0,1,0,0,
+ 0,0,1,0,
+ 0,0,0,0,
+ 0,0,0,1
+ )
/obj/screen/plane_master/parallax_spacemaster //Turns space white, causing the parallax to only show in areas with opacity. Somehow
plane = PLANE_SPACE_BACKGROUND
color = list(
- 0,0,0,0,
- 0,0,0,0,
- 0,0,0,0,
- 1,1,1,1)
+ 0,0,0,0,
+ 0,0,0,0,
+ 0,0,0,0,
+ 1,1,1,1
+ )
/obj/screen/plane_master/parallax_spacemaster/New()
..()
@@ -62,7 +53,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
color = list(0,0,0,0)
/datum/hud/proc/update_parallax_existence()
- if(!parallax_initialized)
+ if(!SSparallax.parallax_initialized)
return
initialize_parallax()
update_parallax()
@@ -79,7 +70,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
C.parallax_dustmaster = new /obj/screen/plane_master/parallax_dustmaster
if(!C.parallax.len)
- for(var/obj/screen/parallax/bgobj in parallax_icon)
+ for(var/obj/screen/parallax/bgobj in SSparallax.parallax_icon)
var/obj/screen/parallax/parallax_layer = new /obj/screen/parallax
parallax_layer.appearance = bgobj.appearance
parallax_layer.base_offset_x = bgobj.base_offset_x
@@ -99,7 +90,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
/datum/hud/proc/update_parallax()
var/client/C = mymob.client
if(C.prefs.parallax_togs & PARALLAX_SPACE)
- parallax_on_clients |= C
+ SSparallax.parallax_on_clients |= C
for(var/obj/screen/parallax/bgobj in C.parallax)
C.screen |= bgobj
C.screen |= C.parallax_master
@@ -115,17 +106,17 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
else
for(var/obj/screen/parallax/bgobj in C.parallax)
C.screen -= bgobj
- parallax_on_clients -= C
+ SSparallax.parallax_on_clients -= C
C.screen -= C.parallax_master
C.screen -= C.parallax_spacemaster
C.parallax_dustmaster.color = list(0,0,0,0)
/datum/hud/proc/update_parallax_values()
var/client/C = mymob.client
- if(!parallax_initialized)
+ if(!SSparallax.parallax_initialized)
return
- if(!(locate(/turf/space) in trange(C.view,get_turf(C.eye))))
+ if(!(locate(/turf/space) in trange(C.view,get_turf(C.eye))) && !(locate(/turf/simulated/open) in trange(C.view,get_turf(C.eye))))
return
//ACTUALLY MOVING THE PARALLAX
@@ -193,7 +184,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
parallax_layer.overlays = L
parallax_layer.parallax_speed = 0
parallax_layer.calibrate_parallax(i+1)
- parallax_icon[index] = parallax_layer
+ SSparallax.parallax_icon[index] = parallax_layer
index++
for(var/i in 0 to ((GRID_WIDTH**2)-1))
@@ -210,7 +201,7 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
parallax_layer.overlays = L
parallax_layer.parallax_speed = 0.5
parallax_layer.calibrate_parallax(i+1)
- parallax_icon[index] = parallax_layer
+ SSparallax.parallax_icon[index] = parallax_layer
index++
for(var/i in 0 to ((GRID_WIDTH**2)-1))
@@ -226,10 +217,10 @@ var/list/parallax_icon[(GRID_WIDTH**2)*3]
parallax_layer.overlays = L
parallax_layer.parallax_speed = 1
parallax_layer.calibrate_parallax(i+1)
- parallax_icon[index] = parallax_layer
+ SSparallax.parallax_icon[index] = parallax_layer
index++
- parallax_initialized = 1
+ SSparallax.parallax_initialized = 1
/obj/screen/parallax/proc/calibrate_parallax(var/i)
if(!i)
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 5fe3f7f7bd6..54b828692b8 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -13,7 +13,7 @@
unacidable = 1
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
-/obj/screen/Destroy()
+/obj/screen/Destroy(force = FALSE)
master = null
screen_loc = null
return ..()
@@ -46,7 +46,7 @@
var/obj/item/owner
/obj/screen/item_action/Destroy()
- ..()
+ . = ..()
owner = null
/obj/screen/item_action/Click()
diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm
index 2294ff03a32..f64e0be67f3 100644
--- a/code/_onclick/hud/spell_screen_objects.dm
+++ b/code/_onclick/hud/spell_screen_objects.dm
@@ -13,7 +13,7 @@
var/mob/spell_holder
/obj/screen/movable/spell_master/Destroy()
- ..()
+ . = ..()
for(var/obj/screen/spell/spells in spell_objects)
spells.spellmaster = null
spell_objects.Cut()
@@ -93,7 +93,7 @@
if(spell.spell_flags & NO_BUTTON) //no button to add if we don't get one
return
- var/obj/screen/spell/newscreen = getFromPool(/obj/screen/spell)
+ var/obj/screen/spell/newscreen = new /obj/screen/spell
newscreen.spellmaster = src
newscreen.spell = spell
@@ -161,7 +161,7 @@
var/icon/last_charged_icon
/obj/screen/spell/Destroy()
- ..()
+ . = ..()
spell = null
last_charged_icon = null
if(spellmaster)
diff --git a/code/controllers/ProcessScheduler/.gitignore b/code/controllers/ProcessScheduler/.gitignore
deleted file mode 100644
index 5fe19e425bf..00000000000
--- a/code/controllers/ProcessScheduler/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/bower_components
-/node_modules
-/ProcessScheduler.dmb
-/ProcessScheduler.int
-/ProcessScheduler.rsc
-/*.lk
diff --git a/code/controllers/ProcessScheduler/LICENSE-AGPL b/code/controllers/ProcessScheduler/LICENSE-AGPL
deleted file mode 100644
index abaa41e8296..00000000000
--- a/code/controllers/ProcessScheduler/LICENSE-AGPL
+++ /dev/null
@@ -1,212 +0,0 @@
-GNU AFFERO GENERAL PUBLIC LICENSE
-
-Version 3, 19 November 2007
-
-Copyright © 2007 Free Software Foundation, Inc.
-Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
-
-Preamble
-
-The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software.
-
-The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.
-
-When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
-
-Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software.
-
-A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public.
-
-The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version.
-
-An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license.
-
-The precise terms and conditions for copying, distribution and modification follow.
-
-TERMS AND CONDITIONS
-
-0. Definitions.
-"This License" refers to version 3 of the GNU Affero General Public License.
-
-"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
-
-"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
-
-To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
-
-A "covered work" means either the unmodified Program or a work based on the Program.
-
-To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
-
-To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
-
-An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
-
-1. Source Code.
-The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.
-
-A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
-
-The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
-
-The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
-
-The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
-
-The Corresponding Source for a work in source code form is that same work.
-
-2. Basic Permissions.
-All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
-
-You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
-
-Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
-
-3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
-
-When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
-
-4. Conveying Verbatim Copies.
-You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
-
-You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
-
-5. Conveying Modified Source Versions.
-You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
-
-a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
-b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
-c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
-d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
-A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
-
-6. Conveying Non-Source Forms.
-You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
-
-a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
-b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
-c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
-d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
-e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
-A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
-
-A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
-
-"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
-
-If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
-
-The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
-
-Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
-
-7. Additional Terms.
-"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
-
-When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
-
-Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
-
-a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
-b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
-c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
-d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
-e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
-f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
-All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
-
-If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
-
-Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
-
-8. Termination.
-You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
-
-However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
-
-Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
-
-Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
-
-9. Acceptance Not Required for Having Copies.
-You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
-
-10. Automatic Licensing of Downstream Recipients.
-Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
-
-An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
-
-You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
-
-11. Patents.
-A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
-
-A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
-
-Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
-
-In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
-
-If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
-
-If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
-
-A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
-
-Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
-
-12. No Surrender of Others' Freedom.
-If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
-
-13. Remote Network Interaction; Use with the GNU General Public License.
-Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph.
-
-Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License.
-
-14. Revised Versions of this License.
-The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation.
-
-If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
-
-Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
-
-15. Disclaimer of Warranty.
-THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-16. Limitation of Liability.
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-17. Interpretation of Sections 15 and 16.
-If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-Also add information on how to contact you by electronic and paper mail.
-
-If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements.
-
-You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see .
\ No newline at end of file
diff --git a/code/controllers/ProcessScheduler/LICENSE-CC-BY-NC b/code/controllers/ProcessScheduler/LICENSE-CC-BY-NC
deleted file mode 100644
index d0955f424af..00000000000
--- a/code/controllers/ProcessScheduler/LICENSE-CC-BY-NC
+++ /dev/null
@@ -1 +0,0 @@
-This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
\ No newline at end of file
diff --git a/code/controllers/ProcessScheduler/README.md b/code/controllers/ProcessScheduler/README.md
deleted file mode 100644
index 610800ba374..00000000000
--- a/code/controllers/ProcessScheduler/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-ProcessScheduler
-================
-A Goonstation release, maintained by Volundr
-
-##SUMMARY
-
-This is a mostly self-contained, fairly well-documented implementation of the main loop process architecture in use in Goonstation.
-
-##LICENSE
-
-This work is released under the following licenses.
-
-[](http://creativecommons.org/licenses/by-nc/4.0/)
-
-This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. The complete text of this license is included in the file LICENSE-CC-BY-NC.
-
-
-[](http://www.gnu.org/licenses/agpl-3.0.html)
-
-This work is licensed under the Affero General Public License 3.0. The complete text of the license is included in the file LICENSE-AGPL.
-
-##INSTALLATION
-
-To integrate the process scheduler to your codebase, you will not need anything except the contents of the core/ folder. The rest of the project is simply for testing and to provide an example for the process scheduler code.
-
-### Test project setup
-To compile and run the test project, you will require:
-
-- node.js
-- BYOND
-
-Clone the repository to a path of your choosing, then change directory to it and execute:
-
-```
-npm install -g
-bower install -g
-```
-
-Then you can either compile with DM or open the DM environment in DreamMaker and compile/run from there.
-
-##USAGE
-
-###BASICS
-To use the process scheduler in your SS13 codebase, you'll need:
-
-- core/_defines.dm
-- core/_stubs.dm
-- core/process.dm
-- core/processScheduler.dm
-- core/processScheduler.js
-- core/updateQueue.dm
-- core/updateQueueWorker.dm
-
-To integrate, you can copy the contents of _defines.dm into your global defines file. Most ss13 codebases already have the code from _stubs.dm.
-
-The processScheduler is intended as a replacement for the old master_controller from r4407 and other fork codebases. To implement it, you need only to add the source files to your DM environment, and add the following code into world.New, above where the old master_controller is initialized.
-
-```
-processScheduler = new
-processScheduler.setup()
-processScheduler.start()
-```
-
-The processScheduler will automatically find all subtypes of process, and begin processing them.
-
-The interface code in test/processSchedulerView.dm is simply an example frontend, and can easily be rebuilt to use other styles, and/or render simple html without using javascript for refreshing the panel and killing processes.
-
-###DETAILS
-
-To implement a process, you have two options:
-
-1. Implement a raw loop-style processor
-2. Implement an updateQueue processor
-
-There are clear examples of both of these paradigms in the code provided. Both styles are valid, but for processes that are just a loop calling an update proc on a bunch of objects, you should use the updateQueue.
-
-The updateQueue works by spawn(0)'ing your specified update proc, but it only puts one instance in the scheduler at a time. Examine the code for more details. The overall effect of this is that it doesn't block, and it lets update loops work concurrently. It enables a much smoother user experience.
-
-##Contributing
-
-I welcome pull requests and issue reports, and will try to merge/fix them as I have time.
-
-### Licensing for code submitted via PR:
-
-By submitting a pull request, you agree to release all original code submitted in the pull request under the [MIT License](http://opensource.org/licenses/MIT). You also agree that any code submitted is either your own work, or is public domain or under a equally or less restrictive license than the MIT license, or that you have the express written permission of the authors of the submitted code to submit the pull request.
-
diff --git a/code/controllers/ProcessScheduler/bower.json b/code/controllers/ProcessScheduler/bower.json
deleted file mode 100644
index 9a6be56140d..00000000000
--- a/code/controllers/ProcessScheduler/bower.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "ProcessScheduler",
- "main": "ProcessScheduler.js",
- "version": "1.0.0",
- "homepage": "https://github.com/goonstation/ProcessScheduler",
- "authors": [
- "Volundr "
- ],
- "description": "BYOND SS13 Process Scheduler",
- "keywords": [
- "byond",
- "ss13",
- "process",
- "scheduler"
- ],
- "license": "CC-BY-NC",
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "test",
- "tests"
- ],
- "private": true,
- "dependencies": {
- "bootstrap2.3.2": "~2.3.2",
- "jquery": "1.11.1",
- "json2": "*"
- }
-}
diff --git a/code/controllers/ProcessScheduler/core/_stubs.dm b/code/controllers/ProcessScheduler/core/_stubs.dm
deleted file mode 100644
index 3615c12f192..00000000000
--- a/code/controllers/ProcessScheduler/core/_stubs.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * _stubs.dm
- *
- * This file contains constructs that the process scheduler expects to exist
- * in a standard ss13 fork.
- */
-
-/**
- * logTheThing
- *
- * In goonstation, this proc writes a message to either the world log or diary.
- *
- * Blame Keelin.
- */
-/proc/logTheThing(type, source, target, text, diaryType)
- if(diaryType)
- world << "Diary: \[[diaryType]:[type]] [text]"
- else
- world << "Log: \[[type]] [text]"
diff --git a/code/controllers/ProcessScheduler/core/process.dm b/code/controllers/ProcessScheduler/core/process.dm
deleted file mode 100644
index 52c7b8f08e8..00000000000
--- a/code/controllers/ProcessScheduler/core/process.dm
+++ /dev/null
@@ -1,377 +0,0 @@
-// Process
-
-/datum/controller/process
- /**
- * State vars
- */
- // Main controller ref
- var/tmp/datum/controller/processScheduler/main
-
- // 1 if process is not running or queued
- var/tmp/idle = 1
-
- // 1 if process is queued
- var/tmp/queued = 0
-
- // 1 if process is running
- var/tmp/running = 0
-
- // 1 if process is blocked up
- var/tmp/hung = 0
-
- // 1 if process was killed
- var/tmp/killed = 0
-
- // Status text var
- var/tmp/status
-
- // Previous status text var
- var/tmp/previousStatus
-
- // 1 if process is disabled
- var/tmp/disabled = 0
-
- /**
- * Config vars
- */
- // Process name
- var/name
-
- // Process schedule interval
- // This controls how often the process would run under ideal conditions.
- // If the process scheduler sees that the process has finished, it will wait until
- // this amount of time has elapsed from the start of the previous run to start the
- // process running again.
- var/tmp/schedule_interval = PROCESS_DEFAULT_SCHEDULE_INTERVAL // run every 50 ticks
-
- // Process tick allowance
- // This controls what percentage a single tick (0 to 100) the process should be.
- // allowed to run before sleeping.
- var/tmp/tick_allowance = PROCESS_DEFAULT_TICK_ALLOWANCE
-
- // hang_warning_time - this is the time (in 1/10 seconds) after which the server will begin to show "maybe hung" in the context window
- var/tmp/hang_warning_time = PROCESS_DEFAULT_HANG_WARNING_TIME
-
- // hang_alert_time - After this much time(in 1/10 seconds), the server will send an admin debug message saying the process may be hung
- var/tmp/hang_alert_time = PROCESS_DEFAULT_HANG_ALERT_TIME
-
- // hang_restart_time - After this much time(in 1/10 seconds), the server will automatically kill and restart the process.
- var/tmp/hang_restart_time = PROCESS_DEFAULT_HANG_RESTART_TIME
-
- // How many times in the current run has the process deferred work till the next tick?
- var/tmp/cpu_defer_count = 0
-
- // How many SCHECKs have been skipped (to limit btime calls)
- var/tmp/calls_since_last_scheck = 0
-
- /**
- * recordkeeping vars
- */
-
- // Records the time (1/10s timeofday) at which the process last finished sleeping
- var/tmp/last_slept = 0
-
- // Records the time (1/10s timeofday) at which the process last began running
- var/tmp/run_start = 0
-
- // Records the world.tick_usage (0 to 100) at which the process last began running
- var/tmp/tick_start = 0
-
- // Records the number of times this process has been killed and restarted
- var/tmp/times_killed
-
- // Tick count
- var/tmp/ticks = 0
-
- var/tmp/last_task = ""
-
- var/tmp/last_object
-
- // Counts the number of times an exception has occurred; gets reset after 10
- var/tmp/list/exceptions = list()
-
- // Number of deciseconds to delay before starting the process
- var/start_delay = 0
-
-/datum/controller/process/New(var/datum/controller/processScheduler/scheduler)
- ..()
- main = scheduler
- previousStatus = "idle"
- idle()
- name = "process"
- schedule_interval = 50
- last_slept = 0
- run_start = 0
- tick_start = 0
- ticks = 0
- last_task = 0
- last_object = null
-
-/datum/controller/process/proc/preStart()
-
-/datum/controller/process/proc/started()
- var/timeofhour = TimeOfHour
- // Initialize last_slept so we can record timing information
- last_slept = timeofhour
-
- // Initialize run_start so we can detect hung processes.
- run_start = timeofhour
-
- // Initialize tick_start so we can know when to sleep
- tick_start = world.tick_usage
-
- // Initialize defer count
- cpu_defer_count = 0
-
- running()
- main.processStarted(src)
-
- onStart()
-
-/datum/controller/process/proc/finished()
- ticks++
- idle()
- main.processFinished(src)
-
- onFinish()
-
-/datum/controller/process/proc/doWork()
-
-/datum/controller/process/proc/setup()
-
-/datum/controller/process/proc/process()
- started()
- doWork()
- finished()
-
-/datum/controller/process/proc/running()
- idle = 0
- queued = 0
- running = 1
- hung = 0
- setStatus(PROCESS_STATUS_RUNNING)
-
-/datum/controller/process/proc/idle()
- queued = 0
- running = 0
- idle = 1
- hung = 0
- setStatus(PROCESS_STATUS_IDLE)
-
-/datum/controller/process/proc/queued()
- idle = 0
- running = 0
- queued = 1
- hung = 0
- setStatus(PROCESS_STATUS_QUEUED)
-
-/datum/controller/process/proc/hung()
- hung = 1
- setStatus(PROCESS_STATUS_HUNG)
-
-/datum/controller/process/proc/handleHung()
- var/timeofhour = TimeOfHour
- var/datum/lastObj = last_object
- var/lastObjType = "null"
- if(istype(lastObj))
- lastObjType = lastObj.type
-
- // If timeofhour has rolled over, then we need to adjust.
- if (timeofhour < run_start)
- run_start -= 36000
- var/msg = "[name] process hung at tick #[ticks]. Process was unresponsive for [(timeofhour - run_start) / 10] seconds and was restarted. Last task: [last_task]. Last Object Type: [lastObjType]"
- logTheThing("debug", null, null, msg)
- logTheThing("diary", null, null, msg, "debug")
- message_admins(msg)
-
- main.restartProcess(src.name)
-
-/datum/controller/process/proc/kill()
- if (!killed)
- var/msg = "[name] process was killed at tick #[ticks]."
- logTheThing("debug", null, null, msg)
- logTheThing("diary", null, null, msg, "debug")
- //finished()
-
- // Allow inheritors to clean up if needed
- onKill()
-
- // This should del
- del(src)
-
-// Do not call this directly - use SHECK or SCHECK_EVERY
-/datum/controller/process/proc/sleepCheck(var/tickId = 0)
- calls_since_last_scheck = 0
- if (killed)
- // The kill proc is the only place where killed is set.
- // The kill proc should have deleted this datum, and all sleeping procs that are
- // owned by it.
- CRASH("A killed process is still running somehow...")
- if (hung)
- // This will only really help if the doWork proc ends up in an infinite loop.
- handleHung()
- CRASH("Process [name] hung and was restarted.")
-
- if (world.tick_usage > 100 || (world.tick_usage - tick_start) > tick_allowance)
- sleep(world.tick_lag)
- cpu_defer_count++
- last_slept = TimeOfHour
- tick_start = world.tick_usage
-
- return 1
-
- return 0
-
-/datum/controller/process/proc/update()
- // Clear delta
- if(previousStatus != status)
- setStatus(status)
-
- var/elapsedTime = getElapsedTime()
-
- if (hung)
- handleHung()
- return
- else if (elapsedTime > hang_restart_time)
- hung()
- else if (elapsedTime > hang_alert_time)
- setStatus(PROCESS_STATUS_PROBABLY_HUNG)
- else if (elapsedTime > hang_warning_time)
- setStatus(PROCESS_STATUS_MAYBE_HUNG)
-
-
-/datum/controller/process/proc/getElapsedTime()
- var/timeofhour = TimeOfHour
- if (timeofhour < run_start)
- return timeofhour - (run_start - 36000)
- return timeofhour - run_start
-
-/datum/controller/process/proc/tickDetail()
- return
-
-/datum/controller/process/proc/getContext()
- return "[name] [main.averageRunTime(src)] [main.last_run_time[src]] [main.highest_run_time[src]] [ticks] \n"
-
-/datum/controller/process/proc/getContextData()
- return list(
- "name" = name,
- "averageRunTime" = main.averageRunTime(src),
- "lastRunTime" = main.last_run_time[src],
- "highestRunTime" = main.highest_run_time[src],
- "ticks" = ticks,
- "schedule" = schedule_interval,
- "status" = getStatusText(),
- "disabled" = disabled
- )
-
-/datum/controller/process/proc/getStatus()
- return status
-
-/datum/controller/process/proc/getStatusText(var/s = 0)
- if(!s)
- s = status
- switch(s)
- if(PROCESS_STATUS_IDLE)
- return "idle (-1)"
- if(PROCESS_STATUS_QUEUED)
- return "queued (0)"
- if(PROCESS_STATUS_RUNNING)
- return "running (1)"
- if(PROCESS_STATUS_MAYBE_HUNG)
- return "maybe hung (2)"
- if(PROCESS_STATUS_PROBABLY_HUNG)
- return "probably hung (3)"
- if(PROCESS_STATUS_HUNG)
- return "HUNG (4)"
- else
- return "UNKNOWN (?)"
-
-/datum/controller/process/proc/getPreviousStatus()
- return previousStatus
-
-/datum/controller/process/proc/getPreviousStatusText()
- return getStatusText(previousStatus)
-
-/datum/controller/process/proc/setStatus(var/newStatus)
- previousStatus = status
- status = newStatus
-
-/datum/controller/process/proc/setLastTask(var/task, var/object)
- last_task = task
- last_object = object
-
-/datum/controller/process/proc/_copyStateFrom(var/datum/controller/process/target)
- main = target.main
- name = target.name
- schedule_interval = target.schedule_interval
- last_slept = 0
- run_start = 0
- tick_start = 0
- times_killed = target.times_killed
- ticks = target.ticks
- last_task = target.last_task
- last_object = target.last_object
- copyStateFrom(target)
-
-/datum/controller/process/proc/copyStateFrom(var/datum/controller/process/target)
-
-/datum/controller/process/proc/onKill()
-
-/datum/controller/process/proc/onStart()
-
-/datum/controller/process/proc/onFinish()
-
-/datum/controller/process/proc/disable()
- disabled = 1
-
-/datum/controller/process/proc/enable()
- disabled = 0
-
-/datum/controller/process/proc/getAverageRunTime()
- return main.averageRunTime(src)
-/datum/controller/process/proc/getLastRunTime()
- return main.getProcessLastRunTime(src)
-
-/datum/controller/process/proc/getHighestRunTime()
- return main.getProcessHighestRunTime(src)
-
-/datum/controller/process/proc/getTicks()
- return ticks
-
-/datum/controller/process/proc/statProcess()
- var/averageRunTime = round(getAverageRunTime(), 0.1)/10
- var/lastRunTime = round(getLastRunTime(), 0.1)/10
- var/highestRunTime = round(getHighestRunTime(), 0.1)/10
- stat("[name]", "T#[getTicks()] | AR [averageRunTime] | LR [lastRunTime] | HR [highestRunTime] | D [cpu_defer_count]")
-
-/datum/controller/process/proc/catchException(var/exception/e, var/thrower)
- var/etext = "[e]"
- var/eid = "[e]" // Exception ID, for tracking repeated exceptions
- var/ptext = "" // "processing..." text, for what was being processed (if known)
- if(istype(e))
- etext += " in [e.file], line [e.line]"
- eid = "[e.file]:[e.line]"
- if(eid in exceptions)
- if(exceptions[eid]++ >= 10)
- return
- else
- exceptions[eid] = 1
- if(istype(thrower, /datum))
- var/datum/D = thrower
- ptext = " processing [D.type]"
- if(istype(thrower, /atom))
- var/atom/A = thrower
- ptext += " ([A]) ([A.x],[A.y],[A.z])"
- log_to_dd("\[[time_stamp()]\] Process [name] caught exception[ptext]: [etext]")
- if(exceptions[eid] >= 10)
- log_to_dd("This exception will now be ignored for ten minutes.")
- spawn(6000)
- exceptions[eid] = 0
-
- e.time_stamp()
- log_exception(e)
-
-/datum/controller/process/proc/catchBadType(var/datum/caught)
- if(isnull(caught) || !istype(caught) || !isnull(caught.gcDestroyed))
- return // Only bother with types we can identify and that don't belong
- catchException("Type [caught.type] does not belong in process' queue")
diff --git a/code/controllers/ProcessScheduler/core/processScheduler.dm b/code/controllers/ProcessScheduler/core/processScheduler.dm
deleted file mode 100644
index ad58468a0d9..00000000000
--- a/code/controllers/ProcessScheduler/core/processScheduler.dm
+++ /dev/null
@@ -1,351 +0,0 @@
-// Singleton instance of game_controller_new, setup in world.New()
-var/global/datum/controller/processScheduler/processScheduler
-
-/datum/controller/processScheduler
- // Processes known by the scheduler
- var/tmp/datum/controller/process/list/processes = new
-
- // Processes that are currently running
- var/tmp/datum/controller/process/list/running = new
-
- // Processes that are idle
- var/tmp/datum/controller/process/list/idle = new
-
- // Processes that are queued to run
- var/tmp/datum/controller/process/list/queued = new
-
- // Process name -> process object map
- var/tmp/datum/controller/process/list/nameToProcessMap = new
-
- // Process last queued times (world time)
- var/tmp/datum/controller/process/list/last_queued = new
-
- // Process last start times (real time)
- var/tmp/datum/controller/process/list/last_start = new
-
- // Process last run durations
- var/tmp/datum/controller/process/list/last_run_time = new
-
- // Per process list of the last 20 durations
- var/tmp/datum/controller/process/list/last_twenty_run_times = new
-
- // Process highest run time
- var/tmp/datum/controller/process/list/highest_run_time = new
-
- // How long to sleep between runs (set to tick_lag in New)
- var/tmp/scheduler_sleep_interval
-
- // Controls whether the scheduler is running or not
- var/tmp/isRunning = 0
-
- // Setup for these processes will be deferred until all the other processes are set up.
- var/tmp/list/deferredSetupList = new
-
- var/tmp/currentTick = 0
-
- var/tmp/currentTickStart = 0
-
- var/tmp/cpuAverage = 0
-
-/datum/controller/processScheduler/New()
- ..()
- // When the process scheduler is first new'd, tick_lag may be wrong, so these
- // get re-initialized when the process scheduler is started.
- // (These are kept here for any processes that decide to process before round start)
- scheduler_sleep_interval = world.tick_lag
-
-/**
- * deferSetupFor
- * @param path processPath
- * If a process needs to be initialized after everything else, add it to
- * the deferred setup list. On goonstation, only the ticker needs to have
- * this treatment.
- */
-/datum/controller/processScheduler/proc/deferSetupFor(var/processPath)
- if (!(processPath in deferredSetupList))
- deferredSetupList += processPath
-
-/datum/controller/processScheduler/proc/setup()
- // There can be only one
- if(processScheduler && (processScheduler != src))
- del(src)
- return 0
-
- var/process
- // Add all the processes we can find, except for the ticker
- for (process in subtypesof(/datum/controller/process))
- if (!(process in deferredSetupList))
- addProcess(new process(src))
-
- for (process in deferredSetupList)
- addProcess(new process(src))
-
-/datum/controller/processScheduler/proc/start()
- isRunning = 1
- // tick_lag will have been set by now, so re-initialize these
- scheduler_sleep_interval = world.tick_lag
- callPreStart()
- updateStartDelays()
- spawn(0)
- process()
-
-/datum/controller/processScheduler/proc/callPreStart()
- for (var/datum/controller/process/P in processes)
- if (!P.disabled)
- P.preStart()
-
-/datum/controller/processScheduler/proc/process()
- while(isRunning)
- checkRunningProcesses()
- queueProcesses()
- runQueuedProcesses()
- sleep(scheduler_sleep_interval)
-
-/datum/controller/processScheduler/proc/stop()
- isRunning = 0
-
-/datum/controller/processScheduler/proc/checkRunningProcesses()
- for(var/datum/controller/process/p in running)
- p.update()
-
- if (isnull(p)) // Process was killed
- continue
-
- var/status = p.getStatus()
- var/previousStatus = p.getPreviousStatus()
-
- // Check status changes
- if(status != previousStatus)
- //Status changed.
- switch(status)
- if(PROCESS_STATUS_PROBABLY_HUNG)
- message_admins("Process '[p.name]' may be hung.")
- if(PROCESS_STATUS_HUNG)
- message_admins("Process '[p.name]' is hung and will be restarted.")
-
-/datum/controller/processScheduler/proc/queueProcesses()
- for(var/datum/controller/process/p in processes)
- // Don't double-queue, don't queue running processes
- if (p.disabled || p.running || p.queued || !p.idle)
- continue
-
- // If the process should be running by now, go ahead and queue it
- if (world.time >= last_queued[p] + p.schedule_interval)
- setQueuedProcessState(p)
-
-/datum/controller/processScheduler/proc/runQueuedProcesses()
- for(var/datum/controller/process/p in queued)
- runProcess(p)
-
-/datum/controller/processScheduler/proc/addProcess(var/datum/controller/process/process)
- processes.Add(process)
- process.idle()
- idle.Add(process)
-
- // init recordkeeping vars
- last_start.Add(process)
- last_start[process] = 0
- last_run_time.Add(process)
- last_run_time[process] = 0
- last_twenty_run_times.Add(process)
- last_twenty_run_times[process] = list()
- highest_run_time.Add(process)
- highest_run_time[process] = 0
-
- // init starts and stops record starts
- recordStart(process, 0)
- recordEnd(process, 0)
-
- // Set up process
- process.setup()
-
- // Save process in the name -> process map
- nameToProcessMap[process.name] = process
-
-/datum/controller/processScheduler/proc/replaceProcess(var/datum/controller/process/oldProcess, var/datum/controller/process/newProcess)
- processes.Remove(oldProcess)
- processes.Add(newProcess)
-
- newProcess.idle()
- idle.Remove(oldProcess)
- running.Remove(oldProcess)
- queued.Remove(oldProcess)
- idle.Add(newProcess)
-
- last_start.Remove(oldProcess)
- last_start.Add(newProcess)
- last_start[newProcess] = 0
-
- last_run_time.Add(newProcess)
- last_run_time[newProcess] = last_run_time[oldProcess]
- last_run_time.Remove(oldProcess)
-
- last_twenty_run_times.Add(newProcess)
- last_twenty_run_times[newProcess] = last_twenty_run_times[oldProcess]
- last_twenty_run_times.Remove(oldProcess)
-
- highest_run_time.Add(newProcess)
- highest_run_time[newProcess] = highest_run_time[oldProcess]
- highest_run_time.Remove(oldProcess)
-
- recordStart(newProcess, 0)
- recordEnd(newProcess, 0)
-
- nameToProcessMap[newProcess.name] = newProcess
-
-/datum/controller/processScheduler/proc/updateStartDelays()
- for(var/datum/controller/process/p in processes)
- if(p.start_delay)
- last_queued[p] = world.time - p.start_delay
-
-/datum/controller/processScheduler/proc/runProcess(var/datum/controller/process/process)
- spawn(0)
- process.process()
-
-/datum/controller/processScheduler/proc/processStarted(var/datum/controller/process/process)
- setRunningProcessState(process)
- recordStart(process)
-
-/datum/controller/processScheduler/proc/processFinished(var/datum/controller/process/process)
- setIdleProcessState(process)
- recordEnd(process)
-
-/datum/controller/processScheduler/proc/setIdleProcessState(var/datum/controller/process/process)
- if (process in running)
- running -= process
- if (process in queued)
- queued -= process
- if (!(process in idle))
- idle += process
-
-/datum/controller/processScheduler/proc/setQueuedProcessState(var/datum/controller/process/process)
- if (process in running)
- running -= process
- if (process in idle)
- idle -= process
- if (!(process in queued))
- queued += process
-
- // The other state transitions are handled internally by the process.
- process.queued()
-
-/datum/controller/processScheduler/proc/setRunningProcessState(var/datum/controller/process/process)
- if (process in queued)
- queued -= process
- if (process in idle)
- idle -= process
- if (!(process in running))
- running += process
-
-/datum/controller/processScheduler/proc/recordStart(var/datum/controller/process/process, var/time = null)
- if (isnull(time))
- time = TimeOfHour
- last_queued[process] = world.time
- last_start[process] = time
- else
- last_queued[process] = (time == 0 ? 0 : world.time)
- last_start[process] = time
-
-/datum/controller/processScheduler/proc/recordEnd(var/datum/controller/process/process, var/time = null)
- if (isnull(time))
- time = TimeOfHour
-
- // If world.timeofday has rolled over, then we need to adjust.
- if (time < last_start[process])
- last_start[process] -= 36000
-
- var/lastRunTime = time - last_start[process]
-
- if(lastRunTime < 0)
- lastRunTime = 0
-
- recordRunTime(process, lastRunTime)
-
-/**
- * recordRunTime
- * Records a run time for a process
- */
-/datum/controller/processScheduler/proc/recordRunTime(var/datum/controller/process/process, time)
- last_run_time[process] = time
- if(time > highest_run_time[process])
- highest_run_time[process] = time
-
- var/list/lastTwenty = last_twenty_run_times[process]
- if (lastTwenty.len == 20)
- lastTwenty.Cut(1, 2)
- lastTwenty.len++
- lastTwenty[lastTwenty.len] = time
-
-/**
- * averageRunTime
- * returns the average run time (over the last 20) of the process
- */
-/datum/controller/processScheduler/proc/averageRunTime(var/datum/controller/process/process)
- var/lastTwenty = last_twenty_run_times[process]
-
- var/t = 0
- var/c = 0
- for(var/time in lastTwenty)
- t += time
- c++
-
- if(c > 0)
- return t / c
- return c
-
-/datum/controller/processScheduler/proc/getProcessLastRunTime(var/datum/controller/process/process)
- return last_run_time[process]
-
-/datum/controller/processScheduler/proc/getProcessHighestRunTime(var/datum/controller/process/process)
- return highest_run_time[process]
-
-/datum/controller/processScheduler/proc/getStatusData()
- var/list/data = new
-
- for (var/datum/controller/process/p in processes)
- data.len++
- data[data.len] = p.getContextData()
-
- return data
-
-/datum/controller/processScheduler/proc/getProcessCount()
- return processes.len
-
-/datum/controller/processScheduler/proc/hasProcess(var/processName as text)
- if (nameToProcessMap[processName])
- return 1
-
-/datum/controller/processScheduler/proc/killProcess(var/processName as text)
- restartProcess(processName)
-
-/datum/controller/processScheduler/proc/restartProcess(var/processName as text)
- if (hasProcess(processName))
- var/datum/controller/process/oldInstance = nameToProcessMap[processName]
- var/datum/controller/process/newInstance = new oldInstance.type(src)
- newInstance._copyStateFrom(oldInstance)
- replaceProcess(oldInstance, newInstance)
- oldInstance.kill()
-
-/datum/controller/processScheduler/proc/enableProcess(var/processName as text)
- if (hasProcess(processName))
- var/datum/controller/process/process = nameToProcessMap[processName]
- process.enable()
-
-/datum/controller/processScheduler/proc/disableProcess(var/processName as text)
- if (hasProcess(processName))
- var/datum/controller/process/process = nameToProcessMap[processName]
- process.disable()
-
-/datum/controller/processScheduler/proc/sign(var/x)
- if (x == 0)
- return 1
- return x / abs(x)
-
-/datum/controller/processScheduler/proc/statProcesses()
- if(!isRunning)
- stat("Processes", "Scheduler not running")
- return
- stat("Processes", "[processes.len] (R [running.len] / Q [queued.len] / I [idle.len])")
- stat(null, "[round(cpuAverage, 0.1)] CPU")
- for(var/datum/controller/process/p in processes)
- p.statProcess()
diff --git a/code/controllers/ProcessScheduler/package.json b/code/controllers/ProcessScheduler/package.json
deleted file mode 100644
index f699553fc61..00000000000
--- a/code/controllers/ProcessScheduler/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "ProcessScheduler",
- "version": "1.0.0",
- "description": "BYOND SS13 Process Scheduler",
- "main": "processScheduler.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/goonstation/ProcessScheduler.git"
- },
- "keywords": [
- "byond",
- "ss13",
- "process",
- "scheduler"
- ],
- "author": "Volundr",
- "license": "CC-BY-NC",
- "bugs": {
- "url": "https://github.com/goonstation/ProcessScheduler/issues"
- },
- "homepage": "https://github.com/goonstation/ProcessScheduler",
- "dependencies": {
- "bower": "*"
- }
-}
diff --git a/code/controllers/ProcessScheduler/test/processScheduler.js b/code/controllers/ProcessScheduler/test/processScheduler.js
deleted file mode 100644
index 0a4f111355d..00000000000
--- a/code/controllers/ProcessScheduler/test/processScheduler.js
+++ /dev/null
@@ -1,56 +0,0 @@
-(function ($) {
- function setRef(theRef) {
- ref = theRef;
- }
-
- function jax(action, data) {
- if (typeof data === 'undefined')
- data = {};
- var params = [];
- for (var k in data) {
- if (data.hasOwnProperty(k)) {
- params.push(encodeURIComponent(k) + '=' + encodeURIComponent(data[k]));
- }
- }
- var newLoc = '?src=' + ref + ';action=' + action + ';' + params.join(';');
- window.location = newLoc;
- }
-
- function requestRefresh(e) {
- jax("refresh", null);
- }
-
- function handleRefresh(processTable) {
- $('#processTable').html(processTable);
- initProcessTableButtons();
- }
-
- function requestKill(e) {
- var button = $(e.currentTarget);
- jax("kill", {name: button.data("process-name")});
- }
-
- function requestEnable(e) {
- var button = $(e.currentTarget);
- jax("enable", {name: button.data("process-name")});
- }
-
- function requestDisable(e) {
- var button = $(e.currentTarget);
- jax("disable", {name: button.data("process-name")});
- }
-
- function initProcessTableButtons() {
- $(".kill-btn").on("click", requestKill);
- $(".enable-btn").on("click", requestEnable);
- $(".disable-btn").on("click", requestDisable);
- }
-
- window.setRef = setRef;
- window.handleRefresh = handleRefresh;
-
- $(function() {
- initProcessTableButtons();
- $('#btn-refresh').on("click", requestRefresh);
- });
-}(jQuery));
\ No newline at end of file
diff --git a/code/controllers/Processes/Shuttle.dm b/code/controllers/Processes/Shuttle.dm
deleted file mode 100644
index a10586d76d9..00000000000
--- a/code/controllers/Processes/Shuttle.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/datum/controller/process/Shuttle/setup()
- name = "shuttle controller"
- schedule_interval = 20 // every 2 seconds
-
- if(!shuttle_controller)
- shuttle_controller = new
-
-/datum/controller/process/Shuttle/doWork()
- shuttle_controller.process()
diff --git a/code/controllers/Processes/air.dm b/code/controllers/Processes/air.dm
deleted file mode 100644
index 64bda8c8d99..00000000000
--- a/code/controllers/Processes/air.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/datum/controller/process/air/setup()
- name = "air"
- schedule_interval = 20 // every 2 seconds
- start_delay = 4
-
- if(!air_master)
- air_master = new
- air_master.Setup()
-
-/datum/controller/process/air/doWork()
- if(!air_processing_killed)
- if(!air_master.Tick()) //Runtimed.
- air_master.failed_ticks++
-
- if(air_master.failed_ticks > 5)
- world << "RUNTIMES IN ATMOS TICKER. Killing air simulation! "
- world.log << "### ZAS SHUTDOWN"
-
- message_admins("ZASALERT: Shutting down! status: [air_master.tick_progress]")
- log_admin("ZASALERT: Shutting down! status: [air_master.tick_progress]",level=1)
-
- air_processing_killed = TRUE
- air_master.failed_ticks = 0
diff --git a/code/controllers/Processes/alarm.dm b/code/controllers/Processes/alarm.dm
deleted file mode 100644
index 707c5756418..00000000000
--- a/code/controllers/Processes/alarm.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-// We manually initialize the alarm handlers instead of looping over all existing types
-// to make it possible to write: camera.triggerAlarm() rather than alarm_manager.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof.
-/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new()
-/var/global/datum/alarm_handler/camera/camera_alarm = new()
-/var/global/datum/alarm_handler/fire/fire_alarm = new()
-/var/global/datum/alarm_handler/motion/motion_alarm = new()
-/var/global/datum/alarm_handler/power/power_alarm = new()
-
-// Alarm Manager, the manager for alarms.
-var/datum/controller/process/alarm/alarm_manager
-
-/datum/controller/process/alarm
- var/list/datum/alarm/all_handlers
-
-/datum/controller/process/alarm/setup()
- name = "alarm"
- schedule_interval = 20 // every 2 seconds
- all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
- alarm_manager = src
-
-/datum/controller/process/alarm/doWork()
- for(last_object in all_handlers)
- var/datum/alarm_handler/AH = last_object
- AH.process()
- F_SCHECK
-
-/datum/controller/process/alarm/proc/active_alarms()
- var/list/all_alarms = new
- for(var/datum/alarm_handler/AH in all_handlers)
- var/list/alarms = AH.alarms
- all_alarms += alarms
-
- return all_alarms
-
-/datum/controller/process/alarm/proc/number_of_active_alarms()
- var/list/alarms = active_alarms()
- return alarms.len
-
-/datum/controller/process/alarm/statProcess()
- ..()
- stat(null, "[number_of_active_alarms()] alarm\s")
diff --git a/code/controllers/Processes/chemistry.dm b/code/controllers/Processes/chemistry.dm
deleted file mode 100644
index 508bdba37fd..00000000000
--- a/code/controllers/Processes/chemistry.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-var/datum/controller/process/chemistry/chemistryProcess
-
-/datum/controller/process/chemistry
- var/list/active_holders
- var/list/chemical_reactions
- var/list/chemical_reagents
-
-/datum/controller/process/chemistry/setup()
- name = "chemistry"
- schedule_interval = 20 // every 2 seconds
- chemistryProcess = src
- active_holders = list()
- chemical_reactions = chemical_reactions_list
- chemical_reagents = chemical_reagents_list
-
-/datum/controller/process/chemistry/statProcess()
- ..()
- stat(null, "[active_holders.len] reagent holder\s")
-
-/datum/controller/process/chemistry/doWork()
- for(last_object in active_holders)
- var/datum/reagents/holder = last_object
- if(!holder.process_reactions())
- active_holders -= holder
- F_SCHECK
-
-/datum/controller/process/chemistry/proc/mark_for_update(var/datum/reagents/holder)
- if(holder in active_holders)
- return
-
- //Process once, right away. If we still need to continue then add to the active_holders list and continue later
- if(holder.process_reactions())
- active_holders += holder
diff --git a/code/controllers/Processes/disease.dm b/code/controllers/Processes/disease.dm
deleted file mode 100644
index 2a1c2c9eb60..00000000000
--- a/code/controllers/Processes/disease.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/datum/controller/process/disease
- var/tmp/datum/updateQueue/updateQueueInstance
-
-/datum/controller/process/disease/setup()
- name = "disease"
- schedule_interval = 20 // every 2 seconds
-
-/datum/controller/process/disease/doWork()
- for(last_object in active_diseases)
- var/datum/disease/D = last_object
- D.process()
- F_SCHECK
-
-/datum/controller/process/disease/statProcess()
- ..()
- stat(null, "[active_diseases.len] disease\s")
diff --git a/code/controllers/Processes/effects.dm b/code/controllers/Processes/effects.dm
deleted file mode 100644
index a9e8efe2f62..00000000000
--- a/code/controllers/Processes/effects.dm
+++ /dev/null
@@ -1,92 +0,0 @@
-#define STAGE_IDLE 0
-#define STAGE_EFFECT 1
-#define STAGE_SUBEFFECT 2
-
-var/datum/controller/process/effects/effect_master
-
-/var/list/datum/effect_system/effects_objects = list() // The effect-spawning objects. Shouldn't be many of these.
-/var/list/obj/visual_effect/effects_visuals = list() // The visible component of an effect. May be created without an effect object.
-
-/datum/controller/process/effects
- var/tmp/list/processing_effects = list()
- var/tmp/list/processing_visuals = list()
- var/tmp/stage = STAGE_IDLE
-
-/datum/controller/process/effects/setup()
- effect_master = src
- name = "effects"
- schedule_interval = 2
- tick_allowance = 15
-
-/datum/controller/process/effects/doWork()
- if (stage == STAGE_IDLE)
- // Start a new work cycle.
- processing_effects = effects_objects
- effects_objects = list()
- stage = STAGE_EFFECT
-
- while (processing_effects.len)
- var/datum/effect_system/E = processing_effects[processing_effects.len]
- processing_effects.len--
-
- if (!E || E.gcDestroyed)
- continue
-
- switch (E.process())
- if (EFFECT_CONTINUE)
- effects_objects += E
-
- if (EFFECT_DESTROY)
- returnToPool(E)
-
- F_SCHECK
-
- if (stage == STAGE_EFFECT)
- processing_visuals = effects_visuals
- effects_visuals = list()
- stage = STAGE_SUBEFFECT
-
- while (processing_visuals.len)
- var/obj/visual_effect/V = processing_visuals[processing_visuals.len]
- processing_visuals.len--
-
- if (!V || V.gcDestroyed)
- effects_visuals -= V
- continue
-
- switch (V.tick())
- if (EFFECT_CONTINUE)
- effects_visuals += V
-
- if (EFFECT_DESTROY)
- effects_visuals -= V
- V.end()
- returnToPool(V)
-
- F_SCHECK
-
- stage = STAGE_IDLE
-
- // We're done.
- if (!processing_effects.len && !processing_visuals.len && !effects_objects.len && !effects_visuals.len)
- disable()
-
-/datum/controller/process/effects/proc/queue(var/datum/effect_system/E)
- if (!E || E.gcDestroyed)
- return
-
- effects_objects += E
- enable()
-
-/datum/controller/process/effects/proc/queue_simple(var/obj/visual_effect/V)
- if (!V || V.gcDestroyed)
- return
-
- effects_visuals += V
- enable()
-
-/datum/controller/process/effects/statProcess()
- ..()
- stat(null, "Effect process is [disabled ? "sleeping" : "processing"].")
- stat(null, "[effects_objects.len] effects queued, [processing_effects.len] processing")
- stat(null, "[effects_visuals.len] visuals queued, [processing_visuals.len] processing")
diff --git a/code/controllers/Processes/emergencyShuttle.dm b/code/controllers/Processes/emergencyShuttle.dm
deleted file mode 100644
index e7289311b95..00000000000
--- a/code/controllers/Processes/emergencyShuttle.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/datum/controller/process/emergencyShuttle/setup()
- name = "emergency shuttle"
- schedule_interval = 20 // every 2 seconds
-
- if(!emergency_shuttle)
- emergency_shuttle = new
-
-/datum/controller/process/emergencyShuttle/doWork()
- emergency_shuttle.process()
diff --git a/code/controllers/Processes/event.dm b/code/controllers/Processes/event.dm
deleted file mode 100644
index 404c71f0aee..00000000000
--- a/code/controllers/Processes/event.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/datum/controller/process/event/setup()
- name = "event controller"
- schedule_interval = 20 // every 2 seconds
-
-/datum/controller/process/event/doWork()
- for(last_object in event_manager.active_events)
- var/datum/event/E = last_object
- E.process()
- F_SCHECK
-
- for(var/i = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR)
- last_object = event_manager.event_containers[i]
- var/list/datum/event_container/EC = last_object
- EC.process()
- F_SCHECK
diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm
deleted file mode 100644
index 26fe73a8f54..00000000000
--- a/code/controllers/Processes/garbage.dm
+++ /dev/null
@@ -1,253 +0,0 @@
-// The time a datum was destroyed by the GC, or null if it hasn't been
-/datum/var/gcDestroyed
-
-#define GC_COLLECTIONS_PER_RUN 300
-#define GC_COLLECTION_TIMEOUT (30 SECONDS)
-#define GC_FORCE_DEL_PER_RUN 30
-
-var/datum/controller/process/garbage_collector/garbage_collector
-var/list/delayed_garbage = list()
-
-/datum/controller/process/garbage_collector
- var/garbage_collect = 1 // Whether or not to actually do work
- var/total_dels = 0 // number of total del()'s
- var/tick_dels = 0 // number of del()'s we've done this tick
- var/soft_dels = 0
- var/hard_dels = 0 // number of hard dels in total
- var/list/destroyed = list() // list of refID's of things that should be garbage collected
- // refID's are associated with the time at which they time out and need to be manually del()
- // we do this so we aren't constantly locating them and preventing them from being gc'd
-
- var/list/logging = list() // list of all types that have failed to GC associated with the number of times that's happened.
- // the types are stored as strings
-
-/datum/controller/process/garbage_collector/setup()
- name = "garbage"
- schedule_interval = 5 SECONDS
- start_delay = 3
-
- if(!garbage_collector)
- garbage_collector = src
-
- for(var/garbage in delayed_garbage)
- qdel(garbage)
- delayed_garbage.Cut()
- delayed_garbage = null
-
-#ifdef GC_FINDREF
-world/loop_checks = 0
-#endif
-
-/datum/controller/process/garbage_collector/doWork()
- if(!garbage_collect)
- return
-
- tick_dels = 0
- var/time_to_kill = world.time - GC_COLLECTION_TIMEOUT
- var/checkRemain = GC_COLLECTIONS_PER_RUN
- var/remaining_force_dels = GC_FORCE_DEL_PER_RUN
-
- while(destroyed.len && --checkRemain >= 0)
- if(remaining_force_dels <= 0)
- #ifdef GC_DEBUG
- testing("GC: Reached max force dels per tick [dels] vs [maxDels]")
- #endif
- break // Server's already pretty pounded, everything else can wait 2 seconds
- var/refID = destroyed[1]
- var/GCd_at_time = destroyed[refID]
- if(GCd_at_time > time_to_kill)
- #ifdef GC_DEBUG
- testing("GC: [refID] not old enough, breaking at [world.time] for [GCd_at_time - time_to_kill] deciseconds until [GCd_at_time + collection_timeout]")
- #endif
- break // Everything else is newer, skip them
- var/datum/A = locate(refID)
- #ifdef GC_DEBUG
- testing("GC: [refID] old enough to test: GCd_at_time: [GCd_at_time] time_to_kill: [time_to_kill] current: [world.time]")
- #endif
- if(A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
- // Something's still referring to the qdel'd object. Kill it.
- log_hard_delete(A)
- logging["[A.type]"]++
- del(A)
-
- hard_dels++
- remaining_force_dels--
- else
- #ifdef GC_DEBUG
- testing("GC: [refID] properly GC'd at [world.time] with timeout [GCd_at_time]")
- #endif
- soft_dels++
- tick_dels++
- total_dels++
- destroyed.Cut(1, 2)
- F_SCHECK
-
-#undef GC_FORCE_DEL_PER_TICK
-#undef GC_COLLECTION_TIMEOUT
-#undef GC_COLLECTIONS_PER_TICK
-
-#ifdef GC_FINDREF
-/datum/controller/process/garbage_collector/proc/LookForRefs(var/datum/D, var/list/targ)
- . = 0
- for(var/V in D.vars)
- if(V == "contents")
- continue
- if(istype(D.vars[V], /atom))
- var/atom/A = D.vars[V]
- if(A in targ)
- testing("GC: [A] | [A.type] referenced by [D] | [D.type], var [V]")
- . += 1
- else if(islist(D.vars[V]))
- . += LookForListRefs(D.vars[V], targ, D, V)
-
-/datum/controller/process/garbage_collector/proc/LookForListRefs(var/list/L, var/list/targ, var/datum/D, var/V)
- . = 0
- for(var/F in L)
- if(istype(F, /atom))
- var/atom/A = F
- if(A in targ)
- testing("GC: [A] | [A.type] referenced by [D] | [D.type], list [V]")
- . += 1
- if(islist(F))
- . += LookForListRefs(F, targ, D, "[F] in list [V]")
-#endif
-
-/datum/controller/process/garbage_collector/proc/AddTrash(datum/A)
- if(!istype(A) || !isnull(A.gcDestroyed))
- return
- #ifdef GC_DEBUG
- testing("GC: AddTrash(\ref[A] - [A.type])")
- #endif
- A.gcDestroyed = world.time
- destroyed -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
- destroyed["\ref[A]"] = world.time
-
-/datum/controller/process/garbage_collector/statProcess()
- ..()
- stat(null, "[garbage_collect ? "On" : "Off"], [destroyed.len] queued")
- stat(null, "Dels: [total_dels], [soft_dels] soft, [hard_dels] hard, [tick_dels] last run")
-
-// Should be treated as a replacement for the 'del' keyword.
-// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
-/proc/qdel(var/datum/A)
- if(!A)
- return
- if(!istype(A))
- warning("qdel() passed object of type [A.type]. qdel() can only handle /datum types.")
- del(A)
- if(garbage_collector)
- garbage_collector.total_dels++
- garbage_collector.hard_dels++
- else if(isnull(A.gcDestroyed))
- // Let our friend know they're about to get collected
- . = !A.Destroy()
- if(. && A)
- A.finalize_qdel()
-
-/datum/proc/finalize_qdel()
- if(IsPooled(src))
- returnToPool(src)
- else
- del(src)
-
-/atom/finalize_qdel()
- if (IsPooled(src))
- returnToPool(src)
- else
- if(garbage_collector)
- garbage_collector.AddTrash(src)
- else
- delayed_garbage |= src
-
-/icon/finalize_qdel()
- del(src)
-
-/image/finalize_qdel()
- del(src)
-
-/mob/finalize_qdel()
- del(src)
-
-/turf/finalize_qdel()
- del(src)
-
-// Default implementation of clean-up code.
-// This should be overridden to remove all references pointing to the object being destroyed.
-// Return true if the the GC controller should allow the object to continue existing. (Useful if pooling objects.)
-/datum/proc/Destroy()
- nanomanager.close_uis(src)
- tag = null
- return
-
-#ifdef TESTING
-/client/var/running_find_references
-
-/mob/verb/create_thing()
- set category = "Debug"
- set name = "Create Thing"
-
- var/path = input("Enter path")
- var/atom/thing = new path(loc)
- thing.find_references()
-
-/atom/verb/find_references()
- set category = "Debug"
- set name = "Find References"
- set background = 1
- set src in world
-
- if(!usr || !usr.client)
- return
-
- if(usr.client.running_find_references)
- testing("CANCELLED search for references to a [usr.client.running_find_references].")
- usr.client.running_find_references = null
- return
-
- if(alert("Running this will create a lot of lag until it finishes. You can cancel it by running it again. Would you like to begin the search?", "Find References", "Yes", "No") == "No")
- return
-
- // Remove this object from the list of things to be auto-deleted.
- if(garbage_collector)
- garbage_collector.destroyed -= "\ref[src]"
-
- usr.client.running_find_references = type
- testing("Beginning search for references to a [type].")
- var/list/things = list()
- for(var/client/thing)
- things += thing
- for(var/datum/thing)
- things += thing
- for(var/atom/thing)
- things += thing
- testing("Collected list of things in search for references to a [type]. ([things.len] Thing\s)")
- for(var/datum/thing in things)
- if(!usr.client.running_find_references) return
- for(var/varname in thing.vars)
- var/variable = thing.vars[varname]
- if(variable == src)
- testing("Found [src.type] \ref[src] in [thing.type]'s [varname] var.")
- else if(islist(variable))
- if(src in variable)
- testing("Found [src.type] \ref[src] in [thing.type]'s [varname] list var.")
- testing("Completed search for references to a [type].")
- usr.client.running_find_references = null
-
-/client/verb/purge_all_destroyed_objects()
- set category = "Debug"
- if(garbage_collector)
- while(garbage_collector.destroyed.len)
- var/datum/o = locate(garbage_collector.destroyed[1])
- if(istype(o) && o.gcDestroyed)
- del(o)
- garbage_collector.dels++
- garbage_collector.destroyed.Cut(1, 2)
-#endif
-
-#ifdef GC_DEBUG
-#undef GC_DEBUG
-#endif
-
-#ifdef GC_FINDREF
-#undef GC_FINDREF
-#endif
diff --git a/code/controllers/Processes/inactivity.dm b/code/controllers/Processes/inactivity.dm
deleted file mode 100644
index 137bcb6e0b2..00000000000
--- a/code/controllers/Processes/inactivity.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/datum/controller/process/inactivity/setup()
- name = "inactivity"
- schedule_interval = 600 // Once every minute (approx.)
-
-/datum/controller/process/inactivity/doWork()
- if(config.kick_inactive)
- for(last_object in clients)
- var/client/C = last_object
- if(!C.holder && C.is_afk(config.kick_inactive MINUTES))
- if(!istype(C.mob, /mob/dead))
- log_access("AFK: [key_name(C)]")
- C << "You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected. "
- del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients.
- F_SCHECK
diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm
deleted file mode 100644
index e9dd98b16e7..00000000000
--- a/code/controllers/Processes/lighting.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-#define STAGE_NONE 0
-#define STAGE_SOURCE 1
-#define STAGE_CORNER 2
-#define STAGE_OVERLAY 3
-
-/var/list/lighting_update_lights = list() // List of lighting sources queued for update.
-/var/list/lighting_update_corners = list() // List of lighting corners queued for update.
-/var/list/lighting_update_overlays = list() // List of lighting overlays queued for update.
-
-// Probably slow.
-/var/lighting_profiling = FALSE
-
-/var/datum/controller/process/lighting/lighting_process
-
-/datum/controller/process/lighting
- schedule_interval = LIGHTING_INTERVAL
-
-/datum/controller/process/lighting/setup()
- name = "lighting"
- lighting_process = src
-
-/datum/controller/process/lighting/statProcess()
- ..()
- stat(null, "Server tick usage is [world.tick_usage].")
- stat(null, "[all_lighting_overlays.len] overlays ([all_lighting_corners.len] corners)")
- stat(null, "Lights: [lighting_update_lights.len] queued")
- stat(null, "Corners: [lighting_update_corners.len] queued")
- stat(null, "Overlays: [lighting_update_overlays.len] queued")
-
-/datum/controller/process/lighting/doWork()
- var/list/curr_lights = lighting_update_lights
- var/list/curr_corners = lighting_update_corners
- var/list/curr_overlays = lighting_update_overlays
-
- while (curr_lights.len)
- var/datum/light_source/L = curr_lights[curr_lights.len]
- curr_lights.len--
-
- if(L.destroyed || L.check() || L.force_update)
- L.remove_lum()
- if(!L.destroyed)
- L.apply_lum()
-
- else if(L.vis_update) //We smartly update only tiles that became (in) visible to use.
- L.smart_vis_update()
-
- L.vis_update = FALSE
- L.force_update = FALSE
- L.needs_update = FALSE
-
- F_SCHECK
-
- while (curr_corners.len)
- var/datum/lighting_corner/C = curr_corners[curr_corners.len]
- curr_corners.len--
-
- C.update_overlays()
-
- C.needs_update = FALSE
-
- F_SCHECK
-
- while (curr_overlays.len)
- var/atom/movable/lighting_overlay/O = curr_overlays[curr_overlays.len]
- curr_overlays.len--
-
- O.update_overlay()
- O.needs_update = FALSE
-
- F_SCHECK
-
-#undef STAGE_NONE
-#undef STAGE_SOURCE
-#undef STAGE_CORNER
-#undef STAGE_OVERLAY
diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm
deleted file mode 100644
index 856444bdb04..00000000000
--- a/code/controllers/Processes/machinery.dm
+++ /dev/null
@@ -1,149 +0,0 @@
-/var/global/machinery_sort_required = 0
-var/global/list/power_using_machines = list()
-var/global/list/ticking_machines = list()
-
-#define STAGE_NONE 0
-#define STAGE_MACHINERY_PROCESS 1
-#define STAGE_MACHINERY_POWER 2
-#define STAGE_POWERNET 3
-#define STAGE_POWERSINK 4
-#define STAGE_PIPENET 5
-
-/proc/add_machine(var/obj/machinery/M)
- if (QDELETED(M))
- return
-
- var/type = M.get_process_type()
- if (type)
- machines += M
-
- if (type & M_PROCESSES)
- ticking_machines += M
-
- if (type & M_USES_POWER)
- power_using_machines += M
-
-/proc/remove_machine(var/obj/machinery/M)
- machines -= M
- power_using_machines -= M
- ticking_machines -= M
-
-/datum/controller/process/machinery
- var/tmp/list/processing_machinery = list()
- var/tmp/list/processing_power_users = list()
- var/tmp/list/processing_powernets = list()
- var/tmp/list/processing_powersinks = list()
- var/tmp/list/processing_pipenets = list()
- var/stage = STAGE_NONE
-
-/datum/controller/process/machinery/setup()
- name = "machinery"
- schedule_interval = 2 SECONDS
- start_delay = 12
-
-/datum/controller/process/machinery/doWork()
- // If we're starting a new tick, setup.
- if (stage == STAGE_NONE)
- processing_machinery = ticking_machines.Copy()
- stage = STAGE_MACHINERY_PROCESS
-
- // Process machinery.
- while (processing_machinery.len)
- var/obj/machinery/M = processing_machinery[processing_machinery.len]
- processing_machinery.len--
-
- if (QDELETED(M))
- remove_machine(M)
- continue
-
- switch (M.process())
- if (PROCESS_KILL)
- remove_machine(M)
-
- if (M_NO_PROCESS)
- ticking_machines -= M
-
- F_SCHECK
-
- if (stage == STAGE_MACHINERY_PROCESS)
- processing_power_users = power_using_machines.Copy()
- stage = STAGE_MACHINERY_POWER
-
- while (processing_power_users.len)
- var/obj/machinery/M = processing_power_users[processing_power_users.len]
- processing_power_users.len--
-
- if (QDELETED(M))
- remove_machine(M)
- continue
-
- if (M.use_power)
- M.auto_use_power()
-
- F_SCHECK
-
- if (stage == STAGE_MACHINERY_POWER)
- processing_powernets = powernets.Copy()
- stage = STAGE_POWERNET
-
- while (processing_powernets.len)
- var/datum/powernet/PN = processing_powernets[processing_powernets.len]
- processing_powernets.len--
-
- if (QDELETED(PN))
- powernets -= PN
- continue
-
- PN.reset()
- F_SCHECK
-
- if (stage == STAGE_POWERNET)
- processing_powersinks = processing_power_items.Copy()
- stage = STAGE_POWERSINK
-
- while (processing_powersinks.len)
- var/obj/item/I = processing_powersinks[processing_powersinks.len]
- processing_powersinks.len--
-
- if (QDELETED(I) || !I.pwr_drain())
- processing_power_items -= I
-
- F_SCHECK
-
- if (stage == STAGE_POWERSINK)
- processing_pipenets = pipe_networks.Copy()
- stage = STAGE_PIPENET
-
- while (processing_pipenets.len)
- var/datum/pipe_network/PN = processing_pipenets[processing_pipenets.len]
- processing_pipenets.len--
-
- if (QDELETED(PN))
- pipe_networks -= PN
- continue
-
- PN.process()
- F_SCHECK
-
- stage = STAGE_NONE
-
-/datum/controller/process/machinery/proc/internal_sort()
- if(machinery_sort_required)
- machinery_sort_required = 0
- machines = dd_sortedObjectList(machines)
-
-/datum/controller/process/machinery/statProcess()
- ..()
- stat(null, "[machines.len] total machines")
- stat(null, "[ticking_machines.len] ticking machines, [processing_machinery.len] queued")
- stat(null, "[power_using_machines.len] power-using machines, [processing_power_users.len] queued")
- stat(null, "[powernets.len] powernets, [processing_powernets.len] queued")
- stat(null, "[processing_power_items.len] power items, [processing_powersinks.len] queued")
- stat(null, "[pipe_networks.len] pipenets, [processing_pipenets.len] queued")
-
-#undef STAGE_NONE
-#undef STAGE_MACHINERY_PROCESS
-#undef STAGE_MACHINERY_POWER
-#undef STAGE_POWERNET
-#undef STAGE_POWERSINK
-#undef STAGE_PIPENET
diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm
deleted file mode 100644
index ead2791dd69..00000000000
--- a/code/controllers/Processes/mob.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-/datum/controller/process/mob
- var/tmp/datum/updateQueue/updateQueueInstance
- var/tmp/list/queue = list()
- var/normal_exit = TRUE
-
-/datum/controller/process/mob/setup()
- name = "mob"
- schedule_interval = 2 SECONDS // every 2 seconds
- start_delay = 16
-
-/datum/controller/process/mob/started()
- ..()
- if(!mob_list)
- mob_list = list()
-
-/datum/controller/process/mob/doWork()
- if (normal_exit)
- queue = mob_list.Copy()
-
- normal_exit = FALSE
-
- while (queue.len)
- var/mob/M = queue[queue.len]
- queue.len--
-
- if (!M || M.gcDestroyed)
- mob_list -= M
- continue
-
- M.Life()
- F_SCHECK
-
- normal_exit = TRUE
-
-/datum/controller/process/mob/statProcess()
- ..()
- stat(null, "[mob_list.len] mobs, [queue.len] queued")
diff --git a/code/controllers/Processes/modifier.dm b/code/controllers/Processes/modifier.dm
deleted file mode 100644
index 7bbb181d120..00000000000
--- a/code/controllers/Processes/modifier.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/datum/controller/process/modifier/setup()
- name = "modifiers"
- schedule_interval = 10
- start_delay = 8
-
-/datum/controller/process/modifier/started()
- ..()
- if(!processing_modifiers)
- processing_modifiers = list()
-
-/datum/controller/process/modifier/doWork()
- for(last_object in processing_modifiers)
- var/datum/modifier/O = last_object
- if(isnull(O.gcDestroyed))
- O.process()
- else
- catchBadType(O)
- processing_objects -= O
-
-/datum/controller/process/modifier/statProcess()
- ..()
- stat(null, "[processing_modifiers.len] modifiers")
diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm
deleted file mode 100644
index fb43970709d..00000000000
--- a/code/controllers/Processes/nanoui.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-/datum/controller/process/nanoui
- var/is_idle = TRUE
- var/list/queued_uis = list()
-
-/datum/controller/process/nanoui/setup()
- name = "nanoui"
- schedule_interval = 2 SECONDS
-
-/datum/controller/process/nanoui/statProcess()
- ..()
- stat(null, "[nanomanager.processing_uis.len] UIs, [queued_uis.len] processing")
-
-/datum/controller/process/nanoui/doWork()
- if (is_idle)
- queued_uis = nanomanager.processing_uis.Copy()
- is_idle = FALSE
-
- while (queued_uis.len)
- var/datum/nanoui/UI = queued_uis[queued_uis.len]
- queued_uis.len--
-
- if (!UI || UI.gcDestroyed)
- catchBadType(UI)
- nanomanager.processing_uis -= UI
- continue
-
- UI.process()
- F_SCHECK
-
- is_idle = TRUE
-
-/*datum/controller/process/nanoui/doWork()
- for(last_object in nanomanager.processing_uis)
- var/datum/nanoui/NUI = last_object
- if(istype(NUI) && isnull(NUI.gcDestroyed))
- try
- NUI.process()
- catch(var/exception/e)
- catchException(e, NUI)
- else
- catchBadType(NUI)
- nanomanager.processing_uis -= NUI
-*/
diff --git a/code/controllers/Processes/news.dm b/code/controllers/Processes/news.dm
deleted file mode 100644
index e56a424000e..00000000000
--- a/code/controllers/Processes/news.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/datum/controller/process/news/setup()
- name = "news"
- schedule_interval = 600 // every 60 seconds
-
- if(!news_controller)
- news_controller = new
-
-/datum/controller/process/news/doWork()
- news_controller.process()
-
-/datum/controller/process/news/getStatName()
- return ..()+"(STAT:[news_controller.running] FLS:[news_controller.fails])"
diff --git a/code/controllers/Processes/night_lighting.dm b/code/controllers/Processes/night_lighting.dm
deleted file mode 100644
index d421aef941a..00000000000
--- a/code/controllers/Processes/night_lighting.dm
+++ /dev/null
@@ -1,71 +0,0 @@
-var/datum/controller/process/night_lighting/nl_ctrl
-
-/datum/controller/process/night_lighting/
- var/isactive = 0
- var/firstrun = 1
- var/manual_override = 0
- // 0 -> No manual override
- // 1 -> Override via. player-set nightmode setting (like CE console)
- // 2 -> Red-alert override.
-
-/datum/controller/process/night_lighting/proc/is_active()
- return isactive
-
-/datum/controller/process/night_lighting/setup()
- name = "night lighting controller"
- schedule_interval = 5 MINUTES
-
- nl_ctrl = src
-
- if (!config.night_lighting)
- // Stop trying to delete processes. Not how it goes.
- disabled = 1
-
-/datum/controller/process/night_lighting/preStart()
- doWork(FALSE)
-
-/datum/controller/process/night_lighting/doWork(announce = TRUE)
- if (manual_override) // don't automatically change lighting if it was manually changed in-game
- return
-
- var/time = worldtime2hours()
- if (time <= config.nl_finish || time >= config.nl_start)
- if (!isactive)
- activate()
- if (announce)
- command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
- else
- if (isactive)
- deactivate()
- if (announce)
- command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
-
-// 'whitelisted' areas are areas that have nightmode explicitly enabled
-
-/datum/controller/process/night_lighting/proc/activate(var/whitelisted_only = 1)
- isactive = 1
- for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
- APC.toggle_nightlight("on")
-
- F_SCHECK
-
-/datum/controller/process/night_lighting/proc/deactivate(var/whitelisted_only = 1)
- isactive = 0
- for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
- APC.toggle_nightlight("off")
-
- F_SCHECK
-
-/datum/controller/process/night_lighting/proc/get_apc_list(var/whitelisted_only = 1)
- var/list/obj/machinery/power/apc/lighting_apcs = list()
-
- for (var/A in all_areas)
- var/area/B = A
- if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only))
- continue
- if (B.apc && !B.apc.aidisabled)
- lighting_apcs += B.apc
-
- F_SCHECK
-
- return lighting_apcs
diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm
deleted file mode 100644
index b0cea9c2ed0..00000000000
--- a/code/controllers/Processes/obj.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/datum/controller/process/obj
- var/normal_exit = TRUE
- var/list/queue = list()
-
-/datum/controller/process/obj/setup()
- name = "obj"
- schedule_interval = 2 SECONDS
- start_delay = 8
-
-/datum/controller/process/obj/started()
- ..()
- if(!processing_objects)
- processing_objects = list()
-
-/datum/controller/process/obj/doWork()
- if (normal_exit)
- queue = processing_objects.Copy()
- normal_exit = FALSE
-
- while (queue.len)
- var/datum/O = queue[queue.len]
- queue.len--
-
- if (!O || O.gcDestroyed)
- processing_objects -= O
- continue
-
- O:process()
- F_SCHECK
-
- normal_exit = TRUE
-
-/datum/controller/process/obj/statProcess()
- ..()
- stat(null, "[processing_objects.len] objects, [queue.len] queued")
diff --git a/code/controllers/Processes/scheduler.dm b/code/controllers/Processes/scheduler.dm
deleted file mode 100644
index 35146686fcc..00000000000
--- a/code/controllers/Processes/scheduler.dm
+++ /dev/null
@@ -1,166 +0,0 @@
-/var/datum/controller/process/scheduler/scheduler
-
-/************
-* Scheduler *
-************/
-/datum/controller/process/scheduler
- var/list/datum/scheduled_task/tasks = list()
- var/datum/scheduled_task/head
-
-/datum/controller/process/scheduler/setup()
- name = "scheduler"
- schedule_interval = 2
- scheduler = src
-
-/datum/controller/process/scheduler/doWork()
- while (head && !PSCHED_CHECK_TICK)
- if (head.destroyed)
- head.kill()
- head = head.next
- tasks -= head
- continue
- if (head.trigger_time >= world.time)
- return // Nothing after this will be ready to fire.
-
- // This one's ready to fire, process it.
- var/datum/scheduled_task/task = head
- head = task.next
- task.pre_process()
- task.process()
- task.post_process()
- if (task.destroyed) // post_process probably destroyed it.
- tasks -= task
- task.kill()
-
-/datum/controller/process/scheduler/proc/queue(datum/scheduled_task/task)
- if (!task || !task.trigger_time)
- warning("scheduler: Invalid task queued! Ignoring.")
- return
- // Reset this in-case we're doing a rebuild.
- task.next = null
- if (!head && !tasks.len)
- head = task
- tasks += task
- return
-
- if (!head) // Head's missing but we still have tasks, rebuild.
- tasks += task
- rebuild_queue()
- return
-
- var/datum/scheduled_task/curr = head
- while (curr.next && curr.trigger_time < task.trigger_time)
- curr = curr.next
-
- if (!curr.next)
- // We're at the end of the queue, just append.
- curr.next = task
- tasks += task
- return
-
- // Inserting midway into the list.
- var/old_next = curr.next
- curr.next = task
- task.next = old_next
- tasks += task
-
-// Rebuilds the queue linked-list, removing invalid or destroyed entries.
-/datum/controller/process/scheduler/proc/rebuild_queue()
- log_debug("scheduler: Rebuilding queue.")
- var/list/old_tasks = tasks
- tasks = list()
- if (!old_tasks.len)
- log_debug("scheduler: rebuild was called on empty queue! Aborting.")
- return
-
- // Find the head.
- for (var/thing in old_tasks)
- var/datum/scheduled_task/task = thing
- if (QDELETED(task))
- old_tasks -= task
- continue
-
- if (task.destroyed)
- old_tasks -= task
- task.kill()
- continue
-
- if (!head || task.trigger_time < head.trigger_time)
- head = task
-
- if (!head)
- log_debug("scheduler: unable to find head! Purging task queue.")
- for (var/thing in old_tasks)
- var/datum/scheduled_task/task = thing
- if (QDELETED(task))
- continue
-
- task.kill()
-
- head = null
- return
-
- // Don't queue the head.
- tasks += head
- old_tasks -= head
-
- // Now rebuild the queue.
- for (var/thing in old_tasks)
- var/datum/scheduled_task/task = thing
-
- queue(task)
-
- log_debug("scheduler: Queue diff is [old_tasks.len - tasks.len].")
-
-/datum/controller/process/scheduler/statProcess()
- ..()
- stat(null, "[tasks.len] task\s")
-
-/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st)
- queue(st)
-
-/datum/controller/process/scheduler/proc/unschedule(var/datum/scheduled_task/st)
- st.destroyed = TRUE
-
-/**********
-* Helpers *
-**********/
-/proc/schedule(source, the_proc, time, ...)
- if (time < 0)
- return
- time += world.time
- var/list/the_args
- if (length(args) > 3)
- the_args = args.Copy(4)
- else
- the_args = list()
- if (source)
- return schedule_task_with_source(time, the_proc, the_args)
- else
- return schedule_task(time, the_proc, the_args)
-
-/proc/schedule_task_in(var/in_time, var/procedure, var/list/arguments = list())
- return schedule_task(world.time + in_time, procedure, arguments)
-
-/proc/schedule_task_with_source_in(var/in_time, var/source, var/procedure, var/list/arguments = list())
- return schedule_task_with_source(world.time + in_time, source, procedure, arguments)
-
-/proc/schedule_task(var/trigger_time, var/procedure, var/list/arguments)
- var/datum/scheduled_task/st = new/datum/scheduled_task(trigger_time, procedure, arguments, /proc/destroy_scheduled_task, list())
- scheduler.schedule(st)
- return st
-
-/proc/schedule_task_with_source(var/trigger_time, var/source, var/procedure, var/list/arguments)
- var/datum/scheduled_task/st = new/datum/scheduled_task/source(trigger_time, source, procedure, arguments, /proc/destroy_scheduled_task, list())
- scheduler.schedule(st)
- return st
-
-/proc/schedule_repeating_task(var/trigger_time, var/repeat_interval, var/procedure, var/list/arguments)
- var/datum/scheduled_task/st = new/datum/scheduled_task(trigger_time, procedure, arguments, /proc/repeat_scheduled_task, list(repeat_interval))
- scheduler.schedule(st)
- return st
-
-/proc/schedule_repeating_task_with_source(var/trigger_time, var/repeat_interval, var/source, var/procedure, var/list/arguments)
- var/datum/scheduled_task/st = new/datum/scheduled_task/source(trigger_time, source, procedure, arguments, /proc/repeat_scheduled_task, list(repeat_interval))
- scheduler.schedule(st)
- return st
diff --git a/code/controllers/Processes/sun.dm b/code/controllers/Processes/sun.dm
deleted file mode 100644
index f09806cef53..00000000000
--- a/code/controllers/Processes/sun.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/datum/controller/process/sun/setup()
- name = "sun"
- schedule_interval = 20 // every second
- sun = new
-
-/datum/controller/process/sun/doWork()
- sun.calc_position()
diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm
deleted file mode 100644
index 891a511ec6d..00000000000
--- a/code/controllers/Processes/supply.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/controller/process/supply/setup()
- name = "supply controller"
- schedule_interval = 300 // every 30 seconds
-
-/datum/controller/process/supply/doWork()
- supply_controller.process()
\ No newline at end of file
diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm
deleted file mode 100644
index b7c45ba91a4..00000000000
--- a/code/controllers/Processes/ticker.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-var/global/datum/controller/process/ticker/tickerProcess
-
-/datum/controller/process/ticker
- var/lastTickerTimeDuration
- var/lastTickerTime
-
-/datum/controller/process/ticker/setup()
- name = "ticker"
- schedule_interval = 20 // every 2 seconds
-
- lastTickerTime = world.timeofday
-
- if(!ticker)
- ticker = new
-
- tickerProcess = src
-
- spawn(0)
- if(ticker)
- ticker.pregame()
-
-/datum/controller/process/ticker/doWork()
- var/currentTime = world.timeofday
-
- if(currentTime < lastTickerTime) // check for midnight rollover
- lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND
- else
- lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND
-
- lastTickerTime = currentTime
-
- ticker.process()
-
-/datum/controller/process/ticker/proc/getLastTickerTimeDuration()
- return lastTickerTimeDuration
diff --git a/code/controllers/Processes/turf.dm b/code/controllers/Processes/turf.dm
deleted file mode 100644
index 57ed82ca648..00000000000
--- a/code/controllers/Processes/turf.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-var/global/list/turf/processing_turfs = list()
-
-/datum/controller/process/turf/setup()
- name = "turf"
- schedule_interval = 20 // every 2 seconds
-
-/datum/controller/process/turf/doWork()
- for(last_object in processing_turfs)
- var/turf/T = last_object
- if(T.process() == PROCESS_KILL)
- processing_turfs.Remove(T)
- F_SCHECK
-
-/datum/controller/process/turf/statProcess()
- ..()
- stat(null, "[processing_turfs.len] turf\s")
diff --git a/code/controllers/Processes/vote.dm b/code/controllers/Processes/vote.dm
deleted file mode 100644
index 5df5ce69792..00000000000
--- a/code/controllers/Processes/vote.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/controller/process/vote/setup()
- name = "vote"
- schedule_interval = 10 // every second
-
-/datum/controller/process/vote/doWork()
- vote.process()
diff --git a/code/controllers/Processes/wireless.dm b/code/controllers/Processes/wireless.dm
deleted file mode 100644
index 9c997d70947..00000000000
--- a/code/controllers/Processes/wireless.dm
+++ /dev/null
@@ -1,72 +0,0 @@
-//-------------------------------
-/*
- Wireless controller
-
- Used for connecting devices to each other (i.e. machinery, doors, emitters, etc.)
- Unlike the radio controller, the wireless controller does not pass communications between devices. Once the devices
- have been connected they call each others procs directly, they do not use the wireless controller to communicate.
-
- See code\modules\wireless\interfaces.dm for details of how to connect devices.
-*/
-//-------------------------------
-
-var/datum/controller/process/wireless/wirelessProcess
-
-/datum/controller/process/wireless
- var/list/receiver_list
- var/list/pending_connections
- var/list/retry_connections
- var/list/failed_connections
-
-/datum/controller/process/wireless/setup()
- name = "wireless"
- schedule_interval = 50
- pending_connections = new()
- retry_connections = new()
- failed_connections = new()
- receiver_list = new()
- wirelessProcess = src
-
-/datum/controller/process/wireless/proc/add_device(var/datum/wifi/receiver/R)
- if(receiver_list)
- receiver_list |= R
- else
- receiver_list = new()
- receiver_list |= R
-
-/datum/controller/process/wireless/proc/remove_device(var/datum/wifi/receiver/R)
- if(receiver_list)
- receiver_list -= R
-
-/datum/controller/process/wireless/proc/add_request(var/datum/connection_request/C)
- if(pending_connections)
- pending_connections += C
- else
- pending_connections = new()
- pending_connections += C
-
-/datum/controller/process/wireless/doWork()
- //process any connection requests waiting to be retried
- if(retry_connections.len > 0)
- //any that fail are moved into the failed connections list
- process_queue(retry_connections, failed_connections)
-
- //process any pending connection requests
- if(pending_connections.len > 0)
- //any that fail are moved to the retry queue
- process_queue(pending_connections, retry_connections)
-
-/datum/controller/process/wireless/proc/process_queue(var/list/process_conections, var/list/unsuccesful_connections)
- for(last_object in process_conections)
- var/datum/connection_request/C = last_object
- var/target_found = 0
- for(var/datum/wifi/receiver/R in receiver_list)
- if(R.id == C.id)
- var/datum/wifi/sender/S = C.source
- S.connect_device(R)
- R.connect_device(S)
- target_found = 1
- process_conections -= C
- if(!target_found)
- unsuccesful_connections += C
- F_SCHECK
diff --git a/code/controllers/autotransfer.dm b/code/controllers/autotransfer.dm
deleted file mode 100644
index 597b7f607c4..00000000000
--- a/code/controllers/autotransfer.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-var/datum/controller/transfer_controller/transfer_controller
-
-datum/controller/transfer_controller
- var/timerbuffer = 0 //buffer for time check
- var/currenttick = 0
-datum/controller/transfer_controller/New()
- timerbuffer = config.vote_autotransfer_initial
- processing_objects += src
-
-datum/controller/transfer_controller/Destroy()
- processing_objects -= src
-
-datum/controller/transfer_controller/proc/process()
- currenttick = currenttick + 1
- if (world.time >= timerbuffer - 600)
- vote.autotransfer()
- timerbuffer = timerbuffer + config.vote_autotransfer_interval
\ No newline at end of file
diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm
deleted file mode 100644
index 045f4781953..00000000000
--- a/code/controllers/communications.dm
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- HOW IT WORKS
-
- The radio_controller is a global object maintaining all radio transmissions, think about it as about "ether".
- Note that walkie-talkie, intercoms and headsets handle transmission using nonstandard way.
- procs:
-
- add_object(obj/device as obj, var/new_frequency as num, var/filter as text|null = null)
- Adds listening object.
- parameters:
- device - device receiving signals, must have proc receive_signal (see description below).
- one device may listen several frequencies, but not same frequency twice.
- new_frequency - see possibly frequencies below;
- filter - thing for optimization. Optional, but recommended.
- All filters should be consolidated in this file, see defines later.
- Device without listening filter will receive all signals (on specified frequency).
- Device with filter will receive any signals sent without filter.
- Device with filter will not receive any signals sent with different filter.
- returns:
- Reference to frequency object.
-
- remove_object (obj/device, old_frequency)
- Obliviously, after calling this proc, device will not receive any signals on old_frequency.
- Other frequencies will left unaffected.
-
- return_frequency(var/frequency as num)
- returns:
- Reference to frequency object. Use it if you need to send and do not need to listen.
-
- radio_frequency is a global object maintaining list of devices that listening specific frequency.
- procs:
-
- post_signal(obj/source as obj|null, datum/signal/signal, var/filter as text|null = null, var/range as num|null = null)
- Sends signal to all devices that wants such signal.
- parameters:
- source - object, emitted signal. Usually, devices will not receive their own signals.
- signal - see description below.
- filter - described above.
- range - radius of regular byond's square circle on that z-level. null means everywhere, on all z-levels.
-
- obj/proc/receive_signal(datum/signal/signal, var/receive_method as num, var/receive_param)
- Handler from received signals. By default does nothing. Define your own for your object.
- Avoid of sending signals directly from this proc, use spawn(-1). DO NOT use sleep() here or call procs that sleep please. If you must, use spawn()
- parameters:
- signal - see description below. Extract all needed data from the signal before doing sleep(), spawn() or return!
- receive_method - may be TRANSMISSION_WIRE or TRANSMISSION_RADIO.
- TRANSMISSION_WIRE is currently unused.
- receive_param - for TRANSMISSION_RADIO here comes frequency.
-
- datum/signal
- vars:
- source
- an object that emitted signal. Used for debug and bearing.
- data
- list with transmitting data. Usual use pattern:
- data["msg"] = "hello world"
- encryption
- Some number symbolizing "encryption key".
- Note that game actually do not use any cryptography here.
- If receiving object don't know right key, it must ignore encrypted signal in its receive_signal.
-
-*/
-
-/*
-Frequency range: 1200 to 1600
-Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency, even during mapmaking)
-
-Radio:
-1459 - standard radio chat
-1351 - Science
-1353 - Command
-1355 - Medical
-1357 - Engineering
-1359 - Security
-1341 - deathsquad
-1443 - Confession Intercom
-1347 - Cargo techs
-1349 - Service people
-
-Devices:
-1451 - tracking implant
-1457 - RSD default
-
-On the map:
-1311 for prison shuttle console (in fact, it is not used)
-1435 for status displays
-1437 for atmospherics/fire alerts
-1438 for engine components
-1439 for air pumps, air scrubbers, atmo control
-1441 for atmospherics - supply tanks
-1443 for atmospherics - distribution loop/mixed air tank
-1445 for bot nav beacons
-1447 for mulebot, secbot and ed209 control
-1449 for airlock controls, electropack, magnets
-1451 for toxin lab access
-1453 for engineering access
-1455 for AI access
-*/
-
-var/const/RADIO_LOW_FREQ = 1200
-var/const/PUBLIC_LOW_FREQ = 1441
-var/const/PUBLIC_HIGH_FREQ = 1489
-var/const/RADIO_HIGH_FREQ = 1600
-
-var/const/BOT_FREQ = 1447
-var/const/COMM_FREQ = 1353
-var/const/ERT_FREQ = 1345
-var/const/AI_FREQ = 1343
-var/const/DTH_FREQ = 1341
-var/const/SYND_FREQ = 1213
-var/const/ENT_FREQ = 1461 //entertainment frequency. This is not a diona exclusive frequency.
-
-// department channels
-var/const/PUB_FREQ = 1459
-var/const/SEC_FREQ = 1359
-var/const/ENG_FREQ = 1357
-var/const/MED_FREQ = 1355
-var/const/SCI_FREQ = 1351
-var/const/SRV_FREQ = 1349
-var/const/SUP_FREQ = 1347
-
-// internal department channels
-var/const/MED_I_FREQ = 1485
-var/const/SEC_I_FREQ = 1475
-
-var/list/radiochannels = list(
- "Common" = PUB_FREQ,
- "Science" = SCI_FREQ,
- "Command" = COMM_FREQ,
- "Medical" = MED_FREQ,
- "Engineering" = ENG_FREQ,
- "Security" = SEC_FREQ,
- "Response Team" = ERT_FREQ,
- "Special Ops" = DTH_FREQ,
- "Mercenary" = SYND_FREQ,
- "Supply" = SUP_FREQ,
- "Service" = SRV_FREQ,
- "AI Private" = AI_FREQ,
- "Entertainment" = ENT_FREQ,
- "Medical(I)" = MED_I_FREQ,
- "Security(I)" = SEC_I_FREQ
-)
-
-// central command channels, i.e deathsquid & response teams
-var/list/CENT_FREQS = list(ERT_FREQ, DTH_FREQ)
-
-// Antag channels, i.e. Syndicate
-var/list/ANTAG_FREQS = list(SYND_FREQ)
-
-//Department channels, arranged lexically
-var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ, ENT_FREQ)
-
-#define TRANSMISSION_WIRE 0
-#define TRANSMISSION_RADIO 1
-
-/proc/frequency_span_class(var/frequency)
- // Antags!
- if (frequency in ANTAG_FREQS)
- return "syndradio"
- // centcomm channels (deathsquid and ert)
- if(frequency in CENT_FREQS)
- return "centradio"
- // command channel
- if(frequency == COMM_FREQ)
- return "comradio"
- // AI private channel
- if(frequency == AI_FREQ)
- return "airadio"
- // department radio formatting (poorly optimized, ugh)
- if(frequency == SEC_FREQ)
- return "secradio"
- if (frequency == ENG_FREQ)
- return "engradio"
- if(frequency == SCI_FREQ)
- return "sciradio"
- if(frequency == MED_FREQ)
- return "medradio"
- if(frequency == SUP_FREQ) // cargo
- return "supradio"
- if(frequency == SRV_FREQ) // service
- return "srvradio"
- if(frequency == ENT_FREQ) //entertainment
- return "entradio"
- if(frequency in DEPT_FREQS)
- return "deptradio"
-
- return "radio"
-
-/* filters */
-//When devices register with the radio controller, they might register under a certain filter.
-//Other devices can then choose to send signals to only those devices that belong to a particular filter.
-//This is done for performance, so we don't send signals to lots of machines unnecessarily.
-
-//This filter is special because devices belonging to default also recieve signals sent to any other filter.
-var/const/RADIO_DEFAULT = "radio_default"
-
-var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms
-var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms
-var/const/RADIO_CHAT = "radio_telecoms"
-var/const/RADIO_ATMOSIA = "radio_atmos"
-var/const/RADIO_NAVBEACONS = "radio_navbeacon"
-var/const/RADIO_AIRLOCK = "radio_airlock"
-var/const/RADIO_SECBOT = "radio_secbot"
-var/const/RADIO_MULEBOT = "radio_mulebot"
-var/const/RADIO_MAGNETS = "radio_magnet"
-
-var/global/datum/controller/radio/radio_controller
-
-/hook/startup/proc/createRadioController()
- radio_controller = new /datum/controller/radio()
- return 1
-
-//callback used by objects to react to incoming radio signals
-/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
- return null
-
-//The global radio controller
-/datum/controller/radio
- var/list/datum/radio_frequency/frequencies = list()
-
-/datum/controller/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null)
- var/f_text = num2text(new_frequency)
- var/datum/radio_frequency/frequency = frequencies[f_text]
-
- if(!frequency)
- frequency = new
- frequency.frequency = new_frequency
- frequencies[f_text] = frequency
-
- frequency.add_listener(device, filter)
- return frequency
-
-/datum/controller/radio/proc/remove_object(obj/device, old_frequency)
- var/f_text = num2text(old_frequency)
- var/datum/radio_frequency/frequency = frequencies[f_text]
-
- if(frequency)
- frequency.remove_listener(device)
-
- if(frequency.devices.len == 0)
- qdel(frequency)
- frequencies -= f_text
-
- return 1
-
-/datum/controller/radio/proc/return_frequency(var/new_frequency as num)
- var/f_text = num2text(new_frequency)
- var/datum/radio_frequency/frequency = frequencies[f_text]
-
- if(!frequency)
- frequency = new
- frequency.frequency = new_frequency
- frequencies[f_text] = frequency
-
- return frequency
-
-/datum/radio_frequency
- var/frequency as num
- var/list/list/obj/devices = list()
-
-/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null)
- var/turf/start_point
- if(range)
- start_point = get_turf(source)
- if(!start_point)
- qdel(signal)
- return 0
- if (filter)
- send_to_filter(source, signal, filter, start_point, range)
- send_to_filter(source, signal, RADIO_DEFAULT, start_point, range)
- else
- //Broadcast the signal to everyone!
- for (var/next_filter in devices)
- send_to_filter(source, signal, next_filter, start_point, range)
-
-//Sends a signal to all machines belonging to a given filter. Should be called by post_signal()
-/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null)
- if (range && !start_point)
- return
-
- for(var/obj/device in devices[filter])
- if(device == source)
- continue
- if(range)
- var/turf/end_point = get_turf(device)
- if(!end_point)
- continue
- if(start_point.z!=end_point.z || get_dist(start_point, end_point) > range)
- continue
-
- device.receive_signal(signal, TRANSMISSION_RADIO, frequency)
-
-/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null)
- if (!filter)
- filter = RADIO_DEFAULT
- //log_debug("add_listener(device=[device],filter=[filter]) frequency=[frequency]")
- var/list/obj/devices_line = devices[filter]
- if (!devices_line)
- devices_line = new
- devices[filter] = devices_line
- devices_line+=device
-// var/list/obj/devices_line___ = devices[filter_str]
-// var/l = devices_line___.len
- //log_debug("DEBUG: devices_line.len=[devices_line.len]")
- //log_debug("DEBUG: devices(filter_str).len=[l]")
-
-/datum/radio_frequency/proc/remove_listener(obj/device)
- for (var/devices_filter in devices)
- var/list/devices_line = devices[devices_filter]
- devices_line-=device
- while (null in devices_line)
- devices_line -= null
- if (devices_line.len==0)
- devices -= devices_filter
- del(devices_line)
-
-/datum/signal
- var/obj/source
-
- var/transmission_method = 0 //unused at the moment
- //0 = wire
- //1 = radio transmission
- //2 = subspace transmission
-
- var/list/data = list()
- var/encryption
-
- var/frequency = 0
-
-/datum/signal/proc/copy_from(datum/signal/model)
- source = model.source
- transmission_method = model.transmission_method
- data = model.data
- encryption = model.encryption
- frequency = model.frequency
-
-/datum/signal/proc/debug_print()
- if (source)
- . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n"
- else
- . = "signal = {source = '[source]' ()\n"
- for (var/i in data)
- . += "data\[\"[i]\"\] = \"[data[i]]\"\n"
- if(islist(data[i]))
- var/list/L = data[i]
- for(var/t in L)
- . += "data\[\"[i]\"\] list has: [t]"
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 1c874a92e47..97f614c50f5 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -253,6 +253,12 @@ var/list/gamemode_cache = list()
var/api_rate_limit = 50
var/list/api_rate_limit_whitelist = list()
+ // Subsystems.
+ var/obj/effect/statclick/statclick
+
+ // Master Controller settings.
+ var/mc_init_tick_limit = TICK_LIMIT_MC_INIT_DEFAULT
+
//UDP GELF Logging
var/log_gelf_enabled = 0
var/log_gelf_ip = ""
@@ -796,6 +802,10 @@ var/list/gamemode_cache = list()
if("api_rate_limit_whitelist")
config.api_rate_limit_whitelist = text2list(value, ";")
+
+ if("mc_ticklimit_init")
+ config.mc_init_tick_limit = text2num(value) || TICK_LIMIT_MC_INIT_DEFAULT
+
if("log_gelf_enabled")
config.log_gelf_enabled = text2num(value)
diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm
new file mode 100644
index 00000000000..71657470398
--- /dev/null
+++ b/code/controllers/controller.dm
@@ -0,0 +1,19 @@
+/datum/controller
+ var/name
+ // The object used for the clickable stat() button.
+ var/obj/effect/statclick/statclick
+
+/datum/controller/proc/Initialize()
+
+//cleanup actions
+/datum/controller/proc/Shutdown()
+
+/datum/controller/proc/Recover()
+
+/datum/controller/proc/stat_entry()
+
+// Called when SSexplosives begins processing explosions.
+/datum/controller/proc/ExplosionStart()
+
+// Called when SSexplosives finishes processing all queued explosions.
+/datum/controller/proc/ExplosionEnd()
diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm
deleted file mode 100644
index 6e379540873..00000000000
--- a/code/controllers/failsafe.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-var/datum/controller/failsafe/Failsafe
-
-/datum/controller/failsafe // This thing pretty much just keeps poking the master controller
- var/processing = 0
- var/processing_interval = 100 //poke the MC every 10 seconds
-
- var/MC_iteration = 0
- var/MC_defcon = 0 //alert level. For every poke that fails this is raised by 1. When it reaches 5 the MC is replaced with a new one. (effectively killing any master_controller.process() and starting a new one)
-
- var/lighting_iteration = 0
- var/lighting_defcon = 0 //alert level for lighting controller.
-
-/datum/controller/failsafe/New()
- //There can be only one failsafe. Out with the old in with the new (that way we can restart the Failsafe by spawning a new one)
- if(Failsafe != src)
- if(istype(Failsafe))
- qdel(Failsafe)
- Failsafe = src
- Failsafe.process()
-
-
-/datum/controller/failsafe/proc/process()
- processing = 1
- spawn(0)
- set background = 1
- while(1) //more efficient than recursivly calling ourself over and over. background = 1 ensures we do not trigger an infinite loop
- if(!master_controller) new /datum/controller/game_controller() //replace the missing master_controller! This should never happen.
-
- if(processing)
- if(lighting_controller.processing)
- if(lighting_iteration == lighting_controller.iteration) //master_controller hasn't finished processing in the defined interval
- switch(lighting_defcon)
- if(0 to 3)
- lighting_defcon++
- if(4)
- admins << "Warning. The Lighting Controller has not fired in the last [lighting_defcon*processing_interval] ticks. Automatic restart in [processing_interval] ticks. "
- lighting_defcon = 5
- if(5)
- admins << "Warning. The Lighting Controller has still not fired within the last [lighting_defcon*processing_interval] ticks. Killing and restarting... "
- new /datum/controller/lighting() //replace the old lighting_controller (hence killing the old one's process)
- lighting_controller.process() //Start it rolling again
- lighting_defcon = 0
- else
- lighting_defcon = 0
- lighting_iteration = lighting_controller.iteration
- else
- MC_defcon = 0
- lighting_defcon = 0
-
- sleep(processing_interval)
\ No newline at end of file
diff --git a/code/controllers/master/admin.dm b/code/controllers/master/admin.dm
new file mode 100644
index 00000000000..76e39a915c6
--- /dev/null
+++ b/code/controllers/master/admin.dm
@@ -0,0 +1,107 @@
+// Clickable stat() button.
+/obj/effect/statclick
+ name = "Initializing..."
+ var/target
+
+/obj/effect/statclick/New(loc, text, target)
+ ..()
+ name = text
+ src.target = target
+
+/obj/effect/statclick/proc/update(text)
+ name = text
+ return src
+
+/obj/effect/statclick/debug
+ var/class
+
+/obj/effect/statclick/debug/Click(location, control, params)
+ if(!usr.client.holder || !target)
+ return
+
+ var/permit_mark = TRUE
+
+ if(!class)
+ if(istype(target, /datum/controller/subsystem))
+ class = "subsystem"
+ else if(istype(target, /datum/controller))
+ class = "controller"
+ else if(istype(target, /datum))
+ class = "datum"
+ permit_mark = FALSE
+ else
+ class = "unknown"
+ permit_mark = FALSE
+
+ var/list/paramlist = params2list(params)
+ if (paramlist["shift"] && permit_mark && target)
+ if (target in usr.client.holder.watched_processes)
+ usr << span("notice", "[target] removed from watchlist.")
+ LAZYREMOVE(usr.client.holder.watched_processes, target)
+ else
+ usr << span("notice", "[target] added to watchlist.")
+ LAZYADD(usr.client.holder.watched_processes, target)
+ else
+ usr.client.debug_variables(target)
+ message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].")
+
+// Debug verbs.
+/client/proc/restart_controller(controller in list("Master", "Failsafe"))
+ set category = "Debug"
+ set name = "Restart Controller"
+ set desc = "Restart one of the various periodic loop controllers for the game (be careful!)"
+
+ if(!check_rights(R_DEBUG|R_SERVER))
+ return
+
+ switch(controller)
+ if("Master")
+ new/datum/controller/master()
+ feedback_add_details("admin_verb","RMC")
+ if("Failsafe")
+ new /datum/controller/failsafe()
+ feedback_add_details("admin_verb","RFailsafe")
+
+ message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
+
+// Subsystems that cmd_ss_panic can hard-restart.
+// *MUST* have New() use NEW_SS_GLOBAL.
+var/list/panic_targets = list(
+ "Garbage" = /datum/controller/subsystem/garbage_collector,
+ "Air" = /datum/controller/subsystem/air,
+ "Explosives" = /datum/controller/subsystem/explosives,
+ "Game Ticker" = /datum/controller/subsystem/ticker
+)
+
+// Subsystems that might do funny things or lose data if hard-restarted.
+// Makes subsystem require an additional confirmation to restart.
+var/list/panic_targets_data_loss = list(
+ "Game Ticker" = TRUE
+)
+
+/client/proc/cmd_ss_panic(controller in panic_targets)
+ set category = "Server"
+ set name = "Force-Restart Subsystem"
+ set desc = "Hard-restarts a subsystem. May break things, use with caution."
+
+ if (!check_rights(R_DEBUG | R_SERVER))
+ return
+
+ if (alert("Hard-Restart [controller]? Use with caution, this may break things.", "Subsystem Restart", "No", "No", "Yes") != "Yes")
+ usr << "Aborted."
+ return
+
+ // If it's marked as potentially causing data-loss (like SStimer), require another confirmation.
+ if (panic_targets_data_loss[controller])
+ if (alert("This subsystem ([controller]) may cause data loss or strange behavior if restarted! Continue?", "AAAAAA", "No", "No", "Yes") != "Yes")
+ usr << "Aborted."
+ return
+
+ log_and_message_admins(span("danger", "hard-restarted the [controller] subsystem."))
+ log_debug("SS PANIC: [controller] hard-restart by [usr]!")
+
+ // NEW_SS_GLOBAL will handle destruction of old controller & data transfer, just create a new one and add it to the MC.
+ var/ctype = panic_targets[controller]
+ Master.subsystems += new ctype
+
+ sortTim(Master.subsystems, /proc/cmp_subsystem_display)
diff --git a/code/controllers/master/failsafe.dm b/code/controllers/master/failsafe.dm
new file mode 100644
index 00000000000..4040e981f7f
--- /dev/null
+++ b/code/controllers/master/failsafe.dm
@@ -0,0 +1,106 @@
+ /**
+ * Failsafe
+ *
+ * Pretty much pokes the MC to make sure it's still alive.
+ **/
+
+#define FAILSAFE_MSG(msg) admin_notice("FAILSAFE: [msg] ", R_DEBUG|R_ADMIN|R_DEV)
+
+var/datum/controller/failsafe/Failsafe
+
+/datum/controller/failsafe // This thing pretty much just keeps poking the master controller
+ name = "Failsafe"
+
+ // The length of time to check on the MC (in deciseconds).
+ // Set to 0 to disable.
+ var/processing_interval = 20
+ // The alert level. For every failed poke, we drop a DEFCON level. Once we hit DEFCON 1, restart the MC.
+ var/defcon = 5
+ //the world.time of the last check, so the mc can restart US if we hang.
+ // (Real friends look out for *eachother*)
+ var/lasttick = 0
+
+ // Track the MC iteration to make sure its still on track.
+ var/master_iteration = 0
+
+/datum/controller/failsafe/New()
+ // Highlander-style: there can only be one! Kill off the old and replace it with the new.
+ if(Failsafe != src)
+ if(istype(Failsafe))
+ qdel(Failsafe)
+ Failsafe = src
+ Initialize()
+
+/datum/controller/failsafe/Initialize()
+ set waitfor = 0
+ Failsafe.Loop()
+ qdel(Failsafe) //when Loop() returns, we delete ourselves and let the mc recreate us
+
+/datum/controller/failsafe/Destroy()
+ ..()
+ return QDEL_HINT_HARDDEL_NOW
+
+/datum/controller/failsafe/proc/Loop()
+ while(1)
+ lasttick = world.time
+ if(!Master)
+ // Replace the missing Master! This should never, ever happen.
+ new /datum/controller/master()
+ // Only poke it if overrides are not in effect.
+ if(processing_interval > 0)
+ if(Master.processing && Master.iteration)
+ // Check if processing is done yet.
+ if(Master.iteration == master_iteration)
+ switch(defcon)
+ if(4,5)
+ --defcon
+ if(3)
+ FAILSAFE_MSG("Notice: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks.")
+ --defcon
+ if(2)
+ FAILSAFE_MSG("Warning: DEFCON [defcon_pretty()]. The Master Controller has not fired in the last [(5-defcon) * processing_interval] ticks. Automatic restart in [processing_interval] ticks.")
+ --defcon
+ if(1)
+
+ FAILSAFE_MSG("Warning: DEFCON [defcon_pretty()]. The Master Controller has still not fired within the last [(5-defcon) * processing_interval] ticks. Killing and restarting...")
+ log_failsafe("MC has not fired within last [(5-defcon) * processing_interval] ticks, killing and restarting.")
+ --defcon
+ var/rtn = Recreate_MC()
+ if(rtn > 0)
+ defcon = 4
+ master_iteration = 0
+ log_failsafe("MC restarted successfully.")
+ FAILSAFE_MSG("Master Controller restarted successfully!")
+ else if(rtn < 0)
+ log_failsafe("Could not restart MC, runtime encountered. Entering defcon 0!")
+ FAILSAFE_MSG("ERROR: DEFCON [defcon_pretty()]. Unable to restart Master Controller, runtime encountered. Silently retrying.")
+ //if the return number was 0, it just means the mc was restarted too recently, and it just needs some time before we try again
+ //no need to handle that specially when defcon 0 can handle it
+ if(0) //DEFCON 0! (mc failed to restart)
+ var/rtn = Recreate_MC()
+ if(rtn > 0)
+ defcon = 4
+ master_iteration = 0
+ log_failsafe("MC restarted successfully.")
+ FAILSAFE_MSG("Master Controller restarted successfully!")
+ else
+ defcon = min(defcon + 1,5)
+ master_iteration = Master.iteration
+ if (defcon <= 1)
+ sleep(processing_interval*2)
+ else
+ sleep(processing_interval)
+ else
+ defcon = 5
+ sleep(initial(processing_interval))
+
+/datum/controller/failsafe/proc/defcon_pretty()
+ return defcon
+
+/datum/controller/failsafe/stat_entry()
+ if(!statclick)
+ statclick = new/obj/effect/statclick/debug(null, "Initializing...", src)
+
+ stat("Failsafe Controller:", statclick.update("Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])"))
+
+#undef FAILSAFE_MSG
diff --git a/code/controllers/master/master.dm b/code/controllers/master/master.dm
new file mode 100644
index 00000000000..025627fee50
--- /dev/null
+++ b/code/controllers/master/master.dm
@@ -0,0 +1,550 @@
+ /**
+ * StonedMC
+ *
+ * Designed to properly split up a given tick among subsystems
+ * Note: if you read parts of this code and think "why is it doing it that way"
+ * Odds are, there is a reason
+ *
+ **/
+var/datum/controller/master/Master = new()
+var/MC_restart_clear = 0
+var/MC_restart_timeout = 0
+var/MC_restart_count = 0
+
+
+//current tick limit, assigned by the queue controller before running a subsystem.
+//used by check_tick as well so that the procs subsystems call can obey that SS's tick limits
+var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
+
+/datum/controller/master
+ name = "Master"
+
+ // Are we processing (higher values increase the processing delay by n ticks)
+ var/processing = 1
+ // How many times have we ran
+ var/iteration = 0
+
+ // world.time of last fire, for tracking lag outside of the mc
+ var/last_run
+
+ // List of subsystems to process().
+ var/list/subsystems
+
+ // Vars for keeping track of tick drift.
+ var/init_timeofday
+ var/init_time
+ var/tickdrift = 0
+
+ var/sleep_delta
+
+ var/make_runtime = 0
+
+ var/initialization_time_taken
+ var/initializations_finished_with_no_players_logged_in //I wonder what this could be?
+ // Has round started? (So we know what subsystems to run)
+ var/round_started = 0
+
+ var/initializing = FALSE
+
+ // The type of the last subsystem to be process()'d.
+ var/last_type_processed
+
+ var/datum/controller/subsystem/queue_head //Start of queue linked list
+ var/datum/controller/subsystem/queue_tail //End of queue linked list (used for appending to the list)
+ var/queue_priority_count = 0 //Running total so that we don't have to loop thru the queue each run to split up the tick
+ var/queue_priority_count_bg = 0 //Same, but for background subsystems
+
+/datum/controller/master/New()
+ // Highlander-style: there can only be one! Kill off the old and replace it with the new.
+ subsystems = list()
+ if (Master != src)
+ if (istype(Master))
+ Recover()
+ qdel(Master)
+ else
+ init_subtypes(/datum/controller/subsystem, subsystems)
+ Master = src
+
+/datum/controller/master/Destroy()
+ ..()
+ // Tell qdel() to Del() this object.
+ return QDEL_HINT_HARDDEL_NOW
+
+/datum/controller/master/Shutdown()
+ processing = FALSE
+ for(var/datum/controller/subsystem/ss in subsystems)
+ ss.Shutdown()
+
+// Returns 1 if we created a new mc, 0 if we couldn't due to a recent restart,
+// -1 if we encountered a runtime trying to recreate it
+/proc/Recreate_MC()
+ . = -1 //so if we runtime, things know we failed
+ if (world.time < MC_restart_timeout)
+ return 0
+ if (world.time < MC_restart_clear)
+ MC_restart_count *= 0.5
+
+ var/delay = 50 * ++MC_restart_count
+ MC_restart_timeout = world.time + delay
+ MC_restart_clear = world.time + (delay * 2)
+ Master.processing = 0 //stop ticking this one
+ try
+ new/datum/controller/master()
+ catch
+ return -1
+ return 1
+
+
+/datum/controller/master/Recover()
+ var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n"
+ for (var/varname in Master.vars)
+ switch (varname)
+ if("name", "tag", "bestF", "type", "parent_type", "vars", "statclick") // Built-in junk.
+ continue
+ else
+ var/varval = Master.vars[varname]
+ if (istype(varval, /datum)) // Check if it has a type var.
+ var/datum/D = varval
+ msg += "\t [varname] = [D]([D.type])\n"
+ else
+ msg += "\t [varname] = [varval]\n"
+ log_mc(msg)
+
+ var/datum/controller/subsystem/BadBoy = Master.last_type_processed
+ var/FireHim = FALSE
+ if(istype(BadBoy))
+ msg = null
+ switch(++BadBoy.failure_strikes)
+ if(2)
+ msg = "The [BadBoy.name] subsystem was the last to fire for 2 controller restarts. It will be recovered now and disabled if it happens again."
+ FireHim = TRUE
+ if(3)
+ msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined."
+ BadBoy.flags |= SS_NO_FIRE
+ if(msg)
+ admin_notice("[msg] ", R_DEBUG | R_DEV)
+ log_mc(msg)
+
+ if (istype(Master.subsystems))
+ if(FireHim)
+ Master.subsystems += new BadBoy.type //NEW_SS_GLOBAL will remove the old one
+ subsystems = Master.subsystems
+ StartProcessing(10)
+ else
+ to_chat(world, "The Master Controller is having some issues, we will need to re-initialize EVERYTHING ")
+ Initialize(20, TRUE)
+
+// Please don't stuff random bullshit here,
+// Make a subsystem, give it the SS_NO_FIRE flag, and do your work in it's Initialize()
+/datum/controller/master/Initialize(delay, init_sss)
+ set waitfor = 0
+
+ if(delay)
+ sleep(delay)
+
+ if(init_sss)
+ init_subtypes(/datum/controller/subsystem, subsystems)
+
+ world.log << "Initializing subsystems..."
+ log_mc("Initializing subsystems...")
+
+ initializing = TRUE
+
+ // Sort subsystems by init_order, so they initialize in the correct order.
+ sortTim(subsystems, /proc/cmp_subsystem_init)
+
+ var/start_timeofday = REALTIMEOFDAY
+ // Initialize subsystems.
+ CURRENT_TICKLIMIT = TICK_LIMIT_MC_INIT
+ for (var/datum/controller/subsystem/SS in subsystems)
+ if (SS.flags & SS_NO_INIT)
+ continue
+ SS.StartInitialize(REALTIMEOFDAY)
+ CHECK_TICK
+ CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
+ var/time = (REALTIMEOFDAY - start_timeofday) / 10
+
+ initializing = FALSE
+ initialization_time_taken = time
+
+ var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!"
+ log_mc(msg)
+ admin_notice(span("danger", msg), R_DEBUG)
+ world.log << msg
+
+ // Sort subsystems by display setting for easy access.
+ sortTim(subsystems, /proc/cmp_subsystem_display)
+ // Set world options.
+#ifndef UNIT_TEST
+ world.sleep_offline = 1
+#endif
+ world.tick_lag = config.Ticklag
+ var/initialized_tod = REALTIMEOFDAY
+ sleep(1)
+ initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10
+ // Loop.
+ Master.StartProcessing(0)
+
+// Notify the MC that the round has started.
+/datum/controller/master/proc/RoundStart()
+ round_started = 1
+ var/timer = world.time
+ for (var/datum/controller/subsystem/SS in subsystems)
+ if (SS.flags & SS_FIRE_IN_LOBBY || SS.flags & SS_TICKER)
+ continue //already firing
+ // Stagger subsystems.
+ timer += world.tick_lag * rand(1, 5)
+ SS.next_fire = timer
+
+// Starts the mc, and sticks around to restart it if the loop ever ends.
+/datum/controller/master/proc/StartProcessing(delay)
+ set waitfor = 0
+ if(delay)
+ sleep(delay)
+ var/rtn = Loop()
+ if (rtn > 0 || processing < 0)
+ return //this was suppose to happen.
+ //loop ended, restart the mc
+ log_game("MC crashed or runtimed, restarting")
+ message_admins("MC crashed or runtimed, restarting")
+ var/rtn2 = Recreate_MC()
+ if (rtn2 <= 0)
+ log_game("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now")
+ message_admins("Failed to recreate MC (Error code: [rtn2]), it's up to the failsafe now")
+ Failsafe.defcon = 2
+
+// Main loop.
+/datum/controller/master/proc/Loop()
+ . = -1
+ //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because
+ // local vars rock
+
+ // Schedule the first run of the Subsystems.
+ round_started = world.has_round_started()
+ //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed)
+ var/list/tickersubsystems = list()
+ var/list/normalsubsystems = list()
+ var/list/lobbysubsystems = list()
+ var/timer = world.time
+ for (var/thing in subsystems)
+ var/datum/controller/subsystem/SS = thing
+ if (SS.flags & SS_NO_FIRE)
+ continue
+ SS.queued_time = 0
+ SS.queue_next = null
+ SS.queue_prev = null
+ SS.state = SS_IDLE
+ if (SS.flags & SS_TICKER)
+ tickersubsystems += SS
+ timer += world.tick_lag * rand(1, 5)
+ SS.next_fire = timer
+ continue
+ if (SS.flags & SS_FIRE_IN_LOBBY)
+ lobbysubsystems += SS
+ timer += world.tick_lag * rand(1, 5)
+ SS.next_fire = timer
+ else if (round_started)
+ timer += world.tick_lag * rand(1, 5)
+ SS.next_fire = timer
+ normalsubsystems += SS
+
+ queue_head = null
+ queue_tail = null
+ //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue
+ //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add)
+ sortTim(tickersubsystems, /proc/cmp_subsystem_priority)
+ sortTim(normalsubsystems, /proc/cmp_subsystem_priority)
+ sortTim(lobbysubsystems, /proc/cmp_subsystem_priority)
+
+ normalsubsystems += tickersubsystems
+ lobbysubsystems += tickersubsystems
+
+ init_timeofday = REALTIMEOFDAY
+ init_time = world.time
+
+ iteration = 1
+ var/error_level = 0
+ var/sleep_delta = 0
+ var/list/subsystems_to_check
+ //the actual loop.
+ while (1)
+ tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag)))
+ if (processing <= 0)
+ CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
+ sleep(10)
+ continue
+
+ //if there are mutiple sleeping procs running before us hogging the cpu, we have to run later
+ // because sleeps are processed in the order received, so longer sleeps are more likely to run first
+ if (world.tick_usage > TICK_LIMIT_MC)
+ sleep_delta += 2
+ CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5)
+ sleep(world.tick_lag * (processing + sleep_delta))
+ continue
+
+ sleep_delta = MC_AVERAGE_FAST(sleep_delta, 0)
+ if (last_run + (world.tick_lag * processing) > world.time)
+ sleep_delta += 1
+ if (world.tick_usage > (TICK_LIMIT_MC*0.5))
+ sleep_delta += 1
+
+ if (make_runtime)
+ var/datum/controller/subsystem/SS
+ SS.can_fire = 0
+ if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time))
+ new/datum/controller/failsafe() // (re)Start the failsafe.
+ if (!queue_head || !(iteration % 3))
+ if (round_started)
+ subsystems_to_check = normalsubsystems
+ else
+ subsystems_to_check = lobbysubsystems
+ else
+ subsystems_to_check = tickersubsystems
+ if (CheckQueue(subsystems_to_check) <= 0)
+ if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems))
+ log_mc("SoftReset() failed, crashing")
+ return
+ if (!error_level)
+ iteration++
+ error_level++
+ CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
+ sleep(10)
+ continue
+
+ if (queue_head)
+ if (RunQueue() <= 0)
+ if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems))
+ log_mc("SoftReset() failed, crashing")
+ return
+ if (!error_level)
+ iteration++
+ error_level++
+ CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
+ sleep(10)
+ continue
+ error_level--
+ if (!queue_head) //reset the counts if the queue is empty, in the off chance they get out of sync
+ queue_priority_count = 0
+ queue_priority_count_bg = 0
+
+ iteration++
+ last_run = world.time
+ src.sleep_delta = MC_AVERAGE_FAST(src.sleep_delta, sleep_delta)
+ CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.25) //reserve the tail 1/4 of the next tick for the mc.
+ sleep(world.tick_lag * (processing + sleep_delta))
+
+
+
+
+// This is what decides if something should run.
+/datum/controller/master/proc/CheckQueue(list/subsystemstocheck)
+ . = 0 //so the mc knows if we runtimed
+
+ //we create our variables outside of the loops to save on overhead
+ var/datum/controller/subsystem/SS
+ var/SS_flags
+
+ for (var/thing in subsystemstocheck)
+ if (!thing)
+ subsystemstocheck -= thing
+ SS = thing
+ if (SS.state != SS_IDLE)
+ continue
+ if (SS.can_fire <= 0)
+ continue
+ if (SS.suspended > 0)
+ continue
+ if (SS.next_fire > world.time)
+ continue
+ SS_flags = SS.flags
+ if (SS_flags & SS_NO_FIRE)
+ subsystemstocheck -= SS
+ continue
+ if (!(SS_flags & SS_TICKER) && (SS_flags & SS_KEEP_TIMING) && SS.last_fire + (SS.wait * 0.75) > world.time)
+ continue
+ SS.enqueue()
+ . = 1
+
+
+// Run thru the queue of subsystems to run, running them while balancing out their allocated tick precentage
+/datum/controller/master/proc/RunQueue()
+ . = 0
+ var/datum/controller/subsystem/queue_node
+ var/queue_node_flags
+ var/queue_node_priority
+ var/queue_node_paused
+
+ var/current_tick_budget
+ var/tick_precentage
+ var/tick_remaining
+ var/ran = TRUE //this is right
+ var/ran_non_ticker = FALSE
+ var/bg_calc //have we swtiched current_tick_budget to background mode yet?
+ var/tick_usage
+
+ //keep running while we have stuff to run and we haven't gone over a tick
+ // this is so subsystems paused eariler can use tick time that later subsystems never used
+ while (ran && queue_head && world.tick_usage < TICK_LIMIT_MC)
+ ran = FALSE
+ bg_calc = FALSE
+ current_tick_budget = queue_priority_count
+ queue_node = queue_head
+ while (queue_node)
+ if (ran && world.tick_usage > TICK_LIMIT_RUNNING)
+ break
+
+ queue_node_flags = queue_node.flags
+ queue_node_priority = queue_node.queued_priority
+
+ //super special case, subsystems where we can't make them pause mid way through
+ //if we can't run them this tick (without going over a tick)
+ //we bump up their priority and attempt to run them next tick
+ //(unless we haven't even ran anything this tick, since its unlikely they will ever be able run
+ // in those cases, so we just let them run)
+ if (queue_node_flags & SS_NO_TICK_CHECK)
+ if (queue_node.tick_usage > TICK_LIMIT_RUNNING - world.tick_usage && ran_non_ticker)
+ queue_node.queued_priority += queue_priority_count * 0.10
+ queue_priority_count -= queue_node_priority
+ queue_priority_count += queue_node.queued_priority
+ current_tick_budget -= queue_node_priority
+ queue_node = queue_node.queue_next
+ continue
+
+ if ((queue_node_flags & SS_BACKGROUND) && !bg_calc)
+ current_tick_budget = queue_priority_count_bg
+ bg_calc = TRUE
+
+ tick_remaining = TICK_LIMIT_RUNNING - world.tick_usage
+
+ if (current_tick_budget > 0 && queue_node_priority > 0)
+ tick_precentage = tick_remaining / (current_tick_budget / queue_node_priority)
+ else
+ tick_precentage = tick_remaining
+
+ CURRENT_TICKLIMIT = world.tick_usage + tick_precentage
+
+ if (!(queue_node_flags & SS_TICKER))
+ ran_non_ticker = TRUE
+ ran = TRUE
+ tick_usage = world.tick_usage
+ queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING)
+ last_type_processed = queue_node
+
+ queue_node.state = SS_RUNNING
+
+ var/state = queue_node.ignite(queue_node_paused)
+ if (state == SS_RUNNING)
+ state = SS_IDLE
+ current_tick_budget -= queue_node_priority
+ tick_usage = world.tick_usage - tick_usage
+
+ if (tick_usage < 0)
+ tick_usage = 0
+
+ queue_node.state = state
+
+ if (state == SS_PAUSED)
+ queue_node.paused_ticks++
+ queue_node.paused_tick_usage += tick_usage
+ queue_node = queue_node.queue_next
+ continue
+
+ queue_node.ticks = MC_AVERAGE(queue_node.ticks, queue_node.paused_ticks)
+ tick_usage += queue_node.paused_tick_usage
+
+ queue_node.tick_usage = MC_AVERAGE_FAST(queue_node.tick_usage, tick_usage)
+
+ queue_node.cost = MC_AVERAGE_FAST(queue_node.cost, TICK_DELTA_TO_MS(tick_usage))
+ queue_node.paused_ticks = 0
+ queue_node.paused_tick_usage = 0
+
+ if (queue_node_flags & SS_BACKGROUND) //update our running total
+ queue_priority_count_bg -= queue_node_priority
+ else
+ queue_priority_count -= queue_node_priority
+
+ queue_node.last_fire = world.time
+ queue_node.times_fired++
+
+ if (queue_node_flags & SS_TICKER)
+ queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait)
+ else if (queue_node_flags & SS_POST_FIRE_TIMING)
+ queue_node.next_fire = world.time + queue_node.wait
+ else if (queue_node_flags & SS_KEEP_TIMING)
+ queue_node.next_fire += queue_node.wait
+ else
+ queue_node.next_fire = queue_node.queued_time + queue_node.wait
+
+ queue_node.queued_time = 0
+
+ //remove from queue
+ queue_node.dequeue()
+
+ queue_node = queue_node.queue_next
+
+ . = 1
+
+//resets the queue, and all subsystems, while filtering out the subsystem lists
+// called if any mc's queue procs runtime or exit improperly.
+/datum/controller/master/proc/SoftReset(list/ticker_SS, list/normal_SS, list/lobby_SS)
+ . = 0
+ log_mc("SoftReset called, resetting MC queue state.")
+ if (!istype(subsystems) || !istype(ticker_SS) || !istype(normal_SS) || !istype(lobby_SS))
+ log_mc("SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[normal_SS]' '[lobby_SS]' Crashing!")
+ return
+ var/subsystemstocheck = subsystems + ticker_SS + normal_SS + lobby_SS
+
+ for (var/thing in subsystemstocheck)
+ var/datum/controller/subsystem/SS = thing
+ if (!SS || !istype(SS))
+ //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents
+ subsystems -= list(SS)
+ ticker_SS -= list(SS)
+ normal_SS -= list(SS)
+ lobby_SS -= list(SS)
+ log_mc("SoftReset: Found bad entry in subsystem list, '[SS]'")
+ continue
+ if (SS.queue_next && !istype(SS.queue_next))
+ log_mc("SoftReset: Found bad data in subsystem queue, queue_next = '[SS.queue_next]'")
+ SS.queue_next = null
+ if (SS.queue_prev && !istype(SS.queue_prev))
+ log_mc("SoftReset: Found bad data in subsystem queue, queue_prev = '[SS.queue_prev]'")
+ SS.queue_prev = null
+ SS.queued_priority = 0
+ SS.queued_time = 0
+ SS.state = SS_IDLE
+ if (queue_head && !istype(queue_head))
+ log_mc("SoftReset: Found bad data in subsystem queue, queue_head = '[queue_head]'")
+ queue_head = null
+ if (queue_tail && !istype(queue_tail))
+ log_mc("SoftReset: Found bad data in subsystem queue, queue_tail = '[queue_tail]'")
+ queue_tail = null
+ queue_priority_count = 0
+ queue_priority_count_bg = 0
+ log_mc("SoftReset: Finished.")
+ . = 1
+
+
+
+/datum/controller/master/stat_entry()
+ if(!statclick)
+ statclick = new/obj/effect/statclick/debug(null, "Initializing...", src)
+
+ stat("Byond:", "(TickLag:[world.tick_lag]|FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))")
+ stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration]) (SleepDelta:[round(sleep_delta, 0.1)])"))
+
+
+/datum/controller/master/ExplosionStart()
+ for (var/thing in subsystems)
+ var/datum/controller/subsystem/SS = thing
+ SS.ExplosionStart()
+
+/datum/controller/master/ExplosionEnd()
+ for (var/thing in subsystems)
+ var/datum/controller/subsystem/SS = thing
+ SS.ExplosionEnd()
+
+/world/proc/has_round_started()
+ if (SSticker.current_state >= GAME_STATE_PLAYING)
+ return TRUE
+ return FALSE
diff --git a/code/controllers/master/subsystem.dm b/code/controllers/master/subsystem.dm
new file mode 100644
index 00000000000..c327db5cec3
--- /dev/null
+++ b/code/controllers/master/subsystem.dm
@@ -0,0 +1,276 @@
+
+
+/datum/controller/subsystem
+ // Metadata; you should define these.
+ name = "fire coderbus" //name of the subsystem
+ var/init_order = SS_INIT_MISC //order of initialization. Higher numbers are initialized first, lower numbers later. Can be decimal and negative values.
+ var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
+ var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep
+
+ var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again)
+
+ //set to 0 to prevent fire() calls, mostly for admin use or subsystems that may be resumed later
+ // use the SS_NO_FIRE flag instead for systems that never fire to keep it from even being added to the list
+ var/can_fire = TRUE
+ // Similar to can_fire, but intended explicitly for subsystems that are asleep. Using this var instead of can_fire
+ // allows admins to disable subsystems without them re-enabling themselves.
+ var/suspended = FALSE
+
+ // Bookkeeping variables; probably shouldn't mess with these.
+ var/last_fire = 0 //last world.time we called fire()
+ var/next_fire = 0 //scheduled world.time for next fire()
+ var/cost = 0 //average time to execute
+ var/tick_usage = 0 //average tick usage
+ var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc.
+ var/paused_ticks = 0 //ticks this ss is taking to run right now.
+ var/paused_tick_usage //total tick_usage of all of our runs while pausing this run
+ var/ticks = 1 //how many ticks does this ss take to run on avg.
+ var/times_fired = 0 //number of times we have called fire()
+ var/queued_time = 0 //time we entered the queue, (for timing and priority reasons)
+ var/queued_priority //we keep a running total to make the math easier, if priority changes mid-fire that would break our running total, so we store it here
+
+ // Subsystem startup accounting.
+ var/init_state = FALSE
+ var/init_time = 0
+ var/init_start = 0
+ var/init_finish
+
+ //linked list stuff for the queue
+ var/datum/controller/subsystem/queue_next
+ var/datum/controller/subsystem/queue_prev
+
+ var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out!
+
+// Used to initialize the subsystem BEFORE the map has loaded
+/datum/controller/subsystem/New()
+
+//This is used so the mc knows when the subsystem sleeps. do not override.
+/datum/controller/subsystem/proc/ignite(resumed = 0)
+ set waitfor = 0
+ . = SS_SLEEPING
+ fire(resumed)
+ . = state
+ if (state == SS_SLEEPING)
+ state = SS_IDLE
+ if (state == SS_PAUSING)
+ var/QT = queued_time
+ enqueue()
+ state = SS_PAUSED
+ queued_time = QT
+
+//previously, this would have been named 'process()' but that name is used everywhere for different things!
+//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds.
+//Sleeping in here prevents future fires until returned.
+/datum/controller/subsystem/proc/fire(resumed = 0)
+ flags |= SS_NO_FIRE
+ throw EXCEPTION("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.")
+
+/datum/controller/subsystem/Destroy()
+ dequeue()
+ can_fire = 0
+ flags |= SS_NO_FIRE
+ Master.subsystems -= src
+
+ return QDEL_HINT_HARDDEL_NOW
+
+//Queue it to run.
+// (we loop thru a linked list until we get to the end or find the right point)
+// (this lets us sort our run order correctly without having to re-sort the entire already sorted list)
+/datum/controller/subsystem/proc/enqueue()
+ var/SS_priority = priority
+ var/SS_flags = flags
+ var/datum/controller/subsystem/queue_node
+ var/queue_node_priority
+ var/queue_node_flags
+
+ for (queue_node = Master.queue_head; queue_node; queue_node = queue_node.queue_next)
+ queue_node_priority = queue_node.queued_priority
+ queue_node_flags = queue_node.flags
+
+ if (queue_node_flags & SS_TICKER)
+ if (!(SS_flags & SS_TICKER))
+ continue
+ if (queue_node_priority < SS_priority)
+ break
+
+ else if (queue_node_flags & SS_BACKGROUND)
+ if (!(SS_flags & SS_BACKGROUND))
+ break
+ if (queue_node_priority < SS_priority)
+ break
+
+ else
+ if (SS_flags & SS_BACKGROUND)
+ continue
+ if (SS_flags & SS_TICKER)
+ break
+ if (queue_node_priority < SS_priority)
+ break
+
+ queued_time = world.time
+ queued_priority = SS_priority
+ state = SS_QUEUED
+ if (SS_flags & SS_BACKGROUND) //update our running total
+ Master.queue_priority_count_bg += SS_priority
+ else
+ Master.queue_priority_count += SS_priority
+
+ queue_next = queue_node
+ if (!queue_node)//we stopped at the end, add to tail
+ queue_prev = Master.queue_tail
+ if (Master.queue_tail)
+ Master.queue_tail.queue_next = src
+ else //empty queue, we also need to set the head
+ Master.queue_head = src
+ Master.queue_tail = src
+
+ else if (queue_node == Master.queue_head)//insert at start of list
+ Master.queue_head.queue_prev = src
+ Master.queue_head = src
+ queue_prev = null
+ else
+ queue_node.queue_prev.queue_next = src
+ queue_prev = queue_node.queue_prev
+ queue_node.queue_prev = src
+
+
+/datum/controller/subsystem/proc/dequeue()
+ if (queue_next)
+ queue_next.queue_prev = queue_prev
+ if (queue_prev)
+ queue_prev.queue_next = queue_next
+ if (src == Master.queue_tail)
+ Master.queue_tail = queue_prev
+ if (src == Master.queue_head)
+ Master.queue_head = queue_next
+ queued_time = 0
+ if (state == SS_QUEUED)
+ state = SS_IDLE
+
+
+/datum/controller/subsystem/proc/pause()
+ . = 1
+ if (state == SS_RUNNING)
+ state = SS_PAUSED
+ else if (state == SS_SLEEPING)
+ state = SS_PAUSING
+
+// Do not override - Wrapper for Initialize() so initialization status can be shown for subsystems that do not return parent.
+/datum/controller/subsystem/proc/StartInitialize(timeofday)
+ init_state = SS_INITSTATE_STARTED
+ init_start = timeofday
+ . = Initialize(timeofday)
+ init_finish = REALTIMEOFDAY
+ if (!init_time)
+ init_time = (init_finish - init_start) / 10
+ init_state = SS_INITSTATE_DONE
+
+//used to initialize the subsystem AFTER the map has loaded
+/datum/controller/subsystem/Initialize(start_timeofday, silent = FALSE)
+ var/time = (REALTIMEOFDAY - start_timeofday) / 10
+ init_time = time
+ var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!"
+ if (!silent)
+ admin_notice(span("danger", msg), R_DEBUG)
+ world.log << "SS Init: [msg]"
+ log_ss_init(msg)
+ return time
+
+//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc.
+/datum/controller/subsystem/stat_entry(msg)
+ if(!statclick)
+ statclick = new/obj/effect/statclick/debug(null, "Initializing...", src)
+
+ var/title = name
+ if (Master.initializing)
+ msg = "[stat_entry_init()]\t[msg]"
+ var/letter = init_state_letter()
+ if (letter)
+ title = "\[[letter]] [title]"
+ else
+ msg = "[stat_entry_run()]\t[msg]"
+ if (can_fire && !suspended && !(flags & SS_NO_FIRE))
+ title = "\[[state_letter()]] [title]"
+
+ stat(title, statclick.update(msg))
+
+// Generates the message shown before a subsystem during MC initialization.
+/datum/controller/subsystem/proc/stat_entry_init()
+ if (init_state == SS_INITSTATE_DONE)
+ . = "DONE ([init_time]s)"
+ else if (flags & SS_NO_INIT)
+ . = "NO INIT"
+ else if (init_state == SS_INITSTATE_STARTED)
+ if (init_start)
+ . = "LOAD ([(REALTIMEOFDAY - init_start)/10]s)"
+ else
+ . = "LOAD"
+ else
+ . = "WAIT"
+
+// Generates the message shown before a subsystem during normal MC operation.
+/datum/controller/subsystem/proc/stat_entry_run()
+ if (flags & SS_NO_FIRE)
+ . = "NO FIRE"
+ else if (can_fire && !suspended)
+ . = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]"
+ else if (!can_fire)
+ . = "OFFLINE"
+ else
+ . = "SUSPEND"
+
+/datum/controller/subsystem/proc/init_state_letter()
+ if (flags & SS_NO_INIT)
+ return
+ switch (init_state)
+ if (SS_INITSTATE_NONE)
+ . = "W"
+ if (SS_INITSTATE_STARTED)
+ . = "L"
+ if (SS_INITSTATE_DONE)
+ . = "D"
+
+/datum/controller/subsystem/proc/state_letter()
+ switch (state)
+ if (SS_RUNNING)
+ . = "R"
+ if (SS_QUEUED)
+ . = "Q"
+ if (SS_PAUSED, SS_PAUSING)
+ . = "P"
+ if (SS_SLEEPING)
+ . = "S"
+ if (SS_IDLE)
+ . = " "
+
+//could be used to postpone a costly subsystem for (default one) var/cycles, cycles
+//for instance, during cpu intensive operations like explosions
+/datum/controller/subsystem/proc/postpone(cycles = 1)
+ if(next_fire - world.time < wait)
+ next_fire += (wait*cycles)
+
+//usually called via datum/controller/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash)
+//should attempt to salvage what it can from the old instance of subsystem
+/datum/controller/subsystem/Recover()
+
+// Admin-disables this subsystem. Will show as OFFLINE in MC panel.
+/datum/controller/subsystem/proc/disable()
+ can_fire = FALSE
+
+// Admin-enables this subsystem.
+/datum/controller/subsystem/proc/enable()
+ if (!can_fire)
+ next_fire = world.time + wait
+ can_fire = TRUE
+
+// Suspends this subsystem. Functionally identical to disable(), but shows SUSPEND in MC panel.
+// Preferred over disable() for self-disabling subsystems.
+/datum/controller/subsystem/proc/suspend()
+ suspended = TRUE
+
+// Wakes a suspended subsystem.
+/datum/controller/subsystem/proc/wake()
+ if (suspended)
+ suspended = FALSE
+ if (can_fire)
+ next_fire = world.time + wait
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
deleted file mode 100644
index 2a16ab94e76..00000000000
--- a/code/controllers/master_controller.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-//simplified MC that is designed to fail when procs 'break'. When it fails it's just replaced with a new one.
-//It ensures master_controller.process() is never doubled up by killing the MC (hence terminating any of its sleeping procs)
-//WIP, needs lots of work still
-
-var/global/datum/controller/game_controller/master_controller //Set in world.New()
-
-var/global/controller_iteration = 0
-var/global/last_tick_duration = 0
-
-var/global/air_processing_killed = 0
-var/global/pipe_processing_killed = 0
-
-datum/controller/game_controller
- var/list/shuttle_list // For debugging and VV
-
-datum/controller/game_controller/New()
- //There can be only one master_controller. Out with the old and in with the new.
- if(master_controller != src)
- log_debug("Rebuilding Master Controller")
- if(istype(master_controller))
- qdel(master_controller)
- master_controller = src
-
- if(!job_master)
- job_master = new /datum/controller/occupations()
- job_master.SetupOccupations()
- job_master.LoadJobs("config/jobs.txt")
- admin_notice("Job setup complete ", R_DEBUG)
-
- if(!syndicate_code_phrase) syndicate_code_phrase = generate_code_phrase()
- if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
-
-datum/controller/game_controller/proc/setup()
- world.tick_lag = config.Ticklag
-
- spawn(20)
- createRandomZlevel()
-
- setup_objects()
- setupgenetics()
- SetupXenoarch()
-
- transfer_controller = new
-
-
-datum/controller/game_controller/proc/setup_objects()
- admin_notice("Initializing objects ", R_DEBUG)
- sleep(-1)
- objects_initialized = 1
- for(var/A in objects_init_list)
- var/atom/movable/object = A
- if(isnull(object.gcDestroyed))
- object.initialize()
-
- objects_init_list.Cut()
-
- admin_notice("Initializing areas ", R_DEBUG)
- sleep(-1)
- for(var/A in all_areas)
- var/area/area = A
- area.initialize()
-
- admin_notice("Initializing pipe networks ", R_DEBUG)
- sleep(-1)
- for(var/obj/machinery/atmospherics/machine in machines)
- machine.build_network()
-
- admin_notice("Initializing atmos machinery. ", R_DEBUG)
- sleep(-1)
- for(var/obj/machinery/atmospherics/unary/U in machines)
- if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
- var/obj/machinery/atmospherics/unary/vent_pump/T = U
- T.broadcast_status()
- else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
- var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
- T.broadcast_status()
-
-
- admin_notice(span("danger", "Caching space parallax."))
- create_global_parallax_icons()
- admin_notice(span("danger", "Done."))
-
- admin_notice(span("danger", "Setting up lighting."))
- initialize_lighting()
- admin_notice(span("danger", "Lighting Setup Completed."))
-
- //Spawn the contents of the cargo warehouse
- sleep(-1)
- spawn_cargo_stock()
-
- // Set up antagonists.
- populate_antag_type_list()
-
- //Set up spawn points.
- populate_spawn_points()
-
- // Setup laws.
- global.corp_regs = new
-
- admin_notice("Initializations complete. ", R_DEBUG)
- sleep(-1)
diff --git a/code/controllers/subsystems.dm b/code/controllers/subsystems.dm
deleted file mode 100644
index 11025d8d535..00000000000
--- a/code/controllers/subsystems.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
-
-/datum/subsystem
- //things you will want to define
- var/name //name of the subsystem
- var/priority = 0 //priority affects order of initialization. Higher priorities are initialized first, lower priorities later. Can be decimal and negative values.
- var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
-
- //things you will probably want to leave alone
- var/can_fire = 0 //prevent fire() calls
- var/last_fire = 0 //last world.time we called fire()
- var/next_fire = 0 //scheduled world.time for next fire()
- var/cpu = 0 //cpu-usage stats (somewhat vague)
- var/cost = 0 //average time to execute
- var/times_fired = 0 //number of times we have called fire()
-
-//used to initialize the subsystem BEFORE the map has loaded
-/datum/subsystem/New()
-
-//previously, this would have been named 'process()' but that name is used everywhere for different things!
-//fire() seems more suitable. This is the procedure that gets called every 'wait' deciseconds.
-//fire(), and the procs it calls, SHOULD NOT HAVE ANY SLEEP OPERATIONS in them!
-//YE BE WARNED!
-/datum/subsystem/proc/fire()
- can_fire = 0
-
-//used to initialize the subsystem AFTER the map has loaded
-/datum/subsystem/proc/Initialize(start_timeofday)
- var/time = (world.timeofday - start_timeofday) / 10
- var/msg = "Initialized [name] SubSystem within [time] seconds"
- world << "[msg] "
- world.log << msg
-
-//hook for printing stats to the "MC" statuspanel for admins to see performance and related stats etc.
-/datum/subsystem/proc/stat_entry()
- stat(name, "[round(cost,0.001)]ds\t(CPU:[round(cpu,1)]%)")
-
-//could be used to postpone a costly subsystem for one cycle
-//for instance, during cpu intensive operations like explosions
-/datum/subsystem/proc/postpone()
- if(next_fire - world.time < wait)
- next_fire += wait
-
-//usually called via datum/subsystem/New() when replacing a subsystem (i.e. due to a recurring crash)
-//should attempt to salvage what it can from the old instance of subsystem
-/datum/subsystem/proc/Recover()
diff --git a/code/controllers/subsystems/air.dm b/code/controllers/subsystems/air.dm
new file mode 100644
index 00000000000..c86c07ebb96
--- /dev/null
+++ b/code/controllers/subsystems/air.dm
@@ -0,0 +1,436 @@
+/var/datum/controller/subsystem/air/SSair
+
+/*
+
+Overview:
+ The air controller does everything. There are tons of procs in here.
+
+Class Vars:
+ zones - All zones currently holding one or more turfs.
+ edges - All processing edges.
+
+ tiles_to_update - Tiles scheduled to update next tick.
+ zones_to_update - Zones which have had their air changed and need air archival.
+ active_hotspots - All processing fire objects.
+
+ active_zones - The number of zones which were archived last tick. Used in debug verbs.
+ next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function.
+
+Class Procs:
+
+ mark_for_update(turf/T)
+ Adds the turf to the update list. When updated, update_air_properties() will be called.
+ When stuff changes that might affect airflow, call this. It's basically the only thing you need.
+
+ add_zone(zone/Z) and remove_zone(zone/Z)
+ Adds zones to the zones list. Does not mark them for update.
+
+ air_blocked(turf/A, turf/B)
+ Returns a bitflag consisting of:
+ AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass.
+ ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable.
+
+ has_valid_zone(turf/T)
+ Checks the presence and validity of T's zone.
+ May be called on unsimulated turfs, returning 0.
+
+ merge(zone/A, zone/B)
+ Called when zones have a direct connection and equivalent pressure and temperature.
+ Merges the zones to create a single zone.
+
+ connect(turf/simulated/A, turf/B)
+ Called by turf/update_air_properties(). The first argument must be simulated.
+ Creates a connection between A and B.
+
+ mark_zone_update(zone/Z)
+ Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever
+ air is returned from a simulated turf.
+
+ equivalent_pressure(zone/A, zone/B)
+ Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged.
+
+ get_edge(zone/A, zone/B)
+ get_edge(zone/A, turf/B)
+ Gets a valid connection_edge between A and B, creating a new one if necessary.
+
+ has_same_air(turf/A, turf/B)
+ Used to determine if an unsimulated edge represents a specific turf.
+ Simulated edges use connection_edge/contains_zone() for the same purpose.
+ Returns 1 if A has identical gases and temperature to B.
+
+ remove_edge(connection_edge/edge)
+ Called when an edge is erased. Removes it from processing.
+
+*/
+
+/datum/controller/subsystem/air
+ name = "Air"
+ priority = SS_PRIORITY_AIR
+ init_order = SS_INIT_AIR
+
+ //Geometry lists
+ var/list/zones = list()
+ var/list/edges = list()
+
+ //Geometry updates lists
+ var/list/tiles_to_update = list()
+ var/list/zones_to_update = list()
+ var/list/active_fire_zones = list()
+ var/list/active_hotspots = list()
+ var/list/active_edges = list()
+
+ var/tmp/list/deferred = list()
+ var/tmp/list/processing_edges
+ var/tmp/list/processing_fires
+ var/tmp/list/processing_hotspots
+ var/tmp/list/processing_zones
+
+ var/active_zones = 0
+ var/next_id = 1
+
+/datum/controller/subsystem/air/proc/reboot()
+ set waitfor = FALSE
+
+ // Stop processing while we rebuild.
+ can_fire = FALSE
+
+ // Make sure we don't rebuild mid-tick.
+ if (state != SS_IDLE)
+ admin_notice(span("danger", "ZAS Rebuild initiated. Waiting for current air tick to complete before continuing."), R_DEBUG)
+ UNTIL(state == SS_IDLE)
+
+ while (zones.len)
+ var/zone/zone = zones[zones.len]
+ zones.len--
+
+ zone.c_invalidate()
+
+ edges.Cut()
+ tiles_to_update.Cut()
+ zones_to_update.Cut()
+ active_fire_zones.Cut()
+ active_hotspots.Cut()
+ active_edges.Cut()
+
+ // Re-run setup without air settling.
+ Initialize(REALTIMEOFDAY, simulate = FALSE)
+
+ // Update next_fire so the MC doesn't try to make up for missed ticks.
+ next_fire = world.time + wait
+ can_fire = TRUE
+
+/datum/controller/subsystem/air/stat_entry()
+ ..("TtU:[tiles_to_update.len] ZtU:[zones_to_update.len] AFZ:[active_fire_zones.len] AH:[active_hotspots.len] AE:[active_edges.len]")
+
+/datum/controller/subsystem/air/New()
+ NEW_SS_GLOBAL(SSair)
+
+/datum/controller/subsystem/air/Initialize(timeofday, simulate = TRUE)
+
+ var/starttime = REALTIMEOFDAY
+ admin_notice(span("danger", "Processing Geometry..."), R_DEBUG)
+
+ var/simulated_turf_count = 0
+ for(var/turf/simulated/S in world)
+ simulated_turf_count++
+ S.update_air_properties()
+
+ CHECK_TICK
+
+ admin_notice({"
+Total Simulated Turfs: [simulated_turf_count]
+Total Zones: [zones.len]
+Total Edges: [edges.len]
+Total Active Edges: [active_edges.len ? "[active_edges.len] " : "None"]
+Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]
+ "}, R_DEBUG)
+
+ admin_notice(span("danger", "Geometry processing completed in [(REALTIMEOFDAY - starttime)/10] seconds!"), R_DEBUG)
+
+ if (simulate)
+ admin_notice(span("danger", "Settling air..."), R_DEBUG)
+
+ starttime = REALTIMEOFDAY
+ fire(FALSE, TRUE)
+
+ admin_notice(span("danger", "Air settling completed in [(REALTIMEOFDAY - starttime)/10] seconds!"), R_DEBUG)
+
+ ..()
+
+/datum/controller/subsystem/air/fire(resumed = FALSE, no_mc_tick = FALSE)
+ if (!resumed)
+ processing_edges = active_edges.Copy()
+ processing_fires = active_fire_zones.Copy()
+ processing_hotspots = active_hotspots.Copy()
+
+ var/list/curr_tiles = tiles_to_update
+ var/list/curr_defer = deferred
+ var/list/curr_edges = processing_edges
+ var/list/curr_fire = processing_fires
+ var/list/curr_hotspot = processing_hotspots
+ var/list/curr_zones = zones_to_update
+
+ while (curr_tiles.len)
+ var/turf/T = curr_tiles[curr_tiles.len]
+ curr_tiles.len--
+
+ if (QDELETED(T))
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ continue
+
+ //check if the turf is self-zone-blocked
+ if(T.c_airblock(T) & ZONE_BLOCKED)
+ deferred += T
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+ continue
+
+ T.update_air_properties()
+ T.post_update_air_properties()
+ T.needs_air_update = 0
+ #ifdef ZASDBG
+ T.overlays -= mark
+ updated++
+ #endif
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ while (curr_defer.len)
+ var/turf/T = curr_defer[curr_defer.len]
+ curr_defer.len--
+
+ T.update_air_properties()
+ T.post_update_air_properties()
+ T.needs_air_update = 0
+ #ifdef ZASDBG
+ T.overlays -= mark
+ updated++
+ #endif
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ while (curr_edges.len)
+ var/connection_edge/edge = curr_edges[curr_edges.len]
+ curr_edges.len--
+
+ if (!edge)
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+ continue
+
+ edge.tick()
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ while (curr_fire.len)
+ var/zone/Z = curr_fire[curr_fire.len]
+ curr_fire.len--
+
+ Z.process_fire()
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ while (curr_hotspot.len)
+ var/obj/fire/F = curr_hotspot[curr_hotspot.len]
+ curr_hotspot.len--
+
+ F.process()
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ while (curr_zones.len)
+ var/zone/Z = curr_zones[curr_zones.len]
+ curr_zones.len--
+
+ Z.tick()
+ Z.needs_update = FALSE
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/air/proc/add_zone(zone/z)
+ zones += z
+ z.name = "Zone [next_id++]"
+ mark_zone_update(z)
+
+/datum/controller/subsystem/air/proc/remove_zone(zone/z)
+ zones -= z
+ zones_to_update -= z
+ if (processing_zones)
+ processing_zones -= z
+
+/datum/controller/subsystem/air/proc/air_blocked(turf/A, turf/B)
+ #ifdef ZASDBG
+ ASSERT(isturf(A))
+ ASSERT(isturf(B))
+ #endif
+ var/ablock = A.c_airblock(B)
+ if(ablock == BLOCKED) return BLOCKED
+ return ablock | B.c_airblock(A)
+
+/datum/controller/subsystem/air/proc/has_valid_zone(turf/simulated/T)
+ #ifdef ZASDBG
+ ASSERT(istype(T))
+ #endif
+ return istype(T) && T.zone && !T.zone.invalid
+
+/datum/controller/subsystem/air/proc/merge(zone/A, zone/B)
+ #ifdef ZASDBG
+ ASSERT(istype(A))
+ ASSERT(istype(B))
+ ASSERT(!A.invalid)
+ ASSERT(!B.invalid)
+ ASSERT(A != B)
+ #endif
+ if(A.contents.len < B.contents.len)
+ A.c_merge(B)
+ mark_zone_update(B)
+ else
+ B.c_merge(A)
+ mark_zone_update(A)
+
+/datum/controller/subsystem/air/proc/connect(turf/simulated/A, turf/simulated/B)
+ #ifdef ZASDBG
+ ASSERT(istype(A))
+ ASSERT(isturf(B))
+ ASSERT(A.zone)
+ ASSERT(!A.zone.invalid)
+ //ASSERT(B.zone)
+ ASSERT(A != B)
+ #endif
+
+ var/block = air_blocked(A,B)
+ if(block & AIR_BLOCKED) return
+
+ var/direct = !(block & ZONE_BLOCKED)
+ var/space = !istype(B)
+
+ if(!space)
+ if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || times_fired == 0)))
+ merge(A.zone,B.zone)
+ return
+
+ var
+ a_to_b = get_dir(A,B)
+ b_to_a = get_dir(B,A)
+
+ if(!A.connections) A.connections = new
+ if(!B.connections) B.connections = new
+
+ if(A.connections.get(a_to_b))
+ return
+ if(B.connections.get(b_to_a))
+ return
+ if(!space)
+ if(A.zone == B.zone) return
+
+
+ var/connection/c = new /connection(A,B)
+
+ A.connections.place(c, a_to_b)
+ B.connections.place(c, b_to_a)
+
+ if(direct) c.mark_direct()
+
+/datum/controller/subsystem/air/proc/mark_for_update(turf/T)
+ #ifdef ZASDBG
+ ASSERT(isturf(T))
+ #endif
+ if(T.needs_air_update)
+ return
+ tiles_to_update += T
+ #ifdef ZASDBG
+ T.overlays += mark
+ #endif
+ T.needs_air_update = 1
+
+/datum/controller/subsystem/air/proc/mark_zone_update(zone/Z)
+ #ifdef ZASDBG
+ ASSERT(istype(Z))
+ #endif
+ if(Z.needs_update)
+ return
+ zones_to_update += Z
+ Z.needs_update = 1
+
+/datum/controller/subsystem/air/proc/mark_edge_sleeping(connection_edge/E)
+ #ifdef ZASDBG
+ ASSERT(istype(E))
+ #endif
+ if(E.sleeping)
+ return
+ active_edges -= E
+ E.sleeping = 1
+
+/datum/controller/subsystem/air/proc/mark_edge_active(connection_edge/E)
+ #ifdef ZASDBG
+ ASSERT(istype(E))
+ #endif
+ if(!E.sleeping)
+ return
+ active_edges += E
+ E.sleeping = 0
+
+/datum/controller/subsystem/air/proc/equivalent_pressure(zone/A, zone/B)
+ return A.air.compare(B.air)
+
+/datum/controller/subsystem/air/proc/get_edge(zone/A, zone/B)
+ if(istype(B))
+ for(var/connection_edge/zone/edge in A.edges)
+ if(edge.contains_zone(B))
+ return edge
+ var/connection_edge/edge = new/connection_edge/zone(A,B)
+ edges += edge
+ edge.recheck()
+ return edge
+ else
+ for(var/connection_edge/unsimulated/edge in A.edges)
+ if(has_same_air(edge.B,B))
+ return edge
+ var/connection_edge/edge = new/connection_edge/unsimulated(A,B)
+ edges += edge
+ edge.recheck()
+ return edge
+
+/datum/controller/subsystem/air/proc/has_same_air(turf/A, turf/B)
+ if(A.oxygen != B.oxygen)
+ return 0
+ if(A.nitrogen != B.nitrogen)
+ return 0
+ if(A.phoron != B.phoron)
+ return 0
+ if(A.carbon_dioxide != B.carbon_dioxide)
+ return 0
+ if(A.temperature != B.temperature)
+ return 0
+ return 1
+
+/datum/controller/subsystem/air/proc/remove_edge(connection_edge/E)
+ edges -= E
+ if(!E.sleeping)
+ active_edges -= E
diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm
new file mode 100644
index 00000000000..a8664191db9
--- /dev/null
+++ b/code/controllers/subsystems/alarm.dm
@@ -0,0 +1,47 @@
+var/datum/controller/subsystem/alarm/SSalarm
+
+/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new()
+/var/global/datum/alarm_handler/camera/camera_alarm = new()
+/var/global/datum/alarm_handler/fire/fire_alarm = new()
+/var/global/datum/alarm_handler/motion/motion_alarm = new()
+/var/global/datum/alarm_handler/power/power_alarm = new()
+
+/datum/controller/subsystem/alarm
+ name = "Alarms"
+ priority = SS_PRIORITY_ALARMS
+
+ var/list/datum/alarm/all_handlers
+ var/tmp/list/current = list()
+
+ var/tmp/list/active_alarm_cache = list()
+
+/datum/controller/subsystem/alarm/New()
+ NEW_SS_GLOBAL(SSalarm)
+
+/datum/controller/subsystem/alarm/Initialize(timeofday)
+ all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
+
+/datum/controller/subsystem/alarm/fire(resumed = FALSE)
+ if (!resumed)
+ current = all_handlers.Copy()
+ active_alarm_cache.Cut()
+
+ while (current.len)
+ var/datum/alarm_handler/AH = current[current.len]
+ current.len--
+
+ AH.process()
+
+ active_alarm_cache += AH.alarms
+
+ if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/alarm/proc/active_alarms()
+ return active_alarm_cache.Copy()
+
+/datum/controller/subsystem/alarm/proc/number_of_active_alarms()
+ return active_alarm_cache.len
+
+/datum/controller/subsystem/alarm/stat_entry()
+ ..("A:[active_alarm_cache.len]")
diff --git a/code/controllers/subsystems/arrivals.dm b/code/controllers/subsystems/arrivals.dm
new file mode 100644
index 00000000000..9da5846178e
--- /dev/null
+++ b/code/controllers/subsystems/arrivals.dm
@@ -0,0 +1,78 @@
+/var/datum/controller/subsystem/arrivals/SSarrivals
+
+/datum/controller/subsystem/arrivals
+ name = "Arrivals"
+ flags = SS_NO_INIT | SS_BACKGROUND
+ priority = SS_PRIORITY_ARRIVALS
+
+ var/datum/shuttle/ferry/arrival/shuttle
+
+ var/launch_time //the time at which the shuttle will be launched
+ var/wait_for_launch = 0 //if the shuttle is waiting to launch
+
+/datum/controller/subsystem/arrivals/New()
+ NEW_SS_GLOBAL(SSarrivals)
+
+/datum/controller/subsystem/arrivals/fire()
+ post_signal("arrivals")
+ if (wait_for_launch)
+ // Timing.
+ if (world.time >= launch_time) //time to launch the shuttle
+ stop_launch_countdown()
+ shuttle.launch(src)
+ else
+ // Sleep, we ain't doin' shit. on_hotzone_enter() will wake us.
+ suspend()
+
+// Called when a living mob enters the shuttle area.
+/datum/controller/subsystem/arrivals/proc/on_hotzone_enter()
+ if (!shuttle.location)
+ return
+
+ wake() // Wake the process.
+
+ if (!wait_for_launch && shuttle.location == 1 && shuttle.moving_status == SHUTTLE_IDLE)
+ set_launch_countdown(30)
+
+//called when the shuttle has arrived.
+
+/datum/controller/subsystem/arrivals/proc/shuttle_arrived()
+ if (!shuttle.location) //at station
+ set_launch_countdown(30) //get ready to return
+
+/datum/controller/subsystem/arrivals/proc/forbidden_atoms_check(atom/A)
+ if(istype(A,/mob/living))
+ 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/i=1, i<=A.contents.len, i++)
+ var/atom/B = A.contents[i]
+ if(.(B))
+ return 1
+
+//begins the launch countdown and sets the amount of time left until launch
+/datum/controller/subsystem/arrivals/proc/set_launch_countdown(var/seconds)
+ wait_for_launch = 1
+ launch_time = world.time + seconds*10
+ wake()
+
+/datum/controller/subsystem/arrivals/proc/stop_launch_countdown()
+ wait_for_launch = 0
+
+/datum/controller/subsystem/arrivals/proc/post_signal(var/command)
+
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
+
+ if(!frequency) return
+
+ var/datum/signal/status_signal = new
+ status_signal.source = src
+ status_signal.transmission_method = 1
+ status_signal.data["command"] = command
+
+ frequency.post_signal(src, status_signal, RADIO_ARRIVALS)
diff --git a/code/controllers/subsystems/assets.dm b/code/controllers/subsystems/assets.dm
new file mode 100644
index 00000000000..06673355a66
--- /dev/null
+++ b/code/controllers/subsystems/assets.dm
@@ -0,0 +1,20 @@
+
+/var/datum/controller/subsystem/assets/SSassets
+
+/datum/controller/subsystem/assets
+ name = "Assets"
+ init_order = SS_INIT_MISC_FIRST
+ flags = SS_NO_FIRE
+ var/list/cache = list()
+
+/datum/controller/subsystem/assets/New()
+ NEW_SS_GLOBAL(SSassets)
+
+/datum/controller/subsystem/assets/Initialize(timeofday)
+ for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple))
+ var/datum/asset/A = new type()
+ A.register()
+
+ for(var/client/C in global.clients)
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/getFilesSlow, C, cache, FALSE), 10)
+ ..()
diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm
new file mode 100644
index 00000000000..f0a6b07eabd
--- /dev/null
+++ b/code/controllers/subsystems/chemistry.dm
@@ -0,0 +1,55 @@
+var/datum/controller/subsystem/chemistry/SSchemistry
+
+/datum/controller/subsystem/chemistry
+ name = "Chemistry"
+ flags = SS_NO_INIT
+ priority = SS_PRIORITY_CHEMISTRY
+
+ var/list/active_holders
+ var/list/chemical_reactions
+ var/list/chemical_reagents
+
+ var/tmp/list/processing_holders = list()
+
+/datum/controller/subsystem/chemistry/stat_entry()
+ ..("AH:[active_holders.len]")
+
+/datum/controller/subsystem/chemistry/New()
+ NEW_SS_GLOBAL(SSchemistry)
+ active_holders = list()
+ chemical_reactions = chemical_reactions_list
+ chemical_reagents = chemical_reagents_list
+
+/datum/controller/subsystem/chemistry/fire(resumed = FALSE)
+ if (!resumed)
+ processing_holders = active_holders.Copy()
+
+ while (processing_holders.len)
+ var/datum/reagents/holder = processing_holders[processing_holders.len]
+ processing_holders.len--
+
+ if (QDELETED(holder))
+ active_holders -= holder
+ log_debug("SSchemistry: QDELETED holder found in processing list!")
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ if (!holder.process_reactions())
+ active_holders -= holder
+
+ if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/chemistry/proc/mark_for_update(var/datum/reagents/holder)
+ if (holder in active_holders)
+ return
+
+ //Process once, right away. If we still need to continue then add to the active_holders list and continue later
+ if (holder.process_reactions())
+ active_holders += holder
+
+/datum/controller/subsystem/chemistry/Recover()
+ src.active_holders = SSchemistry.active_holders
+ src.chemical_reactions = SSchemistry.chemical_reactions
+ src.chemical_reagents = SSchemistry.chemical_reagents
diff --git a/code/controllers/subsystems/effects.dm b/code/controllers/subsystems/effects.dm
new file mode 100644
index 00000000000..8dc6b253225
--- /dev/null
+++ b/code/controllers/subsystems/effects.dm
@@ -0,0 +1,83 @@
+var/datum/controller/subsystem/effects/SSeffects
+
+/datum/controller/subsystem/effects
+ name = "Effects Master"
+ wait = 2 // Deciseconds.
+ flags = SS_BACKGROUND | SS_NO_INIT
+ priority = SS_PRIORITY_EFFECTS
+
+ var/list/datum/effect_system/effect_systems = list() // The effect-spawning objects. Shouldn't be many of these.
+ var/list/obj/visual_effect/visuals = list() // The visible component of an effect. May be created without an effect object.
+
+ var/tmp/list/processing_effects = list()
+ var/tmp/list/processing_visuals = list()
+
+/datum/controller/subsystem/effects/New()
+ NEW_SS_GLOBAL(SSeffects)
+
+/datum/controller/subsystem/effects/fire(resumed = FALSE)
+ if (!resumed)
+ processing_effects = effect_systems
+ effect_systems = list()
+ processing_visuals = visuals.Copy()
+
+ var/list/current_effects = processing_effects
+ var/list/current_visuals = processing_visuals
+
+ // Most of the time these only exist for 1 cycle, so optimize for removal-on-first-fire.
+ while (current_effects.len)
+ var/datum/effect_system/E = current_effects[current_effects.len]
+ current_effects.len--
+
+ if (QDELETED(E) || !E.isprocessing)
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ STOP_EFFECT(E)
+ E.last_fire = world.time
+ switch (E.process(world.time - E.last_fire))
+ if (EFFECT_CONTINUE)
+ QUEUE_EFFECT(E)
+
+ if (EFFECT_DESTROY)
+ qdel(E)
+
+ if (MC_TICK_CHECK)
+ return
+
+ // Most often these will be continuing to tick, so assume that we're going to keep poking the effect.
+ while (current_visuals.len)
+ var/obj/visual_effect/V = current_visuals[current_visuals.len]
+ current_visuals.len--
+
+ if (QDELETED(V) || !V.isprocessing)
+ visuals -= V
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ switch (V.tick())
+ if (EFFECT_HALT)
+ STOP_VISUAL(V)
+
+ if (EFFECT_DESTROY)
+ STOP_VISUAL(V)
+ qdel(V)
+
+ if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/effects/stat_entry()
+ ..("E:[effect_systems.len] V:[visuals.len]")
+
+/datum/controller/subsystem/effects/Recover()
+ if (istype(SSeffects))
+ src.effect_systems = SSeffects.effect_systems
+ src.visuals = SSeffects.visuals
+
+ src.effect_systems |= SSeffects.processing_effects
+ src.visuals |= SSeffects.processing_visuals
+
+/datum/effect_system
+ var/last_fire
diff --git a/code/controllers/emergency_shuttle_controller.dm b/code/controllers/subsystems/emergency_shuttle.dm
similarity index 78%
rename from code/controllers/emergency_shuttle_controller.dm
rename to code/controllers/subsystems/emergency_shuttle.dm
index 10e620beed9..f09195d08f7 100644
--- a/code/controllers/emergency_shuttle_controller.dm
+++ b/code/controllers/subsystems/emergency_shuttle.dm
@@ -1,10 +1,9 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+var/datum/controller/subsystem/emergency_shuttle/emergency_shuttle
-// Controls the emergency shuttle
+/datum/controller/subsystem/emergency_shuttle
+ name = "Emergency Shuttle"
+ flags = SS_NO_TICK_CHECK | SS_NO_INIT
-var/global/datum/emergency_shuttle_controller/emergency_shuttle
-
-/datum/emergency_shuttle_controller
var/datum/shuttle/ferry/emergency/shuttle
var/list/escape_pods
@@ -22,7 +21,22 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
var/datum/announcement/priority/emergency_shuttle_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg'))
var/datum/announcement/priority/emergency_shuttle_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg'))
-/datum/emergency_shuttle_controller/proc/process()
+/datum/controller/subsystem/emergency_shuttle/Recover()
+ // Just copy all the stuff over.
+ src.shuttle = emergency_shuttle.shuttle
+ src.escape_pods = emergency_shuttle.escape_pods
+ src.launch_time = emergency_shuttle.launch_time
+ src.auto_recall = emergency_shuttle.auto_recall
+ src.auto_recall_time = emergency_shuttle.auto_recall_time
+ src.evac = emergency_shuttle.evac
+ src.wait_for_launch = emergency_shuttle.wait_for_launch
+ src.autopilot = emergency_shuttle.autopilot
+ src.deny_shuttle = emergency_shuttle.deny_shuttle
+
+/datum/controller/subsystem/emergency_shuttle/New()
+ NEW_SS_GLOBAL(emergency_shuttle)
+
+/datum/controller/subsystem/emergency_shuttle/fire()
if (wait_for_launch)
if (evac && auto_recall && world.time >= auto_recall_time)
recall()
@@ -38,9 +52,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
if (autopilot)
shuttle.launch(src)
-//called when the shuttle has arrived.
-
-/datum/emergency_shuttle_controller/proc/shuttle_arrived()
+/datum/controller/subsystem/emergency_shuttle/proc/shuttle_arrived()
if (!shuttle.location) //at station
if (autopilot)
set_launch_countdown(SHUTTLE_LEAVETIME) //get ready to return
@@ -57,15 +69,15 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
pod.arming_controller.arm()
//begins the launch countdown and sets the amount of time left until launch
-/datum/emergency_shuttle_controller/proc/set_launch_countdown(var/seconds)
+/datum/controller/subsystem/emergency_shuttle/proc/set_launch_countdown(var/seconds)
wait_for_launch = 1
launch_time = world.time + seconds*10
-/datum/emergency_shuttle_controller/proc/stop_launch_countdown()
+/datum/controller/subsystem/emergency_shuttle/proc/stop_launch_countdown()
wait_for_launch = 0
//calls the shuttle for an emergency evacuation
-/datum/emergency_shuttle_controller/proc/call_evac()
+/datum/controller/subsystem/emergency_shuttle/proc/call_evac()
if(!can_call()) return
//set the launch timer
@@ -83,7 +95,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
A.readyalert()
//calls the shuttle for a routine crew transfer
-/datum/emergency_shuttle_controller/proc/call_transfer()
+/datum/controller/subsystem/emergency_shuttle/proc/call_transfer()
if(!can_call()) return
//set the launch timer
@@ -97,7 +109,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
priority_announcement.Announce("A crew transfer to [dock_name] has been scheduled. The shuttle has been called. It will arrive in approximately [round(estimate_arrival_time()/60)] minutes.")
//recalls the shuttle
-/datum/emergency_shuttle_controller/proc/recall()
+/datum/controller/subsystem/emergency_shuttle/proc/recall()
if (!can_recall()) return
wait_for_launch = 0
@@ -113,7 +125,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
else
priority_announcement.Announce("The scheduled crew transfer has been cancelled.")
-/datum/emergency_shuttle_controller/proc/can_call()
+/datum/controller/subsystem/emergency_shuttle/proc/can_call()
if (!universe.OnShuttleCall(null))
return 0
if (deny_shuttle)
@@ -127,7 +139,7 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
//this only returns 0 if it would absolutely make no sense to recall
//e.g. the shuttle is already at the station or wasn't called to begin with
//other reasons for the shuttle not being recallable should be handled elsewhere
-/datum/emergency_shuttle_controller/proc/can_recall()
+/datum/controller/subsystem/emergency_shuttle/proc/can_recall()
if (shuttle.moving_status == SHUTTLE_INTRANSIT) //if the shuttle is already in transit then it's too late
return 0
if (!shuttle.location) //already at the station.
@@ -136,10 +148,10 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
return 0
return 1
-/datum/emergency_shuttle_controller/proc/get_shuttle_prep_time()
+/datum/controller/subsystem/emergency_shuttle/proc/get_shuttle_prep_time()
// During mutiny rounds, the shuttle takes twice as long.
- if(ticker && ticker.mode)
- return SHUTTLE_PREPTIME * ticker.mode.shuttle_delay
+ if(SSticker.mode)
+ return SHUTTLE_PREPTIME * SSticker.mode.shuttle_delay
return SHUTTLE_PREPTIME
@@ -149,19 +161,19 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
*/
//returns 1 if the shuttle is docked at the station and waiting to leave
-/datum/emergency_shuttle_controller/proc/waiting_to_leave()
+/datum/controller/subsystem/emergency_shuttle/proc/waiting_to_leave()
if (shuttle.location)
return 0 //not at station
return (wait_for_launch || shuttle.moving_status != SHUTTLE_INTRANSIT)
//so we don't have emergency_shuttle.shuttle.location everywhere
-/datum/emergency_shuttle_controller/proc/location()
+/datum/controller/subsystem/emergency_shuttle/proc/location()
if (!shuttle)
return 1 //if we dont have a shuttle datum, just act like it's at centcom
return shuttle.location
//returns the time left until the shuttle arrives at it's destination, in seconds
-/datum/emergency_shuttle_controller/proc/estimate_arrival_time()
+/datum/controller/subsystem/emergency_shuttle/proc/estimate_arrival_time()
var/eta
if (shuttle.has_arrive_time())
//we are in transition and can get an accurate ETA
@@ -172,19 +184,19 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
return (eta - world.time)/10
//returns the time left until the shuttle launches, in seconds
-/datum/emergency_shuttle_controller/proc/estimate_launch_time()
+/datum/controller/subsystem/emergency_shuttle/proc/estimate_launch_time()
return (launch_time - world.time)/10
-/datum/emergency_shuttle_controller/proc/has_eta()
+/datum/controller/subsystem/emergency_shuttle/proc/has_eta()
return (wait_for_launch || shuttle.moving_status != SHUTTLE_IDLE)
//returns 1 if the shuttle has gone to the station and come back at least once,
//used for game completion checking purposes
-/datum/emergency_shuttle_controller/proc/returned()
+/datum/controller/subsystem/emergency_shuttle/proc/returned()
return (departed && shuttle.moving_status == SHUTTLE_IDLE && shuttle.location) //we've gone to the station at least once, no longer in transit and are idle back at centcom
//returns 1 if the shuttle is not idle at centcom
-/datum/emergency_shuttle_controller/proc/online()
+/datum/controller/subsystem/emergency_shuttle/proc/online()
if (!shuttle.location) //not at centcom
return 1
if (wait_for_launch || shuttle.moving_status != SHUTTLE_IDLE)
@@ -192,15 +204,15 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
return 0
//returns 1 if the shuttle is currently in transit (or just leaving) to the station
-/datum/emergency_shuttle_controller/proc/going_to_station()
+/datum/controller/subsystem/emergency_shuttle/proc/going_to_station()
return (!shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE)
//returns 1 if the shuttle is currently in transit (or just leaving) to centcom
-/datum/emergency_shuttle_controller/proc/going_to_centcom()
+/datum/controller/subsystem/emergency_shuttle/proc/going_to_centcom()
return (shuttle.direction && shuttle.moving_status != SHUTTLE_IDLE)
-/datum/emergency_shuttle_controller/proc/get_status_panel_eta()
+/datum/controller/subsystem/emergency_shuttle/proc/get_status_panel_eta()
if (online())
if (shuttle.has_arrive_time())
var/timeleft = emergency_shuttle.estimate_arrival_time()
@@ -263,4 +275,4 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
var/obj/effect/bgstar/S = new/obj/effect/bgstar(locate(x,y,z))
S.direction = spawndir
spawn()
- S.startmove()
\ No newline at end of file
+ S.startmove()
diff --git a/code/controllers/subsystems/event.dm b/code/controllers/subsystems/event.dm
new file mode 100644
index 00000000000..2bdb6aafcc1
--- /dev/null
+++ b/code/controllers/subsystems/event.dm
@@ -0,0 +1,33 @@
+/datum/controller/subsystem/events
+ name = "Event Controller"
+
+ flags = SS_NO_INIT
+ priority = SS_PRIORITY_EVENT
+
+ var/tmp/list/processing_events = list()
+ var/tmp/pos = EVENT_LEVEL_MUNDANE
+
+/datum/controller/subsystem/events/fire(resumed = FALSE)
+ if (!resumed)
+ processing_events = event_manager.active_events.Copy()
+ pos = EVENT_LEVEL_MUNDANE
+
+ while (processing_events.len)
+ var/datum/event/E = processing_events[processing_events.len]
+ processing_events.len--
+
+ E.process()
+
+ if (MC_TICK_CHECK)
+ return
+
+ while (pos <= EVENT_LEVEL_MAJOR)
+ var/list/datum/event_container/EC = event_manager.event_containers[pos]
+ EC.process()
+ pos++
+
+ if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/events/stat_entry()
+ ..("P:[processing_events.len]")
diff --git a/code/controllers/Processes/explosives.dm b/code/controllers/subsystems/explosives.dm
similarity index 85%
rename from code/controllers/Processes/explosives.dm
rename to code/controllers/subsystems/explosives.dm
index 81e70577bf4..b496311f8ad 100644
--- a/code/controllers/Processes/explosives.dm
+++ b/code/controllers/subsystems/explosives.dm
@@ -1,28 +1,34 @@
-var/datum/controller/process/explosives/bomb_processor
+var/datum/controller/subsystem/explosives/SSexplosives
// yes, let's move the laggiest part of the game to a process
// nothing could go wrong -- Lohikar
-/datum/controller/process/explosives
+/datum/controller/subsystem/explosives
+ name = "Explosives"
+ wait = 5
+ flags = SS_NO_INIT | SS_BACKGROUND | SS_POST_FIRE_TIMING
+ priority = SS_PRIORITY_EXPLOSIVES
+
+ suspended = TRUE // Start disabled, explosions will wake us if need be.
+
var/list/work_queue
var/ticks_without_work = 0
var/list/explosion_turfs
var/explosion_in_progress
var/powernet_update_pending = 0
-/datum/controller/process/explosives/setup()
- name = "explosives"
- schedule_interval = 5 // every half-second
- tick_allowance = 25 // 25% of a tick
- work_queue = list()
- bomb_processor = src
+ var/mc_notified = FALSE
- // Kill it until we have an explosion to run.
- disable()
+/datum/controller/subsystem/explosives/New()
+ NEW_SS_GLOBAL(SSexplosives)
+ LAZYINITLIST(work_queue)
-/datum/controller/process/explosives/doWork()
- if (!work_queue)
- setup() // fix for process failing to re-init after termination
+/datum/controller/subsystem/explosives/Recover()
+ work_queue = SSexplosives.work_queue
+ explosion_in_progress = SSexplosives.explosion_in_progress
+ explosion_turfs = SSexplosives.explosion_turfs
+ powernet_update_pending = SSexplosives.powernet_update_pending
+/datum/controller/subsystem/explosives/fire(resumed = FALSE)
if (!(work_queue.len))
ticks_without_work++
if (powernet_update_pending && ticks_without_work > 5)
@@ -31,14 +37,20 @@ var/datum/controller/process/explosives/bomb_processor
// All explosions handled, powernet rebuilt.
// We can sleep now.
- disable()
+ suspend()
+
+ mc_notified = FALSE
+ Master.ExplosionEnd()
return
ticks_without_work = 0
powernet_update_pending = 1
+ if (!mc_notified)
+ Master.ExplosionStart()
+ mc_notified = TRUE
+
for (var/A in work_queue)
- lighting_process.disable()
var/datum/explosiondata/data = A
if (data.is_rec)
@@ -46,13 +58,10 @@ var/datum/controller/process/explosives/bomb_processor
else
explosion(data)
- F_SCHECK
-
work_queue -= data
- lighting_process.enable()
// Handle a non-recusrive explosion.
-/datum/controller/process/explosives/proc/explosion(var/datum/explosiondata/data)
+/datum/controller/subsystem/explosives/proc/explosion(var/datum/explosiondata/data)
var/turf/epicenter = data.epicenter
var/devastation_range = data.devastation_range
var/heavy_impact_range = data.heavy_impact_range
@@ -110,7 +119,7 @@ var/datum/controller/process/explosives/bomb_processor
if (vibration)
for(var/mob/M in player_list)
- F_SCHECK
+ CHECK_TICK
// Double check for client
var/reception = 2//Whether the person can be shaken or hear sound
//2 = BOTH
@@ -119,8 +128,6 @@ var/datum/controller/process/explosives/bomb_processor
if(M && M.client)
var/turf/M_turf = get_turf(M)
-
-
if(M_turf && M_turf.z == epicenter.z)
if (istype(M_turf,/turf/space))
//If the person is standing in space, they wont hear
@@ -170,18 +177,24 @@ var/datum/controller/process/explosives/bomb_processor
for(var/turf/T in trange(max_range, epicenter))
var/dist = sqrt((T.x - x0)**2 + (T.y - y0)**2)
- if(dist < devastation_range) dist = 1
- else if(dist < heavy_impact_range) dist = 2
- else if(dist < light_impact_range) dist = 3
- else continue
+ if (dist < devastation_range)
+ dist = 1
+ else if (dist < heavy_impact_range)
+ dist = 2
+ else if (dist < light_impact_range)
+ dist = 3
+ else
+ continue
T.ex_act(dist)
- F_SCHECK
+ CHECK_TICK
if(T)
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
var/atom/movable/AM = atom_movable
- if(AM && AM.simulated) AM.ex_act(dist)
- F_SCHECK
+ if(AM && AM.simulated)
+ AM.ex_act(dist)
+
+ CHECK_TICK
var/took = (world.timeofday-start)/10
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
@@ -194,7 +207,7 @@ var/datum/controller/process/explosives/bomb_processor
Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took)
// Handle a recursive explosion.
-/datum/controller/process/explosives/proc/explosion_rec(turf/epicenter, power)
+/datum/controller/subsystem/explosives/proc/explosion_rec(turf/epicenter, power)
if(power <= 0) return
epicenter = get_turf(epicenter)
if(!epicenter) return
@@ -214,12 +227,14 @@ var/datum/controller/process/explosives/bomb_processor
for(var/direction in cardinal)
var/turf/T = get_step(epicenter, direction)
explosion_spread(T, power - epicenter.explosion_resistance, direction)
- F_SCHECK
+ CHECK_TICK
//This step applies the ex_act effects for the explosion, as planned in the previous step.
for(var/turf/T in explosion_turfs)
- if(explosion_turfs[T] <= 0) continue
- if(!T) continue
+ if(explosion_turfs[T] <= 0)
+ continue
+ if(!T)
+ continue
//Wow severity looks confusing to calculate... Fret not, I didn't leave you with any additional instructions or help. (just kidding, see the line under the calculation)
var/severity = 4 - round(max(min( 3, ((explosion_turfs[T] - T.explosion_resistance) / (max(3,(power/3)))) ) ,1), 1) //sanity effective power on tile divided by either 3 or one third the total explosion power
@@ -233,13 +248,13 @@ var/datum/controller/process/explosives/bomb_processor
T = locate(x,y,z)
for(var/atom/A in T)
A.ex_act(severity)
- F_SCHECK
+ CHECK_TICK
explosion_in_progress = 0
// A proc used by recursive explosions. (The actually recursive bit.)
-/datum/controller/process/explosives/proc/explosion_spread(turf/s, power, direction)
- F_SCHECK
+/datum/controller/subsystem/explosives/proc/explosion_spread(turf/s, power, direction)
+ CHECK_TICK
if (istype(s, /turf/unsimulated))
return
if(power <= 0)
@@ -262,19 +277,18 @@ var/datum/controller/process/explosives/bomb_processor
explosion_spread(T, spread_power, turn(direction,90))
// Add an explosion to the queue for processing.
-/datum/controller/process/explosives/proc/queue(var/datum/explosiondata/data)
+/datum/controller/subsystem/explosives/proc/queue(var/datum/explosiondata/data)
if (!data || !istype(data))
return
work_queue += data
// Wake it up from sleeping if necessary.
- if (disabled)
- enable()
+ if (suspended)
+ wake()
-/datum/controller/process/explosives/statProcess()
- ..()
- stat(null, "[work_queue.len] items in explosion queue")
+/datum/controller/subsystem/explosives/stat_entry()
+ ..("P:[work_queue.len]")
// The data datum for explosions.
/datum/explosiondata
diff --git a/code/controllers/subsystems/garbage-debug.dm b/code/controllers/subsystems/garbage-debug.dm
new file mode 100644
index 00000000000..88f38b45379
--- /dev/null
+++ b/code/controllers/subsystems/garbage-debug.dm
@@ -0,0 +1,929 @@
+#ifdef TESTING
+
+/datum/var/running_find_references
+/datum/var/last_find_references = 0
+
+/datum/verb/find_refs()
+ set category = "Debug"
+ set name = "Find References"
+ set background = 1
+ set src in world
+
+ find_references(FALSE)
+
+/datum/proc/find_references(skip_alert)
+ running_find_references = type
+ if(usr && usr.client)
+ if(usr.client.running_find_references)
+ testing("CANCELLED search for references to a [usr.client.running_find_references].")
+ usr.client.running_find_references = null
+ running_find_references = null
+ //restart the garbage collector
+ SSgarbage.can_fire = 1
+ SSgarbage.next_fire = world.time + world.tick_lag
+ return
+
+ if(!skip_alert)
+ if(alert("Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", "Yes", "No") == "No")
+ running_find_references = null
+ return
+
+ //this keeps the garbage collector from failing to collect objects being searched for in here
+ SSgarbage.can_fire = 0
+
+ if(usr && usr.client)
+ usr.client.running_find_references = type
+
+ testing("Beginning search for references to a [type].")
+ last_find_references = world.time
+ find_references_in_globals()
+ for(var/datum/thing in world)
+ DoSearchVar(thing, "WorldRef: [thing]")
+ testing("Completed search for references to a [type].")
+ if(usr && usr.client)
+ usr.client.running_find_references = null
+ running_find_references = null
+
+ //restart the garbage collector
+ SSgarbage.can_fire = 1
+ SSgarbage.next_fire = world.time + world.tick_lag
+
+/client/verb/purge_all_destroyed_objects()
+ set category = "Debug"
+ if(SSgarbage)
+ while(SSgarbage.queue.len)
+ var/datum/o = locate(SSgarbage.queue[1])
+ if(istype(o) && o.gcDestroyed)
+ del(o)
+ SSgarbage.totaldels++
+ SSgarbage.queue.Cut(1, 2)
+
+/datum/verb/qdel_then_find_references(datum/thing in world)
+ set category = "Debug"
+ set name = "qdel() then Find References"
+ set background = 1
+
+ qdel(thing)
+ if(!thing.running_find_references)
+ thing.find_references(TRUE)
+
+/client/verb/show_qdeleted()
+ set category = "Debug"
+ set name = "Show qdel() Log"
+ set desc = "Render the qdel() log and display it"
+
+ var/dat = "List of things that have been qdel()eted this round "
+
+ var/tmplist = list()
+ for(var/elem in SSgarbage.qdel_list)
+ if(!(elem in tmplist))
+ tmplist[elem] = 0
+ tmplist[elem]++
+
+ for(var/path in tmplist)
+ dat += "[path] - [tmplist[path]] times "
+
+ usr << browse(dat, "window=qdeletedlog")
+
+#define SearchVar(X) DoSearchVar(X, "Global: " + #X)
+
+/datum/proc/DoSearchVar(X, Xname)
+ if(usr && usr.client && !usr.client.running_find_references) return
+ if(istype(X, /datum))
+ var/datum/D = X
+ if(D.last_find_references == last_find_references)
+ return
+ D.last_find_references = last_find_references
+ for(var/V in D.vars)
+ for(var/varname in D.vars)
+ var/variable = D.vars[varname]
+ if(variable == src)
+ testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. [Xname]")
+ else if(islist(variable))
+ if(src in variable)
+ testing("Found [src.type] \ref[src] in [D.type]'s [varname] list var. Global: [Xname]")
+#ifdef GC_FAILURE_HARD_LOOKUP
+ for(var/I in variable)
+ DoSearchVar(I, TRUE)
+ else
+ DoSearchVar(variable, "[Xname]: [varname]")
+#endif
+ else if(islist(X))
+ if(src in X)
+ testing("Found [src.type] \ref[src] in list [Xname].")
+#ifdef GC_FAILURE_HARD_LOOKUP
+ for(var/I in X)
+ DoSearchVar(I, Xname + ": list")
+#else
+ CHECK_TICK
+#endif
+
+
+/datum/proc/find_references_in_globals()
+ SearchVar(data_core)
+ SearchVar(all_areas)
+ SearchVar(machines)
+ SearchVar(processing_objects)
+ SearchVar(processing_power_items)
+ SearchVar(med_hud_users)
+ SearchVar(sec_hud_users)
+ SearchVar(hud_icon_reference)
+ SearchVar(janitorial_supplies)
+ SearchVar(listening_objects)
+ SearchVar(global_mutations)
+ SearchVar(universe)
+ SearchVar(global_map)
+ SearchVar(hit_appends)
+ SearchVar(diary)
+ SearchVar(diary_runtime)
+ SearchVar(diary_date_string)
+ SearchVar(href_logfile)
+ SearchVar(station_name)
+ SearchVar(station_short)
+ SearchVar(dock_name)
+ SearchVar(boss_name)
+ SearchVar(boss_short)
+ SearchVar(company_name)
+ SearchVar(company_short)
+ SearchVar(game_version)
+ SearchVar(changelog_hash)
+ SearchVar(game_year)
+ SearchVar(round_progressing)
+ SearchVar(master_mode)
+ SearchVar(secret_force_mode)
+ SearchVar(host)
+ SearchVar(jobMax)
+ SearchVar(bombers)
+ SearchVar(admin_log)
+ SearchVar(lastsignalers)
+ SearchVar(lawchanges)
+ SearchVar(reg_dna)
+ SearchVar(monkeystart)
+ SearchVar(wizardstart)
+ SearchVar(newplayer_start)
+ SearchVar(latejoin)
+ SearchVar(latejoin_gateway)
+ SearchVar(latejoin_cryo)
+ SearchVar(latejoin_cyborg)
+ SearchVar(prisonwarp)
+ SearchVar(holdingfacility)
+ SearchVar(xeno_spawn)
+ SearchVar(tdome1)
+ SearchVar(tdome2)
+ SearchVar(tdomeobserve)
+ SearchVar(tdomeadmin)
+ SearchVar(prisonsecuritywarp)
+ SearchVar(prisonwarped)
+ SearchVar(ninjastart)
+ SearchVar(cardinal)
+ SearchVar(cornerdirs)
+ SearchVar(alldirs)
+ SearchVar(reverse_dir)
+ SearchVar(config)
+ SearchVar(combatlog)
+ SearchVar(IClog)
+ SearchVar(OOClog)
+ SearchVar(adminlog)
+ SearchVar(powernets)
+ SearchVar(Debug2)
+ SearchVar(debugobj)
+ SearchVar(mods)
+ SearchVar(gravity_is_on)
+ SearchVar(server_greeting)
+ SearchVar(forceblob)
+ SearchVar(nanomanager)
+ SearchVar(event_manager)
+ SearchVar(awaydestinations)
+ SearchVar(fileaccess_timer)
+ SearchVar(custom_event_msg)
+ SearchVar(dbcon)
+ SearchVar(alphabet_uppercase)
+ SearchVar(robot_module_types)
+ SearchVar(scarySounds)
+ SearchVar(max_explosion_range)
+ SearchVar(global_announcer)
+ SearchVar(station_departments)
+ SearchVar(TICKS_IN_DAY)
+ SearchVar(TICKS_IN_HOUR)
+ SearchVar(TICKS_IN_SECOND)
+ SearchVar(exo_beacons)
+ SearchVar(ai_names)
+ SearchVar(wizard_first)
+ SearchVar(wizard_second)
+ SearchVar(ninja_titles)
+ SearchVar(ninja_names)
+ SearchVar(commando_names)
+ SearchVar(first_names_male)
+ SearchVar(first_names_female)
+ SearchVar(last_names)
+ SearchVar(clown_names)
+ SearchVar(verbs)
+ SearchVar(adjectives)
+ SearchVar(init)
+ SearchVar(world_api_rate_limit)
+ SearchVar(inerror)
+ SearchVar(tachycardics)
+ SearchVar(bradycardics)
+ SearchVar(heartstopper)
+ SearchVar(cheartstopper)
+ SearchVar(BLINDBLOCK)
+ SearchVar(DEAFBLOCK)
+ SearchVar(HULKBLOCK)
+ SearchVar(TELEBLOCK)
+ SearchVar(FIREBLOCK)
+ SearchVar(XRAYBLOCK)
+ SearchVar(CLUMSYBLOCK)
+ SearchVar(FAKEBLOCK)
+ SearchVar(COUGHBLOCK)
+ SearchVar(GLASSESBLOCK)
+ SearchVar(EPILEPSYBLOCK)
+ SearchVar(TWITCHBLOCK)
+ SearchVar(NERVOUSBLOCK)
+ SearchVar(MONKEYBLOCK)
+ SearchVar(BLOCKADD)
+ SearchVar(DIFFMUT)
+ SearchVar(HEADACHEBLOCK)
+ SearchVar(NOBREATHBLOCK)
+ SearchVar(REMOTEVIEWBLOCK)
+ SearchVar(REGENERATEBLOCK)
+ SearchVar(INCREASERUNBLOCK)
+ SearchVar(REMOTETALKBLOCK)
+ SearchVar(MORPHBLOCK)
+ SearchVar(BLENDBLOCK)
+ SearchVar(HALLUCINATIONBLOCK)
+ SearchVar(NOPRINTSBLOCK)
+ SearchVar(SHOCKIMMUNITYBLOCK)
+ SearchVar(SMALLSIZEBLOCK)
+ SearchVar(restricted_camera_networks)
+ SearchVar(url_find_lazy)
+ SearchVar(markup_bold)
+ SearchVar(markup_italics)
+ SearchVar(markup_strike)
+ SearchVar(markup_underline)
+ SearchVar(markup_regex)
+ SearchVar(markup_tags)
+ SearchVar(clients)
+ SearchVar(admins)
+ SearchVar(directory)
+ SearchVar(player_list)
+ SearchVar(mob_list)
+ SearchVar(human_mob_list)
+ SearchVar(silicon_mob_list)
+ SearchVar(living_mob_list)
+ SearchVar(dead_mob_list)
+ SearchVar(topic_commands)
+ SearchVar(topic_commands_names)
+ SearchVar(cable_list)
+ SearchVar(chemical_reactions_list)
+ SearchVar(chemical_reagents_list)
+ SearchVar(landmarks_list)
+ SearchVar(surgery_steps)
+ SearchVar(side_effects)
+ SearchVar(mechas_list)
+ SearchVar(joblist)
+ SearchVar(turfs)
+ SearchVar(all_species)
+ SearchVar(all_languages)
+ SearchVar(language_keys)
+ SearchVar(whitelisted_species)
+ SearchVar(playable_species)
+ SearchVar(poster_designs)
+ SearchVar(world_uplinks)
+ SearchVar(hair_styles_list)
+ SearchVar(hair_styles_male_list)
+ SearchVar(hair_styles_female_list)
+ SearchVar(facial_hair_styles_list)
+ SearchVar(facial_hair_styles_male_list)
+ SearchVar(facial_hair_styles_female_list)
+ SearchVar(skin_styles_female_list)
+ SearchVar(underwear_m)
+ SearchVar(underwear_f)
+ SearchVar(undershirt_t)
+ SearchVar(socks_f)
+ SearchVar(socks_m)
+ SearchVar(backbaglist)
+ SearchVar(exclude_jobs)
+ SearchVar(visual_nets)
+ SearchVar(cameranet)
+ SearchVar(cultnet)
+ SearchVar(rune_list)
+ SearchVar(escape_list)
+ SearchVar(endgame_exits)
+ SearchVar(endgame_safespawns)
+ SearchVar(syndicate_access)
+ SearchVar(cloaking_devices)
+ SearchVar(church_name)
+ SearchVar(command_name)
+ SearchVar(religion_name)
+ SearchVar(syndicate_name)
+ SearchVar(syndicate_code_phrase)
+ SearchVar(syndicate_code_response)
+ SearchVar(roundstart_hour)
+ SearchVar(next_duration_update)
+ SearchVar(last_round_duration)
+ SearchVar(common_tools)
+ SearchVar(WALLITEMS)
+ SearchVar(sortInstance)
+ SearchVar(cmp_field)
+ SearchVar(tk_maxrange)
+ SearchVar(global_hud)
+ SearchVar(global_huds)
+ SearchVar(robot_inventory)
+ SearchVar(pipe_colors)
+ SearchVar(RADIO_LOW_FREQ)
+ SearchVar(PUBLIC_LOW_FREQ)
+ SearchVar(PUBLIC_HIGH_FREQ)
+ SearchVar(RADIO_HIGH_FREQ)
+ SearchVar(BOT_FREQ)
+ SearchVar(COMM_FREQ)
+ SearchVar(ERT_FREQ)
+ SearchVar(AI_FREQ)
+ SearchVar(DTH_FREQ)
+ SearchVar(SYND_FREQ)
+ SearchVar(ENT_FREQ)
+ SearchVar(PUB_FREQ)
+ SearchVar(SEC_FREQ)
+ SearchVar(ENG_FREQ)
+ SearchVar(MED_FREQ)
+ SearchVar(SCI_FREQ)
+ SearchVar(SRV_FREQ)
+ SearchVar(SUP_FREQ)
+ SearchVar(MED_I_FREQ)
+ SearchVar(SEC_I_FREQ)
+ SearchVar(radiochannels)
+ SearchVar(CENT_FREQS)
+ SearchVar(ANTAG_FREQS)
+ SearchVar(DEPT_FREQS)
+ SearchVar(RADIO_DEFAULT)
+ SearchVar(RADIO_TO_AIRALARM)
+ SearchVar(RADIO_FROM_AIRALARM)
+ SearchVar(RADIO_CHAT)
+ SearchVar(RADIO_ATMOSIA)
+ SearchVar(RADIO_NAVBEACONS)
+ SearchVar(RADIO_AIRLOCK)
+ SearchVar(RADIO_SECBOT)
+ SearchVar(RADIO_MULEBOT)
+ SearchVar(RADIO_MAGNETS)
+ SearchVar(radio_controller)
+ SearchVar(gamemode_cache)
+ SearchVar(vote)
+ SearchVar(round_voters)
+ SearchVar(panic_targets)
+ SearchVar(panic_targets_data_loss)
+ SearchVar(Failsafe)
+ SearchVar(Master)
+ SearchVar(MC_restart_clear)
+ SearchVar(MC_restart_timeout)
+ SearchVar(MC_restart_count)
+ SearchVar(CURRENT_TICKLIMIT)
+ SearchVar(SSalarm)
+ SearchVar(SSchemistry)
+ SearchVar(SSeffects)
+ SearchVar(emergency_shuttle)
+ SearchVar(SSexplosives)
+ SearchVar(SSgarbage)
+ SearchVar(SSicon_smooth)
+ SearchVar(SSlighting)
+ SearchVar(SSnanoui)
+ SearchVar(SSnightlight)
+ SearchVar(SSorbit)
+ SearchVar(SSparallax)
+ SearchVar(shuttle_controller)
+ SearchVar(sun)
+ SearchVar(SScargo)
+ SearchVar(SSticker)
+ SearchVar(SStimer)
+ SearchVar(SSvote)
+ SearchVar(SSwireless)
+ SearchVar(SSatoms)
+ SearchVar(SSxenoarch)
+ SearchVar(SScalamity)
+ SearchVar(SSdisease)
+ SearchVar(SSmodifiers)
+ SearchVar(SSoverlays)
+ SearchVar(SSpipenet)
+ SearchVar(SSprocessing)
+ SearchVar(base_law_type)
+ SearchVar(discord_bot)
+ SearchVar(diseases)
+ SearchVar(modules)
+ SearchVar(all_supply_groups)
+ SearchVar(archive_diseases)
+ SearchVar(advance_cures)
+ SearchVar(list_symptoms)
+ SearchVar(dictionary_symptoms)
+ SearchVar(SYMPTOM_ACTIVATION_PROB)
+ SearchVar(revdata)
+ SearchVar(all_observable_events)
+ SearchVar(destroyed_event)
+ SearchVar(moved_event)
+ SearchVar(task_triggered_event)
+ SearchVar(camera_repository)
+ SearchVar(crew_repository)
+ SearchVar(uplink)
+ SearchVar(AIRLOCK_WIRE_IDSCAN)
+ SearchVar(AIRLOCK_WIRE_MAIN_POWER1)
+ SearchVar(AIRLOCK_WIRE_MAIN_POWER2)
+ SearchVar(AIRLOCK_WIRE_DOOR_BOLTS)
+ SearchVar(AIRLOCK_WIRE_BACKUP_POWER1)
+ SearchVar(AIRLOCK_WIRE_BACKUP_POWER2)
+ SearchVar(AIRLOCK_WIRE_OPEN_DOOR)
+ SearchVar(AIRLOCK_WIRE_AI_CONTROL)
+ SearchVar(AIRLOCK_WIRE_ELECTRIFY)
+ SearchVar(AIRLOCK_WIRE_SAFETY)
+ SearchVar(AIRLOCK_WIRE_SPEED)
+ SearchVar(AIRLOCK_WIRE_LIGHT)
+ SearchVar(AALARM_WIRE_IDSCAN)
+ SearchVar(AALARM_WIRE_POWER)
+ SearchVar(AALARM_WIRE_SYPHON)
+ SearchVar(AALARM_WIRE_AI_CONTROL)
+ SearchVar(AALARM_WIRE_AALARM)
+ SearchVar(AUTOLATHE_HACK_WIRE)
+ SearchVar(AUTOLATHE_SHOCK_WIRE)
+ SearchVar(AUTOLATHE_DISABLE_WIRE)
+ SearchVar(CAMERA_WIRE_FOCUS)
+ SearchVar(CAMERA_WIRE_POWER)
+ SearchVar(CAMERA_WIRE_LIGHT)
+ SearchVar(CAMERA_WIRE_ALARM)
+ SearchVar(CAMERA_WIRE_NOTHING1)
+ SearchVar(CAMERA_WIRE_NOTHING2)
+ SearchVar(WIRE_EXPLODE)
+ SearchVar(WIRE_POWER1)
+ SearchVar(WIRE_POWER2)
+ SearchVar(WIRE_AVOIDANCE)
+ SearchVar(WIRE_LOADCHECK)
+ SearchVar(WIRE_MOTOR1)
+ SearchVar(WIRE_MOTOR2)
+ SearchVar(WIRE_REMOTE_RX)
+ SearchVar(WIRE_REMOTE_TX)
+ SearchVar(WIRE_BEACON_RX)
+ SearchVar(NUCLEARBOMB_WIRE_LIGHT)
+ SearchVar(NUCLEARBOMB_WIRE_TIMING)
+ SearchVar(NUCLEARBOMB_WIRE_SAFETY)
+ SearchVar(PARTICLE_TOGGLE_WIRE)
+ SearchVar(PARTICLE_STRENGTH_WIRE)
+ SearchVar(PARTICLE_INTERFACE_WIRE)
+ SearchVar(PARTICLE_LIMIT_POWER_WIRE)
+ SearchVar(WIRE_SIGNAL)
+ SearchVar(WIRE_RECEIVE)
+ SearchVar(WIRE_TRANSMIT)
+ SearchVar(BORG_WIRE_LAWCHECK)
+ SearchVar(BORG_WIRE_MAIN_POWER)
+ SearchVar(BORG_WIRE_LOCKED_DOWN)
+ SearchVar(BORG_WIRE_AI_CONTROL)
+ SearchVar(BORG_WIRE_CAMERA)
+ SearchVar(SMARTFRIDGE_WIRE_ELECTRIFY)
+ SearchVar(SMARTFRIDGE_WIRE_THROW)
+ SearchVar(SMARTFRIDGE_WIRE_IDSCAN)
+ SearchVar(SMES_WIRE_RCON)
+ SearchVar(SMES_WIRE_INPUT)
+ SearchVar(SMES_WIRE_OUTPUT)
+ SearchVar(SMES_WIRE_GROUNDING)
+ SearchVar(SMES_WIRE_FAILSAFES)
+ SearchVar(SUIT_STORAGE_WIRE_ELECTRIFY)
+ SearchVar(SUIT_STORAGE_WIRE_SAFETY)
+ SearchVar(SUIT_STORAGE_WIRE_LOCKED)
+ SearchVar(VENDING_WIRE_THROW)
+ SearchVar(VENDING_WIRE_CONTRABAND)
+ SearchVar(VENDING_WIRE_ELECTRIFY)
+ SearchVar(VENDING_WIRE_IDSCAN)
+ SearchVar(same_wires)
+ SearchVar(wireColours)
+ SearchVar(PDA_Manifest)
+ SearchVar(ManifestJSON)
+ SearchVar(accessible_z_levels)
+ SearchVar(base_turf_by_z)
+ SearchVar(newscaster_standard_feeds)
+ SearchVar(announced_news_types)
+ SearchVar(send_emergency_team)
+ SearchVar(ert_base_chance)
+ SearchVar(can_call_ert)
+ SearchVar(shatter_sound)
+ SearchVar(explosion_sound)
+ SearchVar(spark_sound)
+ SearchVar(rustle_sound)
+ SearchVar(punch_sound)
+ SearchVar(clown_sound)
+ SearchVar(swing_hit_sound)
+ SearchVar(hiss_sound)
+ SearchVar(page_sound)
+ SearchVar(defaultfootsteps)
+ SearchVar(concretefootsteps)
+ SearchVar(grassfootsteps)
+ SearchVar(dirtfootsteps)
+ SearchVar(waterfootsteps)
+ SearchVar(sandfootsteps)
+ SearchVar(gravelfootsteps)
+ SearchVar(footstepfx)
+ SearchVar(FALLOFF_SOUNDS)
+ SearchVar(all_antag_types)
+ SearchVar(all_antag_spawnpoints)
+ SearchVar(antag_names_to_ids)
+ SearchVar(borers)
+ SearchVar(xenomorphs)
+ SearchVar(actor)
+ SearchVar(commandos)
+ SearchVar(deathsquad)
+ SearchVar(ert)
+ SearchVar(mercs)
+ SearchVar(ninjas)
+ SearchVar(raiders)
+ SearchVar(wizards)
+ SearchVar(cult)
+ SearchVar(highlanders)
+ SearchVar(loyalists)
+ SearchVar(renegades)
+ SearchVar(revs)
+ SearchVar(malf)
+ SearchVar(vampire_thrall)
+ SearchVar(traitors)
+ SearchVar(vamp)
+ SearchVar(forced_ambiance_list)
+ SearchVar(teleportlocs)
+ SearchVar(ghostteleportlocs)
+ SearchVar(centcom_areas)
+ SearchVar(the_station_areas)
+ SearchVar(dna_activity_bounds)
+ SearchVar(assigned_blocks)
+ SearchVar(dna_genes)
+ SearchVar(eventchance)
+ SearchVar(hadevent)
+ SearchVar(antag_add_failed)
+ SearchVar(additional_antag_types)
+ SearchVar(all_objectives)
+ SearchVar(process_objectives)
+ SearchVar(possible_changeling_IDs)
+ SearchVar(hivemind_bank)
+ SearchVar(powers)
+ SearchVar(powerinstances)
+ SearchVar(narsie_behaviour)
+ SearchVar(narsie_cometh)
+ SearchVar(narsie_list)
+ SearchVar(cultwords)
+ SearchVar(runedec)
+ SearchVar(engwords)
+ SearchVar(rnwords)
+ SearchVar(sacrificed)
+ SearchVar(universe_has_ended)
+ SearchVar(Holiday)
+ SearchVar(nuke_disks)
+ SearchVar(vampirepower_types)
+ SearchVar(vampirepowers)
+ SearchVar(ghost_all_access)
+ SearchVar(job_master)
+ SearchVar(ENGSEC)
+ SearchVar(CAPTAIN)
+ SearchVar(HOS)
+ SearchVar(WARDEN)
+ SearchVar(DETECTIVE)
+ SearchVar(OFFICER)
+ SearchVar(CHIEF)
+ SearchVar(ENGINEER)
+ SearchVar(ATMOSTECH)
+ SearchVar(AI)
+ SearchVar(CYBORG)
+ SearchVar(INTERN_SEC)
+ SearchVar(INTERN_ENG)
+ SearchVar(MEDSCI)
+ SearchVar(RD)
+ SearchVar(SCIENTIST)
+ SearchVar(CHEMIST)
+ SearchVar(CMO)
+ SearchVar(DOCTOR)
+ SearchVar(GENETICIST)
+ SearchVar(VIROLOGIST)
+ SearchVar(PSYCHIATRIST)
+ SearchVar(ROBOTICIST)
+ SearchVar(XENOBIOLOGIST)
+ SearchVar(PARAMEDIC)
+ SearchVar(INTERN_MED)
+ SearchVar(INTERN_SCI)
+ SearchVar(CIVILIAN)
+ SearchVar(HOP)
+ SearchVar(BARTENDER)
+ SearchVar(BOTANIST)
+ SearchVar(CHEF)
+ SearchVar(JANITOR)
+ SearchVar(LIBRARIAN)
+ SearchVar(QUARTERMASTER)
+ SearchVar(CARGOTECH)
+ SearchVar(MINER)
+ SearchVar(LAWYER)
+ SearchVar(CHAPLAIN)
+ SearchVar(CLOWN)
+ SearchVar(MIME)
+ SearchVar(ASSISTANT)
+ SearchVar(assistant_occupations)
+ SearchVar(command_positions)
+ SearchVar(engineering_positions)
+ SearchVar(medical_positions)
+ SearchVar(science_positions)
+ SearchVar(cargo_positions)
+ SearchVar(civilian_positions)
+ SearchVar(security_positions)
+ SearchVar(nonhuman_positions)
+ SearchVar(whitelist)
+ SearchVar(captain_announcement)
+ SearchVar(doppler_arrays)
+ SearchVar(floor_light_cache)
+ SearchVar(HOLOPAD_MODE)
+ SearchVar(navbeacons)
+ SearchVar(news_network)
+ SearchVar(allCasters)
+ SearchVar(bomb_set)
+ SearchVar(turret_icons)
+ SearchVar(req_console_assistance)
+ SearchVar(req_console_supplies)
+ SearchVar(req_console_information)
+ SearchVar(allConsoles)
+ SearchVar(ai_status_emotions)
+ SearchVar(station_networks)
+ SearchVar(engineering_networks)
+ SearchVar(priority_air_alarms)
+ SearchVar(minor_air_alarms)
+ SearchVar(air_alarm_topic)
+ SearchVar(specops_shuttle_moving_to_station)
+ SearchVar(specops_shuttle_moving_to_centcom)
+ SearchVar(specops_shuttle_at_station)
+ SearchVar(specops_shuttle_can_send)
+ SearchVar(specops_shuttle_time)
+ SearchVar(specops_shuttle_timeleft)
+ SearchVar(syndicate_elite_shuttle_moving_to_station)
+ SearchVar(syndicate_elite_shuttle_moving_to_mothership)
+ SearchVar(syndicate_elite_shuttle_at_station)
+ SearchVar(syndicate_elite_shuttle_can_send)
+ SearchVar(syndicate_elite_shuttle_time)
+ SearchVar(syndicate_elite_shuttle_timeleft)
+ SearchVar(recentmessages)
+ SearchVar(message_delay)
+ SearchVar(telecomms_list)
+ SearchVar(word_to_uristrune_table)
+ SearchVar(uristrune_cache)
+ SearchVar(slot_flags_enumeration)
+ SearchVar(BUMP_TELEPORTERS)
+ SearchVar(splatter_cache)
+ SearchVar(fluidtrack_cache)
+ SearchVar(active_radio_jammers)
+ SearchVar(default_uplink_selection)
+ SearchVar(chatrooms)
+ SearchVar(PDAs)
+ SearchVar(default_internal_channels)
+ SearchVar(default_medbay_channels)
+ SearchVar(NO_EMAG_ACT)
+ SearchVar(last_chew)
+ SearchVar(cached_icons)
+ SearchVar(hazard_overlays)
+ SearchVar(tape_roll_applications)
+ SearchVar(ashtray_cache)
+ SearchVar(MIN_ACTIVE_TIME)
+ SearchVar(MAX_ACTIVE_TIME)
+ SearchVar(stool_cache)
+ SearchVar(enterloopsanity)
+ SearchVar(flooring_types)
+ SearchVar(floor_decals)
+ SearchVar(random_junk)
+ SearchVar(flooring_cache)
+ SearchVar(js_byjax)
+ SearchVar(js_dropdowns)
+ SearchVar(BSACooldown)
+ SearchVar(floorIsLava)
+ SearchVar(admin_ranks)
+ SearchVar(admin_secrets)
+ SearchVar(admin_verbs_default)
+ SearchVar(admin_verbs_admin)
+ SearchVar(admin_verbs_ban)
+ SearchVar(admin_verbs_sounds)
+ SearchVar(admin_verbs_fun)
+ SearchVar(admin_verbs_spawn)
+ SearchVar(admin_verbs_server)
+ SearchVar(admin_verbs_debug)
+ SearchVar(admin_verbs_paranoid_debug)
+ SearchVar(admin_verbs_possess)
+ SearchVar(admin_verbs_permissions)
+ SearchVar(admin_verbs_rejuv)
+ SearchVar(admin_verbs_hideable)
+ SearchVar(admin_verbs_mod)
+ SearchVar(admin_verbs_dev)
+ SearchVar(admin_verbs_cciaa)
+ SearchVar(jobban_runonce)
+ SearchVar(jobban_keylist)
+ SearchVar(admin_datums)
+ SearchVar(CMinutes)
+ SearchVar(Banlist)
+ SearchVar(adminhelp_ignored_words)
+ SearchVar(checked_for_inactives)
+ SearchVar(inactive_keys)
+ SearchVar(camera_range_display_status)
+ SearchVar(intercom_range_display_status)
+ SearchVar(debug_verbs)
+ SearchVar(prevent_airgroup_regroup)
+ SearchVar(say_disabled)
+ SearchVar(movement_disabled)
+ SearchVar(movement_disabled_exception)
+ SearchVar(forbidden_varedit_object_types)
+ SearchVar(VVlocked)
+ SearchVar(VVicon_edit_lock)
+ SearchVar(VVckey_edit)
+ SearchVar(sounds_cache)
+ SearchVar(commandos_possible)
+ SearchVar(random_stock_common)
+ SearchVar(random_stock_uncommon)
+ SearchVar(random_stock_rare)
+ SearchVar(random_stock_large)
+ SearchVar(asset_datums)
+ SearchVar(preferences_datums)
+ SearchVar(seen_citizenships)
+ SearchVar(seen_systems)
+ SearchVar(seen_factions)
+ SearchVar(seen_religions)
+ SearchVar(citizenship_choices)
+ SearchVar(home_system_choices)
+ SearchVar(faction_choices)
+ SearchVar(religion_choices)
+ SearchVar(spawntypes)
+ SearchVar(uplink_locations)
+ SearchVar(valid_bloodtypes)
+ SearchVar(gear_tweak_free_color_choice)
+ SearchVar(loadout_categories)
+ SearchVar(gear_datums)
+ SearchVar(breach_brute_descriptors)
+ SearchVar(breach_burn_descriptors)
+ SearchVar(FINGERPRINT_COMPLETE)
+ SearchVar(current_date_string)
+ SearchVar(vendor_account)
+ SearchVar(station_account)
+ SearchVar(department_accounts)
+ SearchVar(num_financial_terminals)
+ SearchVar(next_account_number)
+ SearchVar(all_money_accounts)
+ SearchVar(economy_init)
+ SearchVar(weighted_randomevent_locations)
+ SearchVar(weighted_mundaneevent_locations)
+ SearchVar(severity_to_string)
+ SearchVar(event_last_fired)
+ SearchVar(dreams)
+ SearchVar(non_fakeattack_weapons)
+ SearchVar(ghost_traps)
+ SearchVar(holodeck_programs)
+ SearchVar(fruit_icon_cache)
+ SearchVar(plant_seed_sprites)
+ SearchVar(wax_recipes)
+ SearchVar(admin_verbs_lighting)
+ SearchVar(liquid_delay)
+ SearchVar(puddles)
+ SearchVar(maploader)
+ SearchVar(_preloader)
+ SearchVar(swapmaps_iconcache)
+ SearchVar(SWAPMAPS_SAV)
+ SearchVar(SWAPMAPS_TEXT)
+ SearchVar(swapmaps_mode)
+ SearchVar(swapmaps_compiled_maxx)
+ SearchVar(swapmaps_compiled_maxy)
+ SearchVar(swapmaps_compiled_maxz)
+ SearchVar(swapmaps_initialized)
+ SearchVar(swapmaps_loaded)
+ SearchVar(swapmaps_byname)
+ SearchVar(name_to_material)
+ SearchVar(ore_data)
+ SearchVar(dview_mob)
+ SearchVar(holder_mob_icon_cache)
+ SearchVar(slot_equipment_priority)
+ SearchVar(base_miss_chance)
+ SearchVar(organ_rel_size)
+ SearchVar(intents)
+ SearchVar(humanoid_mobs_specific)
+ SearchVar(humanoid_mobs_inclusive)
+ SearchVar(synthetic_mobs_specific)
+ SearchVar(synthetic_mobs_inclusive)
+ SearchVar(wierd_mobs_specific)
+ SearchVar(wierd_mobs_inclusive)
+ SearchVar(ghost_darkness_images)
+ SearchVar(ghost_sightless_images)
+ SearchVar(department_radio_keys)
+ SearchVar(channel_to_radio_key)
+ SearchVar(cleanbot_types)
+ SearchVar(diona_banned_languages)
+ SearchVar(alcohol_clumsy)
+ SearchVar(sparring_attack_cache)
+ SearchVar(human_icon_cache)
+ SearchVar(tail_icon_cache)
+ SearchVar(light_overlay_cache)
+ SearchVar(damage_icon_parts)
+ SearchVar(MAXIMUM_MEME_POINTS)
+ SearchVar(host_brain)
+ SearchVar(controlling)
+ SearchVar(ai_list)
+ SearchVar(ai_verbs_default)
+ SearchVar(default_ai_icon)
+ SearchVar(ai_icons)
+ SearchVar(empty_playable_ai_cores)
+ SearchVar(pai_emotions)
+ SearchVar(robot_custom_icons)
+ SearchVar(robot_modules)
+ SearchVar(mob_hat_cache)
+ SearchVar(protected_objects)
+ SearchVar(SKILL_NONE)
+ SearchVar(SKILL_BASIC)
+ SearchVar(SKILL_ADEPT)
+ SearchVar(SKILL_EXPERT)
+ SearchVar(SKILLS)
+ SearchVar(SKILL_ENGINEER)
+ SearchVar(SKILL_ORGAN_ROBOTICIST)
+ SearchVar(SKILL_SECURITY_OFFICER)
+ SearchVar(SKILL_CHEMIST)
+ SearchVar(SKILL_PRE)
+ SearchVar(file_uid)
+ SearchVar(comm_message_listeners)
+ SearchVar(global_message_listener)
+ SearchVar(last_message_id)
+ SearchVar(nttransfer_uid)
+ SearchVar(warrant_uid)
+ SearchVar(ntnet_card_uid)
+ SearchVar(ntnet_global)
+ SearchVar(ntnrc_uid)
+ SearchVar(z_levels)
+ SearchVar(BLOOD_VOLUME_SAFE)
+ SearchVar(BLOOD_VOLUME_OKAY)
+ SearchVar(BLOOD_VOLUME_BAD)
+ SearchVar(BLOOD_VOLUME_SURVIVE)
+ SearchVar(organ_cache)
+ SearchVar(limb_icon_cache)
+ SearchVar(all_robolimbs)
+ SearchVar(chargen_robolimbs)
+ SearchVar(basic_robolimb)
+ SearchVar(moving_levels)
+ SearchVar(cached_space)
+ SearchVar(map_sectors)
+ SearchVar(ship_engines)
+ SearchVar(allfaxes)
+ SearchVar(arrived_faxes)
+ SearchVar(sent_faxes)
+ SearchVar(alldepartments)
+ SearchVar(admin_departments)
+ SearchVar(photo_count)
+ SearchVar(possible_cable_coil_colours)
+ SearchVar(rad_collectors)
+ SearchVar(blacklisted_tesla_types)
+ SearchVar(random_maps)
+ SearchVar(map_count)
+ SearchVar(supply_drop)
+ SearchVar(maze_cell_count)
+ SearchVar(lunchables_lunches_)
+ SearchVar(lunchables_snacks_)
+ SearchVar(lunchables_drinks_)
+ SearchVar(lunchables_drink_reagents_)
+ SearchVar(lunchables_ethanol_reagents_)
+ SearchVar(message_servers)
+ SearchVar(blackbox)
+ SearchVar(responsive_carriers)
+ SearchVar(finds_as_strings)
+ SearchVar(ascii_A)
+ SearchVar(ascii_Z)
+ SearchVar(ascii_a)
+ SearchVar(ascii_z)
+ SearchVar(ascii_DOLLAR)
+ SearchVar(ascii_ZERO)
+ SearchVar(ascii_NINE)
+ SearchVar(ascii_UNDERSCORE)
+ SearchVar(OOP_OR)
+ SearchVar(OOP_AND)
+ SearchVar(OOP_BIT)
+ SearchVar(OOP_EQUAL)
+ SearchVar(OOP_COMPARE)
+ SearchVar(OOP_ADD)
+ SearchVar(OOP_MULTIPLY)
+ SearchVar(OOP_POW)
+ SearchVar(OOP_UNARY)
+ SearchVar(OOP_GROUP)
+ SearchVar(KW_FAIL)
+ SearchVar(KW_PASS)
+ SearchVar(KW_ERR)
+ SearchVar(KW_WARN)
+ SearchVar(maint_all_access)
+ SearchVar(spells)
+ SearchVar(artefact_feedback)
+ SearchVar(GPS_list)
+ SearchVar(gps_by_type)
+ SearchVar(ventcrawl_machinery)
+ SearchVar(can_enter_vent_with)
+ SearchVar(ALL_ANTIGENS)
+ SearchVar(virusDB)
+ SearchVar(all_unit_tests_passed)
+ SearchVar(failed_unit_tests)
+ SearchVar(total_unit_tests)
+ SearchVar(ascii_esc)
+ SearchVar(ascii_red)
+ SearchVar(ascii_green)
+ SearchVar(ascii_reset)
+ SearchVar(assigned)
+ SearchVar(created)
+ SearchVar(merged)
+ SearchVar(invalid_zone)
+ SearchVar(air_blocked)
+ SearchVar(zone_blocked)
+ SearchVar(blocked)
+ SearchVar(mark)
+ SearchVar(contamination_overlay)
+ SearchVar(vsc)
+
+#endif
diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm
new file mode 100644
index 00000000000..02dd8edf5c6
--- /dev/null
+++ b/code/controllers/subsystems/garbage.dm
@@ -0,0 +1,263 @@
+var/datum/controller/subsystem/garbage_collector/SSgarbage
+
+/datum/controller/subsystem/garbage_collector
+ name = "Garbage"
+ priority = SS_PRIORITY_GARBAGE
+ wait = 5
+ flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
+
+ var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
+ var/delslasttick = 0 // number of del()'s we've done this tick
+ var/gcedlasttick = 0 // number of things that gc'ed last tick
+ var/totaldels = 0
+ var/totalgcs = 0
+
+ var/highest_del_time = 0
+ var/highest_del_tickusage = 0
+
+ var/list/queue = list() // list of refID's of things that should be garbage collected
+ // refID's are associated with the time at which they time out and need to be manually del()
+ // we do this so we aren't constantly locating them and preventing them from being gc'd
+
+ var/list/tobequeued = list() //We store the references of things to be added to the queue seperately so we can spread out GC overhead over a few ticks
+
+ var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
+ // the types are stored as strings
+ var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call
+
+ var/list/noqdelhint = list()// list of all types that do not return a QDEL_HINT
+ // all types that did not respect qdel(A, force=TRUE) and returned one
+ // of the immortality qdel hints
+ var/list/noforcerespect = list()
+
+#ifdef TESTING
+ var/list/qdel_list = list() // list of all types that have been qdel()eted
+#endif
+
+/datum/controller/subsystem/garbage_collector/New()
+ NEW_SS_GLOBAL(SSgarbage)
+
+/datum/controller/subsystem/garbage_collector/stat_entry(msg)
+ msg += "Q:[queue.len]|D:[delslasttick]|G:[gcedlasttick]|"
+ msg += "GR:"
+ if (!(delslasttick+gcedlasttick))
+ msg += "n/a|"
+ else
+ msg += "[round((gcedlasttick/(delslasttick+gcedlasttick))*100, 0.01)]%|"
+
+ msg += "TD:[totaldels]|TG:[totalgcs]|"
+ if (!(totaldels+totalgcs))
+ msg += "n/a|"
+ else
+ msg += "TGR:[round((totalgcs/(totaldels+totalgcs))*100, 0.01)]%"
+ ..(msg)
+
+/datum/controller/subsystem/garbage_collector/fire()
+ HandleToBeQueued()
+ if(state == SS_RUNNING)
+ HandleQueue()
+
+ if (state == SS_PAUSED)
+ state = SS_RUNNING
+
+//If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
+//Don't attempt to optimize, not worth the effort.
+/datum/controller/subsystem/garbage_collector/proc/HandleToBeQueued()
+ var/list/tobequeued = src.tobequeued
+ var/starttime = world.time
+ var/starttimeofday = world.timeofday
+ while(tobequeued.len && starttime == world.time && starttimeofday == world.timeofday)
+ if (MC_TICK_CHECK)
+ break
+ var/ref = tobequeued[1]
+ Queue(ref)
+ tobequeued.Cut(1, 2)
+
+/datum/controller/subsystem/garbage_collector/proc/HandleQueue()
+ delslasttick = 0
+ gcedlasttick = 0
+ var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del()
+ var/list/queue = src.queue
+ var/starttime = world.time
+ var/starttimeofday = world.timeofday
+ while(queue.len && starttime == world.time && starttimeofday == world.timeofday)
+ if (MC_TICK_CHECK)
+ break
+ var/refID = queue[1]
+ if (!refID)
+ queue.Cut(1, 2)
+ continue
+
+ var/GCd_at_time = queue[refID]
+ if(GCd_at_time > time_to_kill)
+ break // Everything else is newer, skip them
+ queue.Cut(1, 2)
+ var/datum/A
+ A = locate(refID)
+ if (A && A.gcDestroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
+ #ifdef GC_FAILURE_HARD_LOOKUP
+ A.find_references()
+ #endif
+
+ // Something's still referring to the qdel'd object. Kill it.
+ var/type = A.type
+ log_gc("-- \ref[A] | [type] was unable to be GC'd and was deleted --", type)
+ didntgc["[type]"]++
+
+ HardDelete(A)
+
+ ++delslasttick
+ ++totaldels
+ else
+ ++gcedlasttick
+ ++totalgcs
+
+/datum/controller/subsystem/garbage_collector/proc/QueueForQueuing(datum/A)
+ if (istype(A) && A.gcDestroyed == GC_CURRENTLY_BEING_QDELETED)
+ tobequeued += A
+ A.gcDestroyed = GC_QUEUED_FOR_QUEUING
+
+/datum/controller/subsystem/garbage_collector/proc/Queue(datum/A)
+ if (!istype(A) || (!isnull(A.gcDestroyed) && A.gcDestroyed >= 0))
+ return
+ if (A.gcDestroyed == GC_QUEUED_FOR_HARD_DEL)
+ HardDelete(A)
+ return
+ var/gctime = world.time
+ var/refid = "\ref[A]"
+
+ A.gcDestroyed = gctime
+
+ if (queue[refid])
+ queue -= refid // Removing any previous references that were GC'd so that the current object will be at the end of the list.
+
+ queue[refid] = gctime
+
+// For profiling.
+/datum/controller/subsystem/garbage_collector/proc/HardDelete(datum/A)
+ var/time = world.timeofday
+ var/tick = world.tick_usage
+ var/ticktime = world.time
+
+ var/type = A.type
+ var/refID = "\ref[A]"
+
+ del(A)
+
+ tick = (world.tick_usage-tick+((world.time-ticktime)/world.tick_lag*100))
+ if (tick > highest_del_tickusage)
+ highest_del_tickusage = tick
+ time = world.timeofday - time
+ if (!time && TICK_DELTA_TO_MS(tick) > 1)
+ time = TICK_DELTA_TO_MS(tick)/100
+ if (time > highest_del_time)
+ highest_del_time = time
+ if (time > 10)
+ log_gc("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete)", type, TRUE)
+ message_admins("Error: [type]([refID]) took longer then 1 second to delete (took [time/10] seconds to delete).")
+ postpone(time/5)
+
+/datum/controller/subsystem/garbage_collector/proc/HardQueue(datum/A)
+ if (istype(A) && A.gcDestroyed == GC_CURRENTLY_BEING_QDELETED)
+ tobequeued += A
+ A.gcDestroyed = GC_QUEUED_FOR_HARD_DEL
+
+/datum/controller/subsystem/garbage_collector/Recover()
+ if (istype(SSgarbage.queue))
+ queue |= SSgarbage.queue
+ if (istype(SSgarbage.tobequeued))
+ tobequeued |= SSgarbage.tobequeued
+
+// Should be treated as a replacement for the 'del' keyword.
+// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
+/proc/qdel(datum/D, force=FALSE)
+ if(!D)
+ return
+#ifdef TESTING
+ SSgarbage.qdel_list += "[D.type]"
+#endif
+ if(!istype(D))
+ del(D)
+ else if(isnull(D.gcDestroyed))
+ D.gcDestroyed = GC_CURRENTLY_BEING_QDELETED
+ var/start_time = world.time
+ var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up.
+ if(world.time != start_time)
+ SSgarbage.sleptDestroy["[D.type]"]++
+ if(!D)
+ return
+ switch(hint)
+ if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion.
+ SSgarbage.QueueForQueuing(D)
+ if (QDEL_HINT_IWILLGC)
+ D.gcDestroyed = world.time
+ return
+ if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory.
+ if(!force)
+ D.gcDestroyed = null //clear the gc variable (important!)
+ return
+ // Returning LETMELIVE after being told to force destroy
+ // indicates the objects Destroy() does not respect force
+ if(!SSgarbage.noforcerespect["[D.type]"])
+ SSgarbage.noforcerespect["[D.type]"] = "[D.type]"
+ testing("WARNING: [D.type] has been force deleted, but is \
+ returning an immortal QDEL_HINT, indicating it does \
+ not respect the force flag for qdel(). It has been \
+ placed in the queue, further instances of this type \
+ will also be queued.")
+ SSgarbage.QueueForQueuing(D)
+ if (QDEL_HINT_HARDDEL) //qdel should assume this object won't gc, and queue a hard delete using a hard reference to save time from the locate()
+ SSgarbage.HardQueue(D)
+ if (QDEL_HINT_HARDDEL_NOW) //qdel should assume this object won't gc, and hard del it post haste.
+ SSgarbage.HardDelete(D)
+ if (QDEL_HINT_FINDREFERENCE)//qdel will, if TESTING is enabled, display all references to this object, then queue the object for deletion.
+ SSgarbage.QueueForQueuing(D)
+ #ifdef TESTING
+ D.find_references()
+ #endif
+ if (QDEL_HINT_POOL)
+ if (!force)
+ D.gcDestroyed = null
+ returnToPool(D)
+ return
+ // Returning POOL after being told to force destroy
+ // indicates the objects Destroy() does not respect force
+ if(!SSgarbage.noforcerespect["[D.type]"])
+ SSgarbage.noforcerespect["[D.type]"] = "[D.type]"
+ testing("WARNING: [D.type] has been force deleted, but is \
+ returning an immortal QDEL_HINT, indicating it does \
+ not respect the force flag for qdel(). It has been \
+ placed in the queue, further instances of this type \
+ will also be queued.")
+ SSgarbage.QueueForQueuing(D)
+ else
+ if(!SSgarbage.noqdelhint["[D.type]"])
+ SSgarbage.noqdelhint["[D.type]"] = "[D.type]"
+ testing("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.")
+ SSgarbage.QueueForQueuing(D)
+ else if(D.gcDestroyed == GC_CURRENTLY_BEING_QDELETED)
+ CRASH("[D.type] destroy proc was called multiple times, likely due to a qdel loop in the Destroy logic")
+
+// Default implementation of clean-up code.
+// This should be overridden to remove all references pointing to the object being destroyed.
+// Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE.
+/datum/proc/Destroy(force=FALSE)
+ nanomanager.close_uis(src)
+ tag = null
+ var/list/timers = active_timers
+ active_timers = null
+ for(var/thing in timers)
+ var/datum/timedevent/timer = thing
+ if (timer.spent)
+ continue
+ qdel(timer)
+ return QDEL_HINT_QUEUE
+
+/datum/var/gcDestroyed //Time when this object was destroyed.
+
+/icon/Destroy()
+ return QDEL_HINT_HARDDEL
+
+/client/Destroy()
+ ..()
+ return QDEL_HINT_HARDDEL_NOW
diff --git a/code/controllers/subsystems/icon_smooth.dm b/code/controllers/subsystems/icon_smooth.dm
new file mode 100644
index 00000000000..fcd81994bd5
--- /dev/null
+++ b/code/controllers/subsystems/icon_smooth.dm
@@ -0,0 +1,52 @@
+var/datum/controller/subsystem/icon_smooth/SSicon_smooth
+
+/datum/controller/subsystem/icon_smooth
+ name = "Icon Smoothing"
+ init_order = SS_INIT_SMOOTHING
+ wait = 1
+ priority = SS_PRIORITY_SMOOTHING
+ flags = SS_TICKER | SS_FIRE_IN_LOBBY
+
+ var/list/smooth_queue = list()
+
+ var/explosion_in_progress = FALSE
+
+/datum/controller/subsystem/icon_smooth/New()
+ NEW_SS_GLOBAL(SSicon_smooth)
+
+/datum/controller/subsystem/icon_smooth/Recover()
+ smooth_queue = SSicon_smooth.smooth_queue
+
+/datum/controller/subsystem/icon_smooth/fire()
+ if (explosion_in_progress)
+ return
+
+ while(smooth_queue.len)
+ var/atom/A = smooth_queue[smooth_queue.len]
+ smooth_queue.len--
+ smooth_icon(A)
+ if (MC_TICK_CHECK)
+ return
+ if (!smooth_queue.len)
+ suspend()
+
+/datum/controller/subsystem/icon_smooth/ExplosionStart()
+ explosion_in_progress = TRUE
+
+/datum/controller/subsystem/icon_smooth/ExplosionEnd()
+ explosion_in_progress = FALSE
+
+/datum/controller/subsystem/icon_smooth/Initialize()
+ for (var/zlevel = 1 to world.maxz)
+ smooth_zlevel(zlevel, FALSE)
+
+ var/queue = smooth_queue
+ smooth_queue = list()
+ for(var/V in queue)
+ var/atom/A = V
+ if(!A)
+ continue
+ smooth_icon(A)
+ CHECK_TICK
+
+ ..()
diff --git a/code/controllers/subsystems/icon_updates.dm b/code/controllers/subsystems/icon_updates.dm
new file mode 100644
index 00000000000..a5fe5941542
--- /dev/null
+++ b/code/controllers/subsystems/icon_updates.dm
@@ -0,0 +1,52 @@
+/var/datum/controller/subsystem/icon/SSicon_update
+
+/datum/controller/subsystem/icon
+ name = "Icon Updates"
+ flags = SS_BACKGROUND | SS_NO_INIT
+ wait = 1 // ds
+ priority = SS_PRIORITY_ICON_UPDATE
+
+ var/list/queue = list()
+ var/list/currentrun
+
+/datum/controller/subsystem/icon/New()
+ NEW_SS_GLOBAL(SSicon_update)
+
+/datum/controller/subsystem/icon/stat_entry()
+ ..("Q:[queue.len] P:[LAZYLEN(currentrun)]")
+
+/datum/controller/subsystem/icon/fire(resumed = FALSE)
+ if (!resumed)
+ currentrun = queue
+ queue = list()
+
+ var/list/curr = currentrun
+
+ if (!curr.len)
+ suspend()
+ return
+
+ while (curr.len)
+ var/atom/A = curr[curr.len]
+ curr.len--
+
+ A.icon_update_queued = FALSE
+ A.update_icon()
+ A.last_icon_update = world.time
+
+ if (MC_TICK_CHECK)
+ return
+
+/atom
+ var/last_icon_update
+ var/icon_update_queued
+ var/icon_update_delay
+
+/atom/proc/update_icon()
+
+/atom/proc/queue_icon_update()
+ if (!icon_update_queued && (!icon_update_delay || (last_icon_update + icon_update_delay < world.time)))
+ icon_update_queued = TRUE
+ SSicon_update.queue += src
+ if (SSicon_update.suspended)
+ SSicon_update.wake()
diff --git a/code/controllers/subsystems/initialization/asteroid.dm b/code/controllers/subsystems/initialization/asteroid.dm
new file mode 100644
index 00000000000..a2af1c1d36d
--- /dev/null
+++ b/code/controllers/subsystems/initialization/asteroid.dm
@@ -0,0 +1,30 @@
+/datum/controller/subsystem/asteroid
+ name = "Asteroid"
+ flags = SS_NO_FIRE | SS_NO_DISPLAY
+ init_order = SS_INIT_ASTEROID
+
+/datum/controller/subsystem/asteroid/Initialize(timeofday)
+ if(config.generate_asteroid)
+ // These values determine the specific area that the map is applied to.
+ // If you do not use the official Baycode moonbase map, you will need to change them.
+ // Create the chasms.
+ new /datum/random_map/automata/cave_system/chasms(null,0,0,3,255,255)
+ new /datum/random_map/automata/cave_system(null,0,0,3,255,255)
+ new /datum/random_map/automata/cave_system/chasms(null,0,0,4,255,255)
+ new /datum/random_map/automata/cave_system(null,0,0,4,255,255)
+ new /datum/random_map/automata/cave_system/chasms(null,0,0,5,255,255)
+ new /datum/random_map/automata/cave_system/high_yield(null,0,0,5,255,255)
+ new /datum/random_map/automata/cave_system/chasms/surface(null,0,0,6,255,255)
+ // Create the deep mining ore distribution map.
+ new /datum/random_map/noise/ore(null, 0, 0, 5, 64, 64)
+ new /datum/random_map/noise/ore(null, 0, 0, 4, 64, 64)
+ new /datum/random_map/noise/ore(null, 0, 0, 3, 64, 64)
+ var/counting_number
+ for(var/turf/simulated/open/chasm in world)
+ counting_number += 1
+ chasm.update()
+ var/counting_result = "Total number of chasms: [counting_number]"
+ admin_notice(span("danger", counting_result))
+ game_log("ASGEN", counting_result)
+
+ ..()
diff --git a/code/controllers/subsystems/initialization/atoms.dm b/code/controllers/subsystems/initialization/atoms.dm
new file mode 100644
index 00000000000..8379415c251
--- /dev/null
+++ b/code/controllers/subsystems/initialization/atoms.dm
@@ -0,0 +1,151 @@
+var/datum/controller/subsystem/atoms/SSatoms
+
+#define BAD_INIT_QDEL_BEFORE 1
+#define BAD_INIT_DIDNT_INIT 2
+#define BAD_INIT_SLEPT 4
+#define BAD_INIT_NO_HINT 8
+
+/datum/controller/subsystem/atoms
+ name = "Atoms"
+ init_order = SS_INIT_ATOMS
+ flags = SS_NO_FIRE
+
+ var/initialized = INITIALIZATION_INSSATOMS
+ var/old_initialized
+
+ var/list/late_loaders
+ var/list/created_atoms
+ var/list/late_qdel
+
+ var/list/BadInitializeCalls = list()
+
+/datum/controller/subsystem/atoms/New()
+ NEW_SS_GLOBAL(SSatoms)
+
+/datum/controller/subsystem/atoms/Initialize(timeofday)
+ initialized = INITIALIZATION_INNEW_MAPLOAD
+ InitializeAtoms()
+ makepowernets()
+ return ..()
+
+/datum/controller/subsystem/atoms/proc/InitializeAtoms(list/atoms)
+ if(initialized == INITIALIZATION_INSSATOMS)
+ return
+
+ initialized = INITIALIZATION_INNEW_MAPLOAD
+
+ LAZYINITLIST(late_loaders)
+ LAZYINITLIST(late_qdel)
+
+ var/count
+ var/list/mapload_arg = list(TRUE)
+ if(atoms)
+ created_atoms = list()
+ count = atoms.len
+ for(var/I in atoms)
+ if(InitAtom(I, mapload_arg))
+ atoms -= I
+ CHECK_TICK
+ else
+ count = 0
+ for(var/atom/A in world)
+ if(!A.initialized)
+ InitAtom(A, mapload_arg)
+ ++count
+ CHECK_TICK
+
+ admin_notice(span("danger", "Initialized [count] atoms."), R_DEBUG)
+ log_ss("atoms", "Initialized [count] atoms.")
+
+ initialized = INITIALIZATION_INNEW_REGULAR
+
+ if(late_loaders.len)
+ for(var/I in late_loaders)
+ var/atom/A = I
+ A.LateInitialize()
+ admin_notice(span("danger", "Late-initialized [late_loaders.len] atoms."), R_DEBUG)
+ log_ss("atoms", "Late initialized [late_loaders.len] atoms")
+ late_loaders.Cut()
+
+ if(late_qdel.len)
+ var/num_qdels = late_qdel.len
+ for(var/thing in late_qdel)
+ qdel(thing)
+
+ admin_notice(span("danger", "Late-qdeleted [num_qdels] atoms."), R_DEBUG)
+ log_ss("atoms", "Late qdeleted [num_qdels] atoms.")
+
+ late_qdel.Cut()
+
+ if(atoms)
+ . = created_atoms + atoms
+ created_atoms = null
+
+/datum/controller/subsystem/atoms/proc/InitAtom(atom/A, list/arguments)
+ var/the_type = A.type
+ if(QDELING(A))
+ BadInitializeCalls[the_type] |= BAD_INIT_QDEL_BEFORE
+ return TRUE
+
+ var/start_tick = world.time
+
+ var/result = A.Initialize(arglist(arguments))
+
+ if(start_tick != world.time)
+ BadInitializeCalls[the_type] |= BAD_INIT_SLEPT
+
+ if(result != INITIALIZE_HINT_NORMAL)
+ switch(result)
+ if(INITIALIZE_HINT_LATELOAD)
+ if(arguments[1]) //mapload
+ late_loaders += A
+ else
+ A.LateInitialize()
+ if(INITIALIZE_HINT_QDEL)
+ qdel(A)
+ return TRUE
+ if(INITIALIZE_HINT_LATEQDEL)
+ if(arguments[1]) //mapload
+ late_qdel += A
+ else
+ qdel(A)
+ return TRUE
+ else
+ BadInitializeCalls[the_type] |= BAD_INIT_NO_HINT
+
+ if(!A) //possible harddel
+ return TRUE
+ else if(!A.initialized)
+ BadInitializeCalls[the_type] |= BAD_INIT_DIDNT_INIT
+
+ return QDELETED(A)
+
+/datum/controller/subsystem/atoms/proc/InitLog()
+ . = ""
+ for(var/path in BadInitializeCalls)
+ . += "Path : [path] \n"
+ var/fails = BadInitializeCalls[path]
+ if(fails & BAD_INIT_DIDNT_INIT)
+ . += "- Didn't call atom/Initialize()\n"
+ if(fails & BAD_INIT_NO_HINT)
+ . += "- Didn't return an Initialize hint\n"
+ if(fails & BAD_INIT_QDEL_BEFORE)
+ . += "- Qdel'd in New()\n"
+ if(fails & BAD_INIT_SLEPT)
+ . += "- Slept during Initialize()\n"
+
+/*datum/controller/subsystem/atoms/Shutdown()
+ var/initlog = InitLog()
+ if(initlog)
+ world.log << initlog*/
+
+/datum/controller/subsystem/atoms/Recover()
+ initialized = SSatoms.initialized
+ if(initialized == INITIALIZATION_INNEW_MAPLOAD)
+ InitializeAtoms()
+ old_initialized = SSatoms.old_initialized
+
+#undef BAD_INIT_QDEL_BEFORE
+#undef BAD_INIT_DIDNT_INIT
+#undef BAD_INIT_SLEPT
+#undef BAD_INIT_NO_HINT
diff --git a/code/controllers/subsystems/initialization/misc_early.dm b/code/controllers/subsystems/initialization/misc_early.dm
new file mode 100644
index 00000000000..3d5c564eaa5
--- /dev/null
+++ b/code/controllers/subsystems/initialization/misc_early.dm
@@ -0,0 +1,45 @@
+// This is the first subsystem initialized by the MC.
+// Stuff that should be loaded before everything else that isn't significant enough to get its own SS goes here.
+
+/datum/controller/subsystem/misc_early
+ name = "Early Miscellaneous Init"
+ init_order = SS_INIT_MISC_FIRST
+ flags = SS_NO_FIRE | SS_NO_DISPLAY
+
+/datum/controller/subsystem/misc_early/Initialize(timeofday)
+ // Create the data core, whatever that is.
+ data_core = new /datum/datacore()
+
+ // Setup the global HUD.
+ global_hud = new
+ global_huds = list(
+ global_hud.druggy,
+ global_hud.blurry,
+ global_hud.vimpaired,
+ global_hud.darkMask,
+ global_hud.nvg,
+ global_hud.thermal,
+ global_hud.meson,
+ global_hud.science
+ )
+
+ // This is kinda important. Set up details of what the hell things are made of.
+ populate_material_list()
+
+ // Create autolathe recipes, as above.
+ populate_lathe_recipes()
+
+ // Create robolimbs for chargen.
+ populate_robolimb_list()
+
+ if(config.ToRban)
+ ToRban_autoupdate()
+
+ // Setup the job controller.
+ job_master = new /datum/controller/occupations()
+ job_master.SetupOccupations()
+ job_master.LoadJobs("config/jobs.txt")
+
+ lobby_image = new/obj/effect/lobby_image()
+
+ ..()
diff --git a/code/controllers/subsystems/initialization/misc_late.dm b/code/controllers/subsystems/initialization/misc_late.dm
new file mode 100644
index 00000000000..e0858bec7b3
--- /dev/null
+++ b/code/controllers/subsystems/initialization/misc_late.dm
@@ -0,0 +1,42 @@
+// This subsystem loads later in the init process. Not last, but after most major things are done.
+// We sort the area list here because SSatoms needs to run first.
+
+/datum/controller/subsystem/misc_late
+ name = "Late Miscellaneous Init"
+ init_order = SS_INIT_MISC
+ flags = SS_NO_FIRE | SS_NO_DISPLAY
+
+/datum/controller/subsystem/misc_late/Initialize(timeofday)
+ // Sort the area list.
+ sortTim(all_areas, /proc/cmp_name_asc)
+
+ var/turf/picked
+ // Setup the teleport locs.
+ for (var/thing in all_areas)
+ var/area/AR = thing
+ picked = null
+ if(!(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station)))
+ picked = pick_area_turf(AR.type, list(/proc/is_station_turf))
+ if (picked)
+ teleportlocs += AR.name
+ teleportlocs[AR.name] = AR
+
+ if(istype(AR, /area/turret_protected/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome) || istype(AR, /area/shuttle/specops/centcom))
+ ghostteleportlocs += AR.name
+ ghostteleportlocs[AR.name] = AR
+
+ picked = pick_area_turf(AR.type, list(/proc/is_station_turf))
+ if (picked)
+ ghostteleportlocs += AR.name
+ ghostteleportlocs[AR.name] = AR
+
+ sortTim(teleportlocs, /proc/cmp_text_asc)
+ sortTim(ghostteleportlocs, /proc/cmp_text_asc)
+
+ populate_antag_type_list()
+ populate_spawn_points()
+ setupgenetics()
+
+ shuttle_controller.setup_shuttle_docks()
+
+ ..(timeofday, TRUE)
diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/controllers/subsystems/initialization/xenoarch.dm
similarity index 90%
rename from code/modules/research/xenoarchaeology/master_controller.dm
rename to code/controllers/subsystems/initialization/xenoarch.dm
index 332b1ce06ae..ff4cdea9c25 100644
--- a/code/modules/research/xenoarchaeology/master_controller.dm
+++ b/code/controllers/subsystems/initialization/xenoarch.dm
@@ -1,82 +1,93 @@
-
-/datum/controller/game_controller
- var/list/artifact_spawning_turfs = list()
- var/list/digsite_spawning_turfs = list()
-
-#define XENOARCH_SPAWN_CHANCE 0.5
-#define DIGSITESIZE_LOWER 4
-#define DIGSITESIZE_UPPER 12
-#define ARTIFACTSPAWNNUM_LOWER 6
-#define ARTIFACTSPAWNNUM_UPPER 12
-
-datum/controller/game_controller/proc/SetupXenoarch()
- //create digsites
- for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz)))
- if(isnull(M.geologic_data))
- M.geologic_data = new/datum/geosample(M)
-
- if(!prob(XENOARCH_SPAWN_CHANCE))
- continue
-
- digsite_spawning_turfs.Add(M)
- var/digsite = get_random_digsite_type()
- var/target_digsite_size = rand(DIGSITESIZE_LOWER, DIGSITESIZE_UPPER)
- var/list/processed_turfs = list()
- var/list/turfs_to_process = list(M)
- while(turfs_to_process.len)
- var/turf/simulated/mineral/archeo_turf = pop(turfs_to_process)
-
- if(target_digsite_size > 1)
- var/list/viable_adjacent_turfs = orange(1, archeo_turf)
- for(var/turf/simulated/mineral/T in orange(1, archeo_turf))
- if(T.finds)
- continue
- if(T in processed_turfs)
- continue
- viable_adjacent_turfs.Add(T)
-
- for(var/turf/simulated/mineral/T in viable_adjacent_turfs)
- if(prob(target_digsite_size/viable_adjacent_turfs.len))
- turfs_to_process.Add(T)
- target_digsite_size -= 1
- if(target_digsite_size <= 0)
- break
-
- processed_turfs.Add(archeo_turf)
- if(isnull(archeo_turf.finds))
- archeo_turf.finds = list()
- if(prob(50))
- archeo_turf.finds.Add(new /datum/find(digsite, rand(5,95)))
- else if(prob(75))
- archeo_turf.finds.Add(new /datum/find(digsite, rand(5,45)))
- archeo_turf.finds.Add(new /datum/find(digsite, rand(55,95)))
- else
- archeo_turf.finds.Add(new /datum/find(digsite, rand(5,30)))
- archeo_turf.finds.Add(new /datum/find(digsite, rand(35,75)))
- archeo_turf.finds.Add(new /datum/find(digsite, rand(75,95)))
-
- //sometimes a find will be close enough to the surface to show
- var/datum/find/F = archeo_turf.finds[1]
- if(F.excavation_required <= F.view_range)
- archeo_turf.archaeo_overlay = "overlay_archaeo[rand(1,3)]"
- archeo_turf.overlays += archeo_turf.archaeo_overlay
-
- //have a chance for an artifact to spawn here, but not in animal or plant digsites
- if(isnull(M.artifact_find) && digsite != 1 && digsite != 2)
- artifact_spawning_turfs.Add(archeo_turf)
-
- //create artifact machinery
- var/num_artifacts_spawn = rand(ARTIFACTSPAWNNUM_LOWER, ARTIFACTSPAWNNUM_UPPER)
- while(artifact_spawning_turfs.len > num_artifacts_spawn)
- pick_n_take(artifact_spawning_turfs)
-
- var/list/artifacts_spawnturf_temp = artifact_spawning_turfs.Copy()
- while(artifacts_spawnturf_temp.len > 0)
- var/turf/simulated/mineral/artifact_turf = pop(artifacts_spawnturf_temp)
- artifact_turf.artifact_find = new()
-
-#undef XENOARCH_SPAWN_CHANCE
-#undef DIGSITESIZE_LOWER
-#undef DIGSITESIZE_UPPER
-#undef ARTIFACTSPAWNNUM_LOWER
-#undef ARTIFACTSPAWNNUM_UPPER
+var/datum/controller/subsystem/xenoarch/SSxenoarch
+
+#define XENOARCH_SPAWN_CHANCE 0.5
+#define DIGSITESIZE_LOWER 4
+#define DIGSITESIZE_UPPER 12
+#define ARTIFACTSPAWNNUM_LOWER 6
+#define ARTIFACTSPAWNNUM_UPPER 12
+
+/datum/controller/subsystem/xenoarch
+ name = "Xenoarcheology"
+ flags = SS_NO_FIRE
+ init_order = SS_INIT_MISC
+
+ var/list/artifact_spawning_turfs = list()
+ var/list/digsite_spawning_turfs = list()
+
+/datum/controller/subsystem/xenoarch/New()
+ NEW_SS_GLOBAL(SSxenoarch)
+
+/datum/controller/subsystem/xenoarch/Initialize(timeofday)
+ //create digsites
+ for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz)))
+ if(isnull(M.geologic_data))
+ M.geologic_data = new/datum/geosample(M)
+
+ if(!prob(XENOARCH_SPAWN_CHANCE))
+ continue
+
+ digsite_spawning_turfs.Add(M)
+ var/digsite = get_random_digsite_type()
+ var/target_digsite_size = rand(DIGSITESIZE_LOWER, DIGSITESIZE_UPPER)
+ var/list/processed_turfs = list()
+ var/list/turfs_to_process = list(M)
+ while(turfs_to_process.len)
+ var/turf/simulated/mineral/archeo_turf = pop(turfs_to_process)
+
+ if(target_digsite_size > 1)
+ var/list/viable_adjacent_turfs = orange(1, archeo_turf)
+ for(var/turf/simulated/mineral/T in orange(1, archeo_turf))
+ if(T.finds)
+ continue
+ if(T in processed_turfs)
+ continue
+ viable_adjacent_turfs.Add(T)
+
+ for(var/turf/simulated/mineral/T in viable_adjacent_turfs)
+ if(prob(target_digsite_size/viable_adjacent_turfs.len))
+ turfs_to_process.Add(T)
+ target_digsite_size -= 1
+ if(target_digsite_size <= 0)
+ break
+
+ processed_turfs.Add(archeo_turf)
+ if(isnull(archeo_turf.finds))
+ archeo_turf.finds = list()
+ if(prob(50))
+ archeo_turf.finds.Add(new /datum/find(digsite, rand(5,95)))
+ else if(prob(75))
+ archeo_turf.finds.Add(new /datum/find(digsite, rand(5,45)))
+ archeo_turf.finds.Add(new /datum/find(digsite, rand(55,95)))
+ else
+ archeo_turf.finds.Add(new /datum/find(digsite, rand(5,30)))
+ archeo_turf.finds.Add(new /datum/find(digsite, rand(35,75)))
+ archeo_turf.finds.Add(new /datum/find(digsite, rand(75,95)))
+
+ //sometimes a find will be close enough to the surface to show
+ var/datum/find/F = archeo_turf.finds[1]
+ if(F.excavation_required <= F.view_range)
+ archeo_turf.archaeo_overlay = "overlay_archaeo[rand(1,3)]"
+ archeo_turf.overlays += archeo_turf.archaeo_overlay
+
+ //have a chance for an artifact to spawn here, but not in animal or plant digsites
+ if(isnull(M.artifact_find) && digsite != 1 && digsite != 2)
+ artifact_spawning_turfs.Add(archeo_turf)
+
+ //create artifact machinery
+ var/num_artifacts_spawn = rand(ARTIFACTSPAWNNUM_LOWER, ARTIFACTSPAWNNUM_UPPER)
+ while(artifact_spawning_turfs.len > num_artifacts_spawn)
+ pick_n_take(artifact_spawning_turfs)
+
+ var/list/artifacts_spawnturf_temp = artifact_spawning_turfs.Copy()
+ while(artifacts_spawnturf_temp.len > 0)
+ var/turf/simulated/mineral/artifact_turf = pop(artifacts_spawnturf_temp)
+ artifact_turf.artifact_find = new()
+
+ ..()
+
+
+#undef XENOARCH_SPAWN_CHANCE
+#undef DIGSITESIZE_LOWER
+#undef DIGSITESIZE_UPPER
+#undef ARTIFACTSPAWNNUM_LOWER
+#undef ARTIFACTSPAWNNUM_UPPER
diff --git a/code/controllers/law.dm b/code/controllers/subsystems/law.dm
similarity index 64%
rename from code/controllers/law.dm
rename to code/controllers/subsystems/law.dm
index a35c145f59c..a54d67df741 100644
--- a/code/controllers/law.dm
+++ b/code/controllers/subsystems/law.dm
@@ -1,15 +1,18 @@
-/var/global/datum/controller/law/corp_regs
+/var/global/datum/controller/subsystem/law/SSlaw
+
+/datum/controller/subsystem/law
+ name = "Law"
+ flags = SS_NO_FIRE
-/datum/controller/law
var/list/laws = list() // All laws
-
var/list/low_severity = list()
var/list/med_severity = list()
var/list/high_severity = list()
-/datum/controller/law/New()
- corp_regs = src
+/datum/controller/subsystem/law/New()
+ NEW_SS_GLOBAL(SSlaw)
+/datum/controller/subsystem/law/Initialize(timeofday)
for (var/L in subtypesof(/datum/law/low_severity))
low_severity += new L
@@ -20,5 +23,3 @@
high_severity += new L
laws = low_severity + med_severity + high_severity
-
- ..()
diff --git a/code/controllers/subsystems/lighting.dm b/code/controllers/subsystems/lighting.dm
new file mode 100644
index 00000000000..8b60be3a47a
--- /dev/null
+++ b/code/controllers/subsystems/lighting.dm
@@ -0,0 +1,157 @@
+var/datum/controller/subsystem/lighting/SSlighting
+
+/var/lighting_profiling = FALSE
+
+/datum/controller/subsystem/lighting
+ name = "Lighting"
+ wait = LIGHTING_INTERVAL
+
+ priority = SS_PRIORITY_LIGHTING
+ init_order = SS_INIT_LIGHTING
+
+ var/list/lighting_overlays // List of all lighting overlays in the world.
+ var/list/lighting_corners // List of all lighting corners in the world.
+
+ var/list/light_queue = list() // lighting sources queued for update.
+ var/list/corner_queue = list() // lighting corners queued for update.
+ var/list/overlay_queue = list() // lighting overlays queued for update.
+
+ var/tmp/processed_lights = 0
+ var/tmp/processed_corners = 0
+ var/tmp/processed_overlays = 0
+
+ var/force_queued = TRUE
+ var/force_override = FALSE // For admins.
+ var/round_started = FALSE
+
+ var/instant_tick_limit = 80 // Tick limit used by instant lighting updates. If world.tick_usage is higher than this when a light updates, it will be updated via. SSlighting.
+
+/datum/controller/subsystem/lighting/New()
+ NEW_SS_GLOBAL(SSlighting)
+ LAZYINITLIST(lighting_corners)
+ LAZYINITLIST(lighting_overlays)
+
+/datum/controller/subsystem/lighting/stat_entry()
+ ..("O:[lighting_overlays.len] C:[lighting_corners.len] ITL:[round(instant_tick_limit, 0.1)]%\n\tP:{L:[light_queue.len]|C:[corner_queue.len]|O:[overlay_queue.len]}\n\tL:{L:[processed_lights]|C:[processed_corners]|O:[processed_overlays]}")
+
+/datum/controller/subsystem/lighting/ExplosionStart()
+ force_queued = TRUE
+
+/datum/controller/subsystem/lighting/ExplosionEnd()
+ if (!force_override)
+ force_queued = FALSE
+
+/datum/controller/subsystem/lighting/Initialize(timeofday)
+ var/overlaycount = 0
+ // Generate overlays.
+ for (var/zlevel = 1 to world.maxz)
+ for (var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)))
+ if (!T.dynamic_lighting)
+ continue
+
+ var/area/A = T.loc
+ if (!A.dynamic_lighting)
+ continue
+
+ new /atom/movable/lighting_overlay(T, TRUE)
+ overlaycount++
+
+ CHECK_TICK
+
+ admin_notice(span("danger", "Created [overlaycount] lighting overlays."), R_DEBUG)
+
+ // Tick once to clear most lights.
+ fire(FALSE, TRUE)
+
+ admin_notice(span("danger", "Processed [processed_lights] light sources."), R_DEBUG)
+ admin_notice(span("danger", "Processed [processed_corners] light corners."), R_DEBUG)
+ admin_notice(span("danger", "Processed [processed_overlays] light overlays."), R_DEBUG)
+
+ log_ss("lighting", "NOv:[overlaycount] L:[processed_lights] C:[processed_corners] O:[processed_overlays]")
+
+ ..()
+
+/datum/controller/subsystem/lighting/fire(resumed = FALSE, no_mc_tick = FALSE)
+ if (!resumed && !round_started && Master.round_started)
+ force_queued = FALSE
+ round_started = TRUE
+
+ if (!resumed)
+ processed_lights = 0
+ processed_corners = 0
+ processed_overlays = 0
+
+ instant_tick_limit = CURRENT_TICKLIMIT * 0.8
+
+ MC_SPLIT_TICK_INIT(3)
+ if (!no_mc_tick)
+ MC_SPLIT_TICK
+
+ var/list/curr_lights = light_queue
+ var/list/curr_corners = corner_queue
+ var/list/curr_overlays = overlay_queue
+
+ while (curr_lights.len)
+ var/datum/light_source/L = curr_lights[curr_lights.len]
+ curr_lights.len--
+
+ if(QDELETED(L) || L.check() || L.force_update)
+ L.remove_lum()
+ if(!QDELETED(L))
+ L.apply_lum()
+
+ else if(L.vis_update) //We smartly update only tiles that became (in) visible to use.
+ L.smart_vis_update()
+
+ L.vis_update = FALSE
+ L.force_update = FALSE
+ L.needs_update = FALSE
+
+ processed_lights++
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+
+ if (!no_mc_tick)
+ MC_SPLIT_TICK
+
+ while (curr_corners.len)
+ var/datum/lighting_corner/C = curr_corners[curr_corners.len]
+ curr_corners.len--
+
+ C.update_overlays()
+
+ C.needs_update = FALSE
+
+ processed_corners++
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+
+ if (!no_mc_tick)
+ MC_SPLIT_TICK
+
+ while (curr_overlays.len)
+ var/atom/movable/lighting_overlay/O = curr_overlays[curr_overlays.len]
+ curr_overlays.len--
+
+ O.update_overlay()
+ O.needs_update = FALSE
+
+ processed_overlays++
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+
+/datum/controller/subsystem/lighting/Recover()
+ src.light_queue = SSlighting.light_queue
+ src.corner_queue = SSlighting.corner_queue
+ src.overlay_queue = SSlighting.overlay_queue
+ lighting_corners = SSlighting.lighting_corners
+ lighting_overlays = SSlighting.lighting_overlays
diff --git a/code/controllers/subsystems/machinery.dm b/code/controllers/subsystems/machinery.dm
new file mode 100644
index 00000000000..01b1219ff99
--- /dev/null
+++ b/code/controllers/subsystems/machinery.dm
@@ -0,0 +1,144 @@
+/var/datum/controller/subsystem/machinery/SSmachinery
+
+/datum/controller/subsystem/machinery
+ name = "Machinery"
+ priority = SS_PRIORITY_MACHINERY
+ init_order = SS_INIT_MACHINERY
+ flags = SS_POST_FIRE_TIMING
+
+ var/tmp/list/processing_machinery = list()
+ var/tmp/list/processing_powersinks = list()
+ var/tmp/powernets_reset_yet
+
+ var/tmp/processes_this_tick = 0
+ var/tmp/powerusers_this_tick = 0
+
+ var/list/rcon_smes_units = list()
+ var/list/rcon_smes_units_by_tag = list()
+ var/list/rcon_breaker_units = list()
+ var/list/rcon_breaker_units_by_tag = list()
+
+ var/list/all_cameras = list()
+
+ var/list/breaker_boxes = list()
+
+ var/rcon_update_queued = FALSE
+
+ var/list/slept_in_process = list()
+
+/datum/controller/subsystem/machinery/proc/queue_rcon_update()
+ rcon_update_queued = TRUE
+
+/datum/controller/subsystem/machinery/proc/build_rcon_lists()
+ rcon_update_queued = FALSE
+ rcon_smes_units.Cut()
+ rcon_breaker_units.Cut()
+ rcon_breaker_units_by_tag.Cut()
+
+ for(var/obj/machinery/power/smes/buildable/SMES in machines)
+ if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
+ rcon_smes_units += SMES
+ rcon_smes_units_by_tag[SMES.RCon_tag] = SMES
+
+ for(var/obj/machinery/power/breakerbox/breaker in breaker_boxes)
+ if(breaker.RCon_tag != "NO_TAG")
+ rcon_breaker_units += breaker
+ rcon_breaker_units_by_tag[breaker.RCon_tag] = breaker
+
+ sortTim(rcon_smes_units, /proc/cmp_rcon_smes)
+ sortTim(rcon_breaker_units, /proc/cmp_rcon_bbox)
+
+/datum/controller/subsystem/machinery/New()
+ NEW_SS_GLOBAL(SSmachinery)
+
+/datum/controller/subsystem/machinery/Initialize(timeofday)
+ fire(FALSE, TRUE) // Tick machinery once to pare down the list so we don't hammer the server on round-start.
+ build_rcon_lists()
+ ..(timeofday)
+
+/datum/controller/subsystem/machinery/fire(resumed = 0, no_mc_tick = FALSE)
+ if (!resumed)
+ src.processing_machinery = machines.Copy()
+ src.processing_powersinks = processing_power_items.Copy()
+ powernets_reset_yet = FALSE
+
+ // Reset accounting vars.
+ processes_this_tick = 0
+ powerusers_this_tick = 0
+
+ if (rcon_update_queued)
+ build_rcon_lists()
+
+ var/list/curr_machinery = src.processing_machinery
+ var/list/curr_powersinks = src.processing_powersinks
+
+ while (curr_machinery.len)
+ var/obj/machinery/M = curr_machinery[curr_machinery.len]
+ curr_machinery.len--
+
+ if (QDELETED(M))
+ log_debug("SSmachinery: QDELETED machine [DEBUG_REF(M)] found in machines list! Removing.")
+ remove_machine(M)
+ continue
+
+ var/start_tick = world.time
+
+ if (M.isprocessing)
+ processes_this_tick++
+ switch (M.process())
+ if (PROCESS_KILL)
+ remove_machine(M)
+ if (M_NO_PROCESS)
+ M.isprocessing = FALSE
+
+ if (start_tick != world.time)
+ // Slept.
+ if (!slept_in_process[M.type])
+ log_debug("SSmachinery: Type '[M.type]' slept during process().")
+ slept_in_process[M.type] = TRUE
+
+ if (M.use_power)
+ powerusers_this_tick++
+ M.auto_use_power()
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+ if (!powernets_reset_yet)
+ for (var/thing in powernets)
+ var/datum/powernet/PN = thing
+
+ PN.reset()
+
+ powernets_reset_yet = TRUE
+
+ while (curr_powersinks.len)
+ var/obj/item/I = curr_powersinks[curr_powersinks.len]
+ curr_powersinks.len--
+
+ if (QDELETED(I) || !I.pwr_drain())
+ processing_power_items -= I
+ log_debug("SSmachinery: QDELETED item [DEBUG_REF(I)] found in processing power items list.")
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/machinery/stat_entry()
+ ..("M:[machines.len] PI:[processing_power_items.len] PN:[powernets.len]\n\tLT:{T:[processes_this_tick]|P:[powerusers_this_tick]}")
+
+/proc/add_machine(obj/machinery/M)
+ if (QDELETED(M))
+ return
+
+ M.isprocessing = TRUE
+ machines += M
+
+/proc/remove_machine(obj/machinery/M)
+ if (M)
+ M.isprocessing = FALSE
+ machines -= M
+ SSmachinery.processing_machinery -= M
diff --git a/code/controllers/subsystems/mob.dm b/code/controllers/subsystems/mob.dm
new file mode 100644
index 00000000000..6c2e0095308
--- /dev/null
+++ b/code/controllers/subsystems/mob.dm
@@ -0,0 +1,35 @@
+/datum/controller/subsystem/mobs
+ name = "Mobs"
+ flags = SS_NO_INIT
+ priority = SS_PRIORITY_MOB
+
+ var/list/currentrun = list()
+
+/datum/controller/subsystem/mobs/stat_entry()
+ ..("P:[mob_list.len]")
+
+/datum/controller/subsystem/mobs/fire(resumed = 0)
+ if (!resumed)
+ src.currentrun = mob_list.Copy()
+
+ var/list/currentrun = src.currentrun
+
+ while (currentrun.len)
+ var/mob/M = currentrun[currentrun.len]
+ currentrun.len--
+
+ if (QDELETED(M))
+ log_debug("SSmob: QDELETED mob [DEBUG_REF(M)] left in processing list!")
+ // We can just go ahead and remove them from all the mob lists.
+ mob_list -= M
+ dead_mob_list -= M
+ living_mob_list -= M
+
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ M.Life()
+
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystems/nanoui.dm b/code/controllers/subsystems/nanoui.dm
new file mode 100644
index 00000000000..132ae194514
--- /dev/null
+++ b/code/controllers/subsystems/nanoui.dm
@@ -0,0 +1,33 @@
+var/datum/controller/subsystem/nanoui/SSnanoui
+
+/datum/controller/subsystem/nanoui
+ name = "NanoUI"
+ flags = SS_NO_INIT
+ priority = SS_PRIORITY_NANOUI
+
+ var/list/queued_uis = list()
+
+/datum/controller/subsystem/nanoui/New()
+ NEW_SS_GLOBAL(SSnanoui)
+
+/datum/controller/subsystem/nanoui/stat_entry()
+ ..("P:[nanomanager.processing_uis.len]")
+
+/datum/controller/subsystem/nanoui/fire(resumed = 0)
+ if (!resumed)
+ queued_uis = nanomanager.processing_uis.Copy()
+
+ while (queued_uis.len)
+ var/datum/nanoui/UI = queued_uis[queued_uis.len]
+ queued_uis.len--
+
+ if (QDELETED(UI))
+ nanomanager.processing_uis -= UI
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ UI.process()
+
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystems/night_lighting.dm b/code/controllers/subsystems/night_lighting.dm
new file mode 100644
index 00000000000..b75d1ea046d
--- /dev/null
+++ b/code/controllers/subsystems/night_lighting.dm
@@ -0,0 +1,97 @@
+var/datum/controller/subsystem/nightlight/SSnightlight
+
+/datum/controller/subsystem/nightlight
+ name = "Night Lighting"
+ wait = 5 MINUTES
+ init_order = SS_INIT_NIGHT
+ flags = SS_BACKGROUND | SS_NO_TICK_CHECK
+ priority = SS_PRIORITY_NIGHT
+
+ var/isactive = FALSE
+ var/disable_type = NL_NOT_DISABLED
+
+/datum/controller/subsystem/nightlight/New()
+ NEW_SS_GLOBAL(SSnightlight)
+
+/datum/controller/subsystem/nightlight/Initialize(timeofday)
+ fire(FALSE, FALSE)
+
+ ..(timeofday, silent = TRUE)
+
+/datum/controller/subsystem/nightlight/stat_entry()
+ ..("A:[isactive] T:[worldtime2hours()] DT:[config.nl_start] NT:[config.nl_finish]")
+
+/datum/controller/subsystem/nightlight/Recover()
+ src.isactive = SSnightlight.isactive
+ src.disable_type = SSnightlight.disable_type
+
+/datum/controller/subsystem/nightlight/proc/temp_disable(time = -1)
+ if (disable_type != NL_PERMANENT_DISABLE)
+ disable_type = NL_TEMPORARY_DISABLE
+ suspend()
+ deactivate(FALSE)
+ if (time > 0)
+ addtimer(CALLBACK(src, .proc/end_temp_disable), time, TIMER_UNIQUE | TIMER_OVERRIDE)
+
+/datum/controller/subsystem/nightlight/proc/end_temp_disable()
+ if (disable_type == NL_TEMPORARY_DISABLE)
+ wake()
+
+/datum/controller/subsystem/nightlight/fire(resumed = FALSE, announce = TRUE)
+ if (disable_type)
+ log_debug("SSnightlight: disable_type was [disable_type] but can_fire was TRUE! Disabling self.")
+ suspend()
+ return
+
+ var/time = worldtime2hours()
+ if (time <= 8 || time >= 19)
+ if (!isactive)
+ activate()
+ if (announce)
+ command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
+ else
+ if (isactive)
+ deactivate()
+ if (announce)
+ command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg')
+
+// 'whitelisted' areas are areas that have nightmode explicitly enabled
+
+/datum/controller/subsystem/nightlight/proc/activate(var/whitelisted_only = 1)
+ isactive = 1
+ for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
+ APC.toggle_nightlight("on")
+
+ CHECK_TICK
+
+/datum/controller/subsystem/nightlight/proc/deactivate(var/whitelisted_only = 1)
+ isactive = 0
+ for (var/obj/machinery/power/apc/APC in get_apc_list(whitelisted_only))
+ APC.toggle_nightlight("off")
+
+ CHECK_TICK
+
+/datum/controller/subsystem/nightlight/proc/get_apc_list(var/whitelisted_only = 1)
+ var/list/obj/machinery/power/apc/lighting_apcs = list()
+
+ for (var/A in all_areas)
+ var/area/B = A
+ if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only))
+ continue
+ if (B.apc && !B.apc.aidisabled)
+ lighting_apcs += B.apc
+
+ CHECK_TICK
+
+ return lighting_apcs
+
+/datum/controller/subsystem/nightlight/proc/is_active()
+ return isactive
+
+/datum/controller/subsystem/nightlight/enable()
+ ..()
+ disable_type = NL_NOT_DISABLED
+
+/datum/controller/subsystem/nightlight/disable()
+ ..()
+ disable_type = NL_PERMANENT_DISABLE
diff --git a/code/controllers/subsystems/object.dm b/code/controllers/subsystems/object.dm
new file mode 100644
index 00000000000..e3f0009e4c6
--- /dev/null
+++ b/code/controllers/subsystems/object.dm
@@ -0,0 +1,35 @@
+/datum/controller/subsystem/object
+ name = "Objects"
+ priority = SS_PRIORITY_OBJECTS
+ flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT
+
+ var/list/processing
+
+ var/tmp/list/queue = list()
+
+/datum/controller/subsystem/object/New()
+ LAZYINITLIST(processing_objects)
+ processing = processing_objects // Ref for debugging.
+
+/datum/controller/subsystem/object/fire(resumed = FALSE)
+ if (!resumed)
+ queue = processing_objects.Copy()
+
+ while (queue.len)
+ var/datum/O = queue[queue.len]
+ queue.len--
+
+ if (QDELETED(O))
+ log_debug("SSobjects: QDELETED object [DEBUG_REF(O)] found in processing queue!")
+ processing_objects -= O
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ O.process()
+
+ if (MC_TICK_CHECK)
+ return
+
+/datum/controller/subsystem/object/stat_entry()
+ ..("[processing_objects.len] objects")
diff --git a/code/controllers/subsystems/openturf.dm b/code/controllers/subsystems/openturf.dm
new file mode 100644
index 00000000000..91e6c7e5141
--- /dev/null
+++ b/code/controllers/subsystems/openturf.dm
@@ -0,0 +1,179 @@
+#define OPENTURF_MAX_PLANE -71
+#define OPENTURF_CAP_PLANE -70 // The multiplier goes here so it'll be on top of every other overlay.
+#define OPENTURF_MAX_DEPTH 10 // The maxiumum number of planes deep we'll go before we just dump everything on the same plane.
+
+/var/datum/controller/subsystem/openturf/SSopenturf
+
+/datum/controller/subsystem/openturf
+ name = "Open Space"
+ flags = SS_BACKGROUND | SS_FIRE_IN_LOBBY
+ wait = 1
+ init_order = SS_INIT_OPENTURF
+ priority = SS_PRIORITY_OPENTURF
+
+ var/list/queued_turfs = list()
+ var/list/queued_overlays = list()
+
+ var/list/openspace_overlays = list()
+ var/list/openspace_turfs = list()
+
+/datum/controller/subsystem/openturf/New()
+ NEW_SS_GLOBAL(SSopenturf)
+
+/datum/controller/subsystem/openturf/proc/update_all()
+ disable()
+ for (var/thing in openspace_overlays)
+ var/atom/movable/AM = thing
+
+ var/turf/simulated/open/T = get_turf(AM)
+ if (istype(T))
+ T.update()
+ else
+ qdel(AM)
+
+ CHECK_TICK
+
+ enable()
+
+/datum/controller/subsystem/openturf/proc/hard_reset()
+ disable()
+ log_debug("SSopenturf: hard_reset() invoked.")
+ var/num_deleted = 0
+ for (var/thing in openspace_overlays)
+ qdel(thing)
+ num_deleted++
+ CHECK_TICK
+
+ log_debug("SSopenturf: deleted [num_deleted] overlays.")
+
+ var/num_turfs = 0
+ for (var/turf/simulated/open/T in turfs)
+ T.update_icon()
+ num_turfs++
+
+ CHECK_TICK
+
+ log_debug("SSopenturf: queued [num_turfs] openturfs for update. hard_reset() complete.")
+ enable()
+
+/datum/controller/subsystem/openturf/stat_entry()
+ ..("Q:{T:[queued_turfs.len]|O:[queued_overlays.len]} T:{T:[openspace_turfs.len]|O:[openspace_overlays.len]}")
+
+/datum/controller/subsystem/openturf/Initialize(timeofday)
+ // Flush the queue.
+ fire(FALSE, TRUE)
+ ..()
+
+/datum/controller/subsystem/openturf/fire(resumed = FALSE, no_mc_tick = FALSE)
+ MC_SPLIT_TICK_INIT(2)
+ if (!no_mc_tick)
+ MC_SPLIT_TICK
+
+ var/list/curr_turfs = queued_turfs
+ var/list/curr_ov = queued_overlays
+
+ while (curr_turfs.len)
+ var/turf/simulated/open/T = curr_turfs[1]
+ curr_turfs.Cut(1,2)
+
+ if (!istype(T) || !T.below)
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+ continue
+
+ if (!T.shadower) // If we don't have our shadower yet, create it.
+ T.shadower = new(T)
+
+ // Figure out how many z-levels down we are.
+ var/depth = calculate_depth(T)
+ if (depth > OPENTURF_MAX_DEPTH)
+ depth = OPENTURF_MAX_DEPTH
+
+ // Update the openturf itself.
+ T.appearance = T.below
+
+ // Handle space parallax & starlight.
+ if (T.is_above_space())
+ T.plane = PLANE_SPACE_BACKGROUND
+ if (config.starlight)
+ T.set_light(config.starlight, 0.5)
+ else
+ T.plane = OPENTURF_MAX_PLANE - depth
+ if (config.starlight)
+ T.set_light(0)
+
+ // Add everything below us to the update queue.
+ for (var/thing in T.below)
+ var/atom/movable/object = thing
+ if (QDELETED(object) || object.no_z_overlay)
+ // Don't queue deleted stuff or stuff that doesn't need an overlay.
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+ continue
+
+ // Cache our already-calculated depth so we don't need to re-calculate it a bunch of times.
+
+ if (!object.bound_overlay) // Generate a new overlay if the atom doesn't already have one.
+ object.bound_overlay = new(T)
+ object.bound_overlay.associated_atom = object
+
+ var/atom/movable/openspace/overlay/OO = object.bound_overlay
+
+ OO.depth = depth
+
+ queued_overlays += OO
+
+ T.updating = FALSE
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+
+ if (!no_mc_tick)
+ MC_SPLIT_TICK
+
+ while (curr_ov.len)
+ var/atom/movable/openspace/overlay/OO = curr_ov[1]
+ curr_ov.Cut(1, 2)
+
+ if (QDELETED(OO))
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+ continue
+
+ if (QDELETED(OO.associated_atom)) // This shouldn't happen, but just in-case.
+ qdel(OO)
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+ continue
+
+ // Actually update the overlay.
+ OO.dir = OO.associated_atom.dir
+ OO.appearance = OO.associated_atom
+ OO.plane = OPENTURF_MAX_PLANE - OO.depth
+
+ // Something's above us, queue it.
+ var/turf/oo_loc = OO.loc
+ if (istype(oo_loc.above))
+ oo_loc.above.update_icon()
+
+ if (no_mc_tick)
+ CHECK_TICK
+ else if (MC_TICK_CHECK)
+ break
+
+/datum/controller/subsystem/openturf/proc/calculate_depth(turf/simulated/open/T)
+ . = 0
+ while (T && istype(T.below, /turf/simulated/open))
+ T = T.below
+ .++
diff --git a/code/controllers/subsystems/orbit.dm b/code/controllers/subsystems/orbit.dm
new file mode 100644
index 00000000000..09cc0e8477d
--- /dev/null
+++ b/code/controllers/subsystems/orbit.dm
@@ -0,0 +1,50 @@
+var/datum/controller/subsystem/orbit/SSorbit
+
+/datum/controller/subsystem/orbit
+ name = "Orbits"
+ priority = SS_PRIORITY_ORBIT
+ wait = 2
+ flags = SS_NO_INIT|SS_TICKER
+
+ var/list/currentrun = list()
+ var/list/processing = list()
+
+/datum/controller/subsystem/orbit/New()
+ NEW_SS_GLOBAL(SSorbit)
+
+/datum/controller/subsystem/orbit/Recover()
+ src.processing = SSorbit.processing
+
+/datum/controller/subsystem/orbit/stat_entry()
+ ..("P:[processing.len]")
+
+
+/datum/controller/subsystem/orbit/fire(resumed = 0)
+ if (!resumed)
+ src.currentrun = processing.Copy()
+
+ //cache for sanic speed (lists are references anyways)
+ var/list/currentrun = src.currentrun
+
+ while (currentrun.len)
+ var/datum/orbit/O = currentrun[currentrun.len]
+ currentrun.len--
+ if (!O)
+ processing -= O
+ if (MC_TICK_CHECK)
+ return
+ continue
+ if (!O.orbiter)
+ qdel(O)
+ if (MC_TICK_CHECK)
+ return
+ continue
+ if (O.lastprocess >= world.time) //we already checked recently
+ if (MC_TICK_CHECK)
+ return
+ continue
+ var/targetloc = get_turf(O.orbiting)
+ if (targetloc != O.lastloc || O.orbiter.loc != targetloc)
+ O.Check(targetloc)
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/controllers/subsystems/pai.dm
similarity index 83%
rename from code/modules/mob/living/silicon/pai/recruit.dm
rename to code/controllers/subsystems/pai.dm
index 5ac6a02b662..c5257eafae2 100644
--- a/code/modules/mob/living/silicon/pai/recruit.dm
+++ b/code/controllers/subsystems/pai.dm
@@ -1,380 +1,401 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
-// Recruiting observers to play as pAIs
-
-var/datum/paiController/paiController // Global handler for pAI candidates
-
-/datum/paiCandidate
- var/name
- var/key
- var/description
- var/role
- var/comments
- var/ready = 0
-
-
-/hook/startup/proc/paiControllerSetup()
- paiController = new /datum/paiController()
- return 1
-
-
-/datum/paiController
- var/inquirer = null
- var/list/pai_candidates = list()
- var/list/asked = list()
-
- var/askDelay = 10 * 60 * 1 // One minute [ms * sec * min]
-
-/datum/paiController/Topic(href, href_list[])
- if(href_list["download"])
- var/datum/paiCandidate/candidate = locate(href_list["candidate"])
- var/obj/item/device/paicard/card = locate(href_list["device"])
- if (!candidate in pai_candidates)
- return
-
- if(card.pai)
- return
- if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate))
- var/mob/living/silicon/pai/pai = new(card)
- if(!candidate.name)
- pai.name = pick(ninja_names)
- else
- pai.name = candidate.name
- pai.real_name = pai.name
- pai.key = candidate.key
-
- card.setPersonality(pai)
- card.looking_for_personality = 0
-
- if(pai.mind) update_antag_icons(pai.mind)
-
- pai_candidates -= candidate
- usr << browse(null, "window=findPai")
-
- if(href_list["new"])
- var/datum/paiCandidate/candidate = locate(href_list["candidate"])
- var/option = href_list["option"]
- var/t = ""
-
- switch(option)
- if("name")
- t = sanitizeSafe(input("Enter a name for your pAI", "pAI Name", candidate.name) as text, MAX_NAME_LEN)
- if(t)
- candidate.name = t
- if("desc")
- t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message
- if(t)
- candidate.description = sanitize(t)
- if("role")
- t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text
- if(t)
- candidate.role = sanitize(t)
- if("ooc")
- t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message
- if(t)
- candidate.comments = sanitize(t)
-
- if("save")
- if (config.sql_saves)
- usr.client.prefs.save_preferences()
- else
- candidate.savefile_save(usr)
- if("load")
- if (config.sql_saves)
- usr.client.prefs.load_preferences()
- else
- candidate.savefile_load(usr)
- //In case people have saved unsanitized stuff.
- if(candidate.name)
- candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN)
- if(candidate.description)
- candidate.description = sanitize(candidate.description)
- if(candidate.role)
- candidate.role = sanitize(candidate.role)
- if(candidate.comments)
- candidate.comments = sanitize(candidate.comments)
-
- if("submit")
- if(candidate)
- candidate.ready = 1
- for(var/obj/item/device/paicard/p in world)
- if(p.looking_for_personality == 1)
- p.alertUpdate()
- usr << browse(null, "window=paiRecruit")
- return
- if (config.sql_saves)
- usr.client.prefs.save_preferences()
- else
- candidate.savefile_save(usr)
- recruitWindow(usr, href_list["allow_submit"] != "0")
-
-/datum/paiController/proc/recruitWindow(var/mob/M as mob, allowSubmit = 1)
- var/datum/paiCandidate/candidate
- for(var/datum/paiCandidate/c in pai_candidates)
- if(!istype(c) || !istype(M))
- break
- if(c.key == M.key)
- candidate = c
- if(!candidate)
- candidate = new /datum/paiCandidate()
- candidate.key = M.key
- pai_candidates.Add(candidate)
-
- // Load the data before displaying.
- if (!config.sql_saves)
- candidate.savefile_load(M)
- else
- M.client.prefs.load_preferences()
-
- var/dat = ""
- dat += {"
-
- "}
-
- dat += {"
-
- pAI Personality Configuration
- Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!
-
-
-
- Name :
- [candidate.name]
-
-
- What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
-
-
- Description :
- [candidate.description]
-
-
- What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
-
-
- Preferred Role :
- [candidate.role]
-
-
- Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
-
-
- OOC Comments :
- [candidate.comments]
-
-
- Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
-
-
-
- "}
- if(allowSubmit)
- dat += {"
-
- "}
- dat += {"
-
- "}
-
- M << browse(dat, "window=paiRecruit;size=580x580;")
-
-/datum/paiController/proc/findPAI(var/obj/item/device/paicard/p, var/mob/user)
- requestRecruits(user)
- var/list/available = list()
- for(var/datum/paiCandidate/c in paiController.pai_candidates)
- if(c.ready)
- var/found = 0
- for(var/mob/dead/observer/o in player_list)
- if(o.key == c.key && o.MayRespawn())
- found = 1
- if(found)
- available.Add(c)
- var/dat = ""
-
- dat += {"
-
-
-
-
-
-
- pAI Availability List
- "}
- dat += "Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.
"
-
- for(var/datum/paiCandidate/c in available)
- dat += {"
-
-
- Name:
- [c.name]
-
-
- Description:
- [c.description]
-
-
- Preferred Role:
- [c.role]
-
-
- OOC Comments:
- [c.comments]
-
-
-
-
- "}
-
- dat += {"
-
-
- "}
-
- user << browse(dat, "window=findPai")
-
-
-/datum/paiController/proc/requestRecruits(var/mob/user)
- inquirer = user
- for(var/mob/dead/observer/O in player_list)
- if(!O.MayRespawn())
- continue
- if(jobban_isbanned(O, "pAI"))
- continue
- if(asked.Find(O.key))
- if(world.time < asked[O.key] + askDelay)
- continue
- else
- asked.Remove(O.key)
- if(O.client)
- if(BE_PAI in O.client.prefs.be_special_role)
- question(O.client)
-
-/datum/paiController/proc/question(var/client/C)
- spawn(0)
- if(!C) return
- asked.Add(C.key)
- asked[C.key] = world.time
- var/response = alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round")
- if(!C) return //handle logouts that happen whilst the alert is waiting for a response.
- if(response == "Yes")
- recruitWindow(C.mob)
- else if (response == "Never for this round")
- C.prefs.be_special_role -= BE_PAI
+/var/datum/controller/subsystem/pai/SSpai
+
+/datum/controller/subsystem/pai
+ name = "pAI"
+ init_order = SS_INIT_MISC_FIRST
+ flags = SS_NO_FIRE
+
+ var/list/pai_software_by_key
+ var/list/default_pai_software
+
+ var/inquirer = null
+ var/list/pai_candidates = list()
+ var/list/asked = list()
+
+ var/askDelay = 1 MINUTE
+
+/datum/controller/subsystem/pai/New()
+ NEW_SS_GLOBAL(SSpai)
+ LAZYINITLIST(pai_software_by_key)
+ LAZYINITLIST(default_pai_software)
+
+/datum/controller/subsystem/pai/Initialize()
+ // Initialize the pAI software list.
+ for(var/type in subtypesof(/datum/pai_software))
+ var/datum/pai_software/P = new type()
+ if(pai_software_by_key[P.id])
+ var/datum/pai_software/O = pai_software_by_key[P.id]
+ world << "pAI software module [P.name] has the same key as [O.name]! "
+ continue
+ pai_software_by_key[P.id] = P
+ if(P.default)
+ default_pai_software[P.id] = P
+
+/datum/controller/subsystem/pai/Recover()
+ pai_software_by_key = SSpai.pai_software_by_key
+ default_pai_software = SSpai.default_pai_software
+
+/datum/controller/subsystem/pai/Topic(href, list/href_list)
+ if(href_list["download"])
+ var/datum/paiCandidate/candidate = locate(href_list["candidate"])
+ var/obj/item/device/paicard/card = locate(href_list["device"])
+ if (!candidate in pai_candidates)
+ return
+
+ if(card.pai)
+ return
+ if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate))
+ var/mob/living/silicon/pai/pai = new(card)
+ if(!candidate.name)
+ pai.name = pick(ninja_names)
+ else
+ pai.name = candidate.name
+ pai.real_name = pai.name
+ pai.key = candidate.key
+
+ card.setPersonality(pai)
+ card.looking_for_personality = 0
+
+ if(pai.mind) update_antag_icons(pai.mind)
+
+ pai_candidates -= candidate
+ usr << browse(null, "window=findPai")
+
+ if(href_list["new"])
+ var/datum/paiCandidate/candidate = locate(href_list["candidate"])
+ var/option = href_list["option"]
+ var/t = ""
+
+ switch(option)
+ if("name")
+ t = sanitizeSafe(input("Enter a name for your pAI", "pAI Name", candidate.name) as text, MAX_NAME_LEN)
+ if(t)
+ candidate.name = t
+ if("desc")
+ t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message
+ if(t)
+ candidate.description = sanitize(t)
+ if("role")
+ t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text
+ if(t)
+ candidate.role = sanitize(t)
+ if("ooc")
+ t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message
+ if(t)
+ candidate.comments = sanitize(t)
+
+ if("save")
+ if (config.sql_saves)
+ usr.client.prefs.save_preferences()
+ else
+ candidate.savefile_save(usr)
+ if("load")
+ if (config.sql_saves)
+ usr.client.prefs.load_preferences()
+ else
+ candidate.savefile_load(usr)
+ //In case people have saved unsanitized stuff.
+ if(candidate.name)
+ candidate.name = sanitizeSafe(candidate.name, MAX_NAME_LEN)
+ if(candidate.description)
+ candidate.description = sanitize(candidate.description)
+ if(candidate.role)
+ candidate.role = sanitize(candidate.role)
+ if(candidate.comments)
+ candidate.comments = sanitize(candidate.comments)
+
+ if("submit")
+ if(candidate)
+ candidate.ready = 1
+ for(var/obj/item/device/paicard/p in world)
+ if(p.looking_for_personality == 1)
+ p.alertUpdate()
+ usr << browse(null, "window=paiRecruit")
+ return
+ if (config.sql_saves)
+ usr.client.prefs.save_preferences()
+ else
+ candidate.savefile_save(usr)
+ recruitWindow(usr, href_list["allow_submit"] != "0")
+
+/datum/controller/subsystem/pai/proc/recruitWindow(mob/M as mob, allowSubmit = TRUE)
+ var/datum/paiCandidate/candidate
+ for(var/datum/paiCandidate/c in pai_candidates)
+ if(!istype(c) || !istype(M))
+ break
+ if(c.key == M.key)
+ candidate = c
+ if(!candidate)
+ candidate = new /datum/paiCandidate()
+ candidate.key = M.key
+ pai_candidates.Add(candidate)
+
+ // Load the data before displaying.
+ if (!config.sql_saves)
+ candidate.savefile_load(M)
+ else
+ M.client.prefs.load_preferences()
+
+ var/dat = ""
+ dat += {"
+
+ "}
+
+ dat += {"
+
+ pAI Personality Configuration
+ Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!
+
+
+
+ Name :
+ [candidate.name]
+
+
+ What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
+
+
+ Description :
+ [candidate.description]
+
+
+ What sort of pAI you typically play; your mannerisms, your quirks, etc. This can be as sparse or as detailed as you like.
+
+
+ Preferred Role :
+ [candidate.role]
+
+
+ Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
+
+
+ OOC Comments :
+ [candidate.comments]
+
+
+ Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
+
+
+
+ "}
+ if(allowSubmit)
+ dat += {"
+
+ "}
+ dat += {"
+
+ "}
+
+ M << browse(dat, "window=paiRecruit;size=580x580;")
+
+// TODO: Refactor the spaghetti above into NanoUI.
+
+/datum/controller/subsystem/pai/proc/findPAI(obj/item/device/paicard/p, mob/user)
+ requestRecruits(user)
+ var/list/available = list()
+ for(var/datum/paiCandidate/c in SSpai.pai_candidates)
+ if(c.ready)
+ var/found = 0
+ for(var/mob/dead/observer/o in player_list)
+ if(o.key == c.key && o.MayRespawn())
+ found = 1
+ if(found)
+ available.Add(c)
+ var/dat = ""
+
+ dat += {"
+
+
+
+
+
+
+ pAI Availability List
+ "}
+ dat += "Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.
"
+
+ for(var/datum/paiCandidate/c in available)
+ dat += {"
+
+
+ Name:
+ [c.name]
+
+
+ Description:
+ [c.description]
+
+
+ Preferred Role:
+ [c.role]
+
+
+ OOC Comments:
+ [c.comments]
+
+
+
+
+ "}
+
+ dat += {"
+
+
+ "}
+
+ user << browse(dat, "window=findPai")
+
+/datum/controller/subsystem/pai/proc/requestRecruits(mob/user)
+ inquirer = user
+ for(var/mob/dead/observer/O in player_list)
+ if(!O.MayRespawn())
+ continue
+ if(jobban_isbanned(O, "pAI"))
+ continue
+ if(asked.Find(O.key))
+ if(world.time < asked[O.key] + askDelay)
+ continue
+ else
+ asked.Remove(O.key)
+ if(O.client)
+ if(BE_PAI in O.client.prefs.be_special_role)
+ question(O.client)
+
+/datum/controller/subsystem/pai/proc/question(client/C)
+ set waitfor = FALSE
+
+ if(!C)
+ return
+ asked.Add(C.key)
+ asked[C.key] = world.time
+ var/response = alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round")
+ if(!C) return //handle logouts that happen whilst the alert is waiting for a response.
+ if(response == "Yes")
+ recruitWindow(C.mob)
+ else if (response == "Never for this round")
+ C.prefs.be_special_role -= BE_PAI
+
+/datum/paiCandidate
+ var/name
+ var/key
+ var/description
+ var/role
+ var/comments
+ var/ready = 0
diff --git a/code/controllers/subsystems/parallax.dm b/code/controllers/subsystems/parallax.dm
new file mode 100644
index 00000000000..5b96f9db022
--- /dev/null
+++ b/code/controllers/subsystems/parallax.dm
@@ -0,0 +1,25 @@
+#define GRID_WIDTH 3
+
+var/datum/controller/subsystem/parallax/SSparallax
+
+/datum/controller/subsystem/parallax
+ name = "Space Parallax"
+ init_order = SS_INIT_PARALLAX
+ flags = SS_NO_FIRE
+
+ var/list/parallax_on_clients = list()
+ var/list/parallax_icon[(GRID_WIDTH**2)*3]
+ var/space_color = "#050505"
+ var/parallax_initialized = 0
+
+/datum/controller/subsystem/parallax/New()
+ NEW_SS_GLOBAL(SSparallax)
+
+/datum/controller/subsystem/parallax/Initialize(timeofday)
+ create_global_parallax_icons()
+ ..(timeofday, TRUE)
+
+/datum/controller/subsystem/parallax/stat_entry()
+ ..("C:[parallax_on_clients.len]")
+
+#undef GRID_WIDTH
diff --git a/code/controllers/subsystems/processing/airflow.dm b/code/controllers/subsystems/processing/airflow.dm
new file mode 100644
index 00000000000..4d129e41a7f
--- /dev/null
+++ b/code/controllers/subsystems/processing/airflow.dm
@@ -0,0 +1,157 @@
+/var/datum/controller/subsystem/processing/airflow/SSairflow
+
+#define CLEAR_OBJECT(TARGET) \
+ processing -= TARGET; \
+ TARGET.airflow_dest = null; \
+ TARGET.airflow_speed = 0; \
+ TARGET.airflow_time = 0; \
+ TARGET.airflow_skip_speedcheck = FALSE; \
+ if (TARGET.airflow_od) { \
+ TARGET.density = 0; \
+ }
+
+/datum/controller/subsystem/processing/airflow
+ name = "Airflow"
+ wait = 1
+ flags = SS_NO_INIT
+ priority = SS_PRIORITY_AIRFLOW
+
+/datum/controller/subsystem/processing/airflow/New()
+ NEW_SS_GLOBAL(SSairflow)
+
+/datum/controller/subsystem/processing/airflow/fire(resumed = FALSE)
+ if (!resumed)
+ currentrun = processing.Copy() // Defined in parent.
+
+ var/list/curr = currentrun // Defined in parent.
+
+ while (curr.len)
+ var/atom/movable/target = curr[curr.len]
+ curr.len--
+
+ if (target.airflow_speed <= 0)
+ CLEAR_OBJECT(target)
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ if (target.airflow_process_delay > 0)
+ target.airflow_process_delay -= 1
+ if (MC_TICK_CHECK)
+ return
+ continue
+ else if (target.airflow_process_delay)
+ target.airflow_process_delay = 0
+
+ target.airflow_speed = min(target.airflow_speed, 15)
+ target.airflow_speed -= vsc.airflow_speed_decay
+ if (!target.airflow_skip_speedcheck)
+ if (target.airflow_speed > 7)
+ if (target.airflow_time++ >= target.airflow_speed - 7)
+ if (target.airflow_od)
+ target.density = 0
+ target.airflow_skip_speedcheck = TRUE
+
+ if (MC_TICK_CHECK)
+ return
+ continue
+ else
+ if (target.airflow_od)
+ target.density = 0
+ target.airflow_process_delay = max(1, 10 - (target.airflow_speed + 3))
+ target.airflow_skip_speedcheck = TRUE
+
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ target.airflow_skip_speedcheck = FALSE
+
+ if (target.airflow_od)
+ target.density = 1
+
+ if (!target.airflow_dest || target.loc == target.airflow_dest)
+ target.airflow_dest = locate(min(max(target.x + target.airflow_xo, 1), world.maxx), min(max(target.y + target.airflow_yo, 1), world.maxy), target.z)
+
+ if ((target.x == 1) || (target.x == world.maxx) || (target.y == 1) || (target.y == world.maxy))
+ CLEAR_OBJECT(target)
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ if (!isturf(target.loc))
+ CLEAR_OBJECT(target)
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ step_towards(target, target.airflow_dest)
+ if (ismob(target) && target:client)
+ target:setMoveCooldown(vsc.airflow_mob_slowdown)
+
+ if (MC_TICK_CHECK)
+ return
+
+#undef CLEAR_OBJECT
+
+/atom/movable
+ var/tmp/airflow_xo
+ var/tmp/airflow_yo
+ var/tmp/airflow_od
+ var/tmp/airflow_process_delay
+ var/tmp/airflow_skip_speedcheck
+
+/atom/movable/proc/prepare_airflow(n)
+ if (!airflow_dest || airflow_speed < 0 || last_airflow > world.time - vsc.airflow_delay)
+ return FALSE
+ if (airflow_speed)
+ airflow_speed = n / max(get_dist(src, airflow_dest), 1)
+ return FALSE
+
+ if (airflow_dest == loc)
+ step_away(src, loc)
+
+ if (!src.AirflowCanMove(n))
+ return FALSE
+
+ if (ismob(src))
+ src << span("danger", "You are pushed away by airflow!")
+
+ last_airflow = world.time
+ var/airflow_falloff = 9 - sqrt((x - airflow_dest.x) ** 2 + (y - airflow_dest.y) ** 2)
+
+ if (airflow_falloff < 1)
+ airflow_dest = null
+ return FALSE
+
+ airflow_speed = min(max(n * (9 / airflow_falloff), 1), 9)
+
+ airflow_od = 0
+
+ if (!density)
+ density = 1
+ airflow_od = 1
+
+ return TRUE
+
+/atom/movable/proc/GotoAirflowDest(n)
+ if (!prepare_airflow(n))
+ return
+
+ airflow_xo = airflow_dest.x - src.x
+ airflow_yo = airflow_dest.y - src.y
+
+ airflow_dest = null
+
+ SSairflow.processing += src
+
+/atom/movable/proc/RepelAirflowDest(n)
+ if (!prepare_airflow(n))
+ return
+
+ airflow_xo = -(airflow_dest.x - src.x)
+ airflow_yo = -(airflow_dest.y - src.y)
+
+ airflow_dest = null
+
+ SSairflow.processing += src
diff --git a/code/controllers/subsystems/processing/calamity.dm b/code/controllers/subsystems/processing/calamity.dm
new file mode 100644
index 00000000000..9fdeb90bd97
--- /dev/null
+++ b/code/controllers/subsystems/processing/calamity.dm
@@ -0,0 +1,10 @@
+// This is a separate processor so the MC can schedule singuloth/tesla/Nar-sie independent from other objects.
+
+var/datum/controller/subsystem/processing/SScalamity
+/datum/controller/subsystem/processing/calamity
+ name = "Calamity"
+ flags = SS_NO_INIT | SS_POST_FIRE_TIMING
+ priority = SS_PRIORITY_CALAMITY
+
+/datum/controller/subsystem/processing/calamity/New()
+ NEW_SS_GLOBAL(SScalamity)
diff --git a/code/controllers/subsystems/processing/disease.dm b/code/controllers/subsystems/processing/disease.dm
new file mode 100644
index 00000000000..bf902dfe16b
--- /dev/null
+++ b/code/controllers/subsystems/processing/disease.dm
@@ -0,0 +1,9 @@
+var/datum/controller/subsystem/processing/disease/SSdisease
+
+/datum/controller/subsystem/processing/disease
+ name = "Diseases"
+ flags = SS_KEEP_TIMING | SS_NO_INIT
+ priority = SS_PRIORITY_DISEASE
+
+/datum/controller/subsystem/processing/disease/New()
+ NEW_SS_GLOBAL(SSdisease)
diff --git a/code/controllers/subsystems/processing/disposals.dm b/code/controllers/subsystems/processing/disposals.dm
new file mode 100644
index 00000000000..a2b65340ed5
--- /dev/null
+++ b/code/controllers/subsystems/processing/disposals.dm
@@ -0,0 +1,14 @@
+/var/datum/controller/subsystem/processing/disposals/SSdisposals
+
+/datum/controller/subsystem/processing/disposals
+ name = "Disposals"
+ wait = 1 // deciseconds
+ flags = SS_NO_INIT | SS_BACKGROUND
+ priority = SS_PRIORITY_DISPOSALS
+
+ // Reference list for disposal sort junctions. Filled by sorting junctions' initialize().
+ var/list/tagger_locations
+
+/datum/controller/subsystem/processing/disposals/New()
+ NEW_SS_GLOBAL(SSdisposals)
+ LAZYINITLIST(tagger_locations)
diff --git a/code/controllers/subsystems/processing/fast_process.dm b/code/controllers/subsystems/processing/fast_process.dm
new file mode 100644
index 00000000000..692e451b529
--- /dev/null
+++ b/code/controllers/subsystems/processing/fast_process.dm
@@ -0,0 +1,10 @@
+/var/datum/controller/subsystem/processing/fast/SSfast_process
+
+// Not really much to it, literally just a faster-ticking SSprocessing.
+
+/datum/controller/subsystem/processing/fast
+ name = "Processing (Fast)"
+ wait = 5
+
+/datum/controller/subsystem/processing/fast/New()
+ NEW_SS_GLOBAL(SSfast_process)
diff --git a/code/controllers/subsystems/processing/modifiers.dm b/code/controllers/subsystems/processing/modifiers.dm
new file mode 100644
index 00000000000..746656a79f7
--- /dev/null
+++ b/code/controllers/subsystems/processing/modifiers.dm
@@ -0,0 +1,9 @@
+var/datum/controller/subsystem/processing/modifiers/SSmodifiers
+/datum/controller/subsystem/processing/modifiers
+ name = "Modifiers"
+ wait = 1 SECOND
+ flags = SS_NO_INIT
+ priority = SS_PRIORITY_MODIFIER
+
+/datum/controller/subsystem/processing/modifiers/New()
+ NEW_SS_GLOBAL(SSmodifiers)
diff --git a/code/controllers/subsystems/processing/overlays.dm b/code/controllers/subsystems/processing/overlays.dm
new file mode 100644
index 00000000000..68b2e4372ad
--- /dev/null
+++ b/code/controllers/subsystems/processing/overlays.dm
@@ -0,0 +1,209 @@
+var/datum/controller/subsystem/processing/overlays/SSoverlays
+
+/datum/controller/subsystem/processing/overlays
+ name = "Overlay"
+ flags = SS_TICKER|SS_FIRE_IN_LOBBY
+ wait = 1
+ priority = SS_PRIORITY_OVERLAY
+ init_order = SS_INIT_OVERLAY
+
+ stat_tag = "Ov"
+ currentrun = null
+ var/list/overlay_icon_state_caches
+ var/list/overlay_icon_cache
+ var/initialized = FALSE
+
+/datum/controller/subsystem/processing/overlays/New()
+ NEW_SS_GLOBAL(SSoverlays)
+ LAZYINITLIST(overlay_icon_state_caches)
+ LAZYINITLIST(overlay_icon_cache)
+
+/datum/controller/subsystem/processing/overlays/Initialize()
+ initialized = TRUE
+ Flush()
+ ..()
+
+/datum/controller/subsystem/processing/overlays/Recover()
+ overlay_icon_state_caches = SSoverlays.overlay_icon_state_caches
+ overlay_icon_cache = SSoverlays.overlay_icon_cache
+ processing = SSoverlays.processing
+
+/datum/controller/subsystem/processing/overlays/fire(resumed = FALSE, mc_check = TRUE)
+ while(processing.len)
+ var/atom/thing = processing[processing.len]
+ processing.len--
+ if(thing)
+ thing.compile_overlays(FALSE)
+ if(mc_check)
+ if(MC_TICK_CHECK)
+ break
+ else
+ CHECK_TICK
+
+/datum/controller/subsystem/processing/overlays/proc/Flush()
+ if(processing.len)
+ log_ss("overlays", "Flushing [processing.len] overlays.")
+ fire(mc_check = FALSE) //pair this thread up with the MC to get extra compile time
+
+/atom/proc/compile_overlays()
+ if(LAZYLEN(priority_overlays) && LAZYLEN(our_overlays))
+ overlays = our_overlays + priority_overlays
+ else if(LAZYLEN(our_overlays))
+ overlays = our_overlays
+ else if(LAZYLEN(priority_overlays))
+ overlays = priority_overlays
+ else
+ overlays.Cut()
+
+ overlay_queued = FALSE
+
+/atom/movable/compile_overlays()
+ ..()
+ UPDATE_OO_IF_PRESENT
+
+/turf/compile_overlays()
+ ..()
+ if (istype(above))
+ above.update_icon()
+
+/proc/iconstate2appearance(icon, iconstate)
+ var/static/image/stringbro = new()
+ var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches
+ var/list/cached_icon = icon_states_cache[icon]
+ if (cached_icon)
+ var/cached_appearance = cached_icon["[iconstate]"]
+ if (cached_appearance)
+ return cached_appearance
+ stringbro.icon = icon
+ stringbro.icon_state = iconstate
+ if (!cached_icon) //not using the macro to save an associated lookup
+ cached_icon = list()
+ icon_states_cache[icon] = cached_icon
+ var/cached_appearance = stringbro.appearance
+ cached_icon["[iconstate]"] = cached_appearance
+ return cached_appearance
+
+/proc/icon2appearance(icon)
+ var/static/image/iconbro = new()
+ var/list/icon_cache = SSoverlays.overlay_icon_cache
+ . = icon_cache[icon]
+ if (!.)
+ iconbro.icon = icon
+ . = iconbro.appearance
+ icon_cache[icon] = .
+
+/atom/proc/build_appearance_list(new_overlays)
+ var/static/image/appearance_bro = new()
+ if (!islist(new_overlays))
+ new_overlays = list(new_overlays)
+ else
+ listclearnulls(new_overlays)
+ for (var/i in 1 to length(new_overlays))
+ var/image/cached_overlay = new_overlays[i]
+ if (istext(cached_overlay))
+ new_overlays[i] = iconstate2appearance(icon, cached_overlay)
+ else if(isicon(cached_overlay))
+ new_overlays[i] = icon2appearance(cached_overlay)
+ else //image probable
+ appearance_bro.appearance = cached_overlay
+ if(!ispath(cached_overlay))
+ appearance_bro.dir = cached_overlay.dir
+ new_overlays[i] = appearance_bro.appearance
+ return new_overlays
+
+#define NOT_QUEUED_ALREADY (!(overlay_queued))
+#define QUEUE_FOR_COMPILE overlay_queued = TRUE; SSoverlays.processing += src;
+/atom/proc/cut_overlays(priority = FALSE)
+ var/list/cached_overlays = our_overlays
+ var/list/cached_priority = priority_overlays
+
+ var/need_compile = FALSE
+
+ if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays
+ cached_overlays.Cut() //clear regular overlays
+ need_compile = TRUE
+
+ if(priority && LAZYLEN(cached_priority))
+ cached_priority.Cut()
+ need_compile = TRUE
+
+ if(NOT_QUEUED_ALREADY && need_compile)
+ QUEUE_FOR_COMPILE
+
+/atom/proc/cut_overlay(list/overlays, priority)
+ if(!overlays)
+ return
+
+ overlays = build_appearance_list(overlays)
+
+ var/list/cached_overlays = our_overlays //sanic
+ var/list/cached_priority = priority_overlays
+ var/init_o_len = LAZYLEN(cached_overlays)
+ var/init_p_len = LAZYLEN(cached_priority) //starter pokemon
+
+ LAZYREMOVE(cached_overlays, overlays)
+ if(priority)
+ LAZYREMOVE(cached_priority, overlays)
+
+ if(NOT_QUEUED_ALREADY && ((init_o_len != LAZYLEN(cached_priority)) || (init_p_len != LAZYLEN(cached_overlays))))
+ QUEUE_FOR_COMPILE
+
+/atom/proc/add_overlay(list/overlays, priority = FALSE)
+ if(!overlays)
+ return
+
+ overlays = build_appearance_list(overlays)
+
+ LAZYINITLIST(our_overlays) //always initialized after this point
+ LAZYINITLIST(priority_overlays)
+
+ var/list/cached_overlays = our_overlays //sanic
+ var/list/cached_priority = priority_overlays
+ var/init_o_len = cached_overlays.len
+ var/init_p_len = cached_priority.len //starter pokemon
+ var/need_compile
+
+ if(priority)
+ cached_priority += overlays //or in the image. Can we use [image] = image?
+ need_compile = init_p_len != cached_priority.len
+ else
+ cached_overlays += overlays
+ need_compile = init_o_len != cached_overlays.len
+
+ if(NOT_QUEUED_ALREADY && need_compile) //have we caught more pokemon?
+ QUEUE_FOR_COMPILE
+
+/atom/proc/copy_overlays(atom/other, cut_old = FALSE) //copys our_overlays from another atom
+ if(!other)
+ if(cut_old)
+ cut_overlays()
+ return
+
+ var/list/cached_other = other.our_overlays
+ if(cached_other)
+ if(cut_old)
+ our_overlays = cached_other.Copy()
+ else
+ our_overlays |= cached_other
+ if(NOT_QUEUED_ALREADY)
+ QUEUE_FOR_COMPILE
+ else if(cut_old)
+ cut_overlays()
+
+#undef NOT_QUEUED_ALREADY
+#undef QUEUE_FOR_COMPILE
+
+//TODO: Better solution for these?
+/image/proc/add_overlay(x)
+ overlays += x
+
+/image/proc/cut_overlay(x)
+ overlays -= x
+
+/image/proc/cut_overlays(x)
+ overlays.Cut()
+
+/atom
+ var/tmp/list/our_overlays //our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate
+ var/tmp/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
+ var/tmp/overlay_queued
diff --git a/code/controllers/subsystems/processing/pipenet.dm b/code/controllers/subsystems/processing/pipenet.dm
new file mode 100644
index 00000000000..93affaacae4
--- /dev/null
+++ b/code/controllers/subsystems/processing/pipenet.dm
@@ -0,0 +1,16 @@
+var/datum/controller/subsystem/processing/pipenet/SSpipenet
+/datum/controller/subsystem/processing/pipenet
+ name = "Pipenet"
+ init_order = SS_INIT_PIPENET
+ priority = SS_PRIORITY_MACHINERY
+ flags = 0
+
+/datum/controller/subsystem/processing/pipenet/New()
+ NEW_SS_GLOBAL(SSpipenet)
+
+/datum/controller/subsystem/processing/pipenet/Initialize(timeofday)
+ for (var/obj/machinery/atmospherics/machine in machines)
+ machine.build_network()
+
+ CHECK_TICK
+ ..()
diff --git a/code/modules/hydroponics/seed_controller.dm b/code/controllers/subsystems/processing/plants.dm
similarity index 57%
rename from code/modules/hydroponics/seed_controller.dm
rename to code/controllers/subsystems/processing/plants.dm
index 89cb299f5f6..2c18ddc12b1 100644
--- a/code/modules/hydroponics/seed_controller.dm
+++ b/code/controllers/subsystems/processing/plants.dm
@@ -1,53 +1,23 @@
-// Attempts to offload processing for the spreading plants from the MC.
-// Processes vines/spreading plants.
+/var/datum/controller/subsystem/processing/plants/SSplants
-#define PLANTS_PER_TICK 500 // Cap on number of plant segments processed.
-#define PLANT_TICK_TIME 75 // Number of ticks between the plant processor cycling.
+/datum/controller/subsystem/processing/plants
+ name = "Seeds & Plants"
+ flags = 0 // Override parent's flags.
+ wait = 75
+ init_order = SS_INIT_SEEDS
+ priority = SS_PRIORITY_PLANTS
-// Debug for testing seed genes.
-/client/proc/show_plant_genes()
- set category = "Debug"
- set name = "Show Plant Genes"
- set desc = "Prints the round's plant gene masks."
-
- if(!holder) return
-
- if(!plant_controller || !plant_controller.gene_tag_masks)
- usr << "Gene masks not set."
- return
-
- for(var/mask in plant_controller.gene_tag_masks)
- usr << "[mask]: [plant_controller.gene_tag_masks[mask]]"
-
-var/global/datum/controller/plants/plant_controller // Set in New().
-
-/datum/controller/plants
-
- var/plants_per_tick = PLANTS_PER_TICK
- var/plant_tick_time = PLANT_TICK_TIME
var/list/product_descs = list() // Stores generated fruit descs.
- var/list/plant_queue = list() // All queued plants.
var/list/seeds = list() // All seed data stored here.
var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness.
var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds.
var/list/plant_sprites = list() // List of all harvested product sprites.
var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages.
- var/processing = 0 // Off/on.
-/datum/controller/plants/New()
- if(plant_controller && plant_controller != src)
- log_debug("Rebuilding plant controller.")
- qdel(plant_controller)
- plant_controller = src
- setup()
- process()
-
-// Predefined/roundstart varieties use a string key to make it
-// easier to grab the new variety when mutating. Post-roundstart
-// and mutant varieties use their uid converted to a string instead.
-// Looks like shit but it's sort of necessary.
-/datum/controller/plants/proc/setup()
+/datum/controller/subsystem/processing/plants/New()
+ NEW_SS_GLOBAL(SSplants)
+/datum/controller/subsystem/processing/plants/Initialize(timeofday)
// Build the icon lists.
for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi'))
var/split = findtext(icostate,"-")
@@ -95,12 +65,23 @@ var/global/datum/controller/plants/plant_controller // Set in New().
used_masks += gene_mask
plant_traits -= gene_tag
gene_tag_masks[gene_tag] = gene_mask
+
+ ..()
+
+/datum/controller/subsystem/processing/plants/Recover()
+ if (istype(SSplants))
+ src.product_descs = SSplants.product_descs
+ src.seeds = SSplants.seeds
+ src.gene_tag_masks = SSplants.gene_tag_masks
+ src.plant_icon_cache = SSplants.plant_icon_cache
+ src.plant_sprites = SSplants.plant_sprites
+ src.plant_product_sprites = SSplants.plant_product_sprites
// Proc for creating a random seed type.
-/datum/controller/plants/proc/create_random_seed(var/survive_on_station)
+/datum/controller/subsystem/processing/plants/proc/create_random_seed(var/survive_on_station)
var/datum/seed/seed = new()
seed.randomize()
- seed.uid = plant_controller.seeds.len + 1
+ seed.uid = seeds.len + 1
seed.name = "[seed.uid]"
seeds[seed.name] = seed
@@ -119,32 +100,17 @@ var/global/datum/controller/plants/plant_controller // Set in New().
seed.set_trait(TRAIT_HIGHKPA_TOLERANCE,200)
return seed
-/datum/controller/plants/proc/process()
- processing = 1
- spawn(0)
- set background = 1
- var/processed = 0
- while(1)
- if(!processing)
- sleep(plant_tick_time)
- else
- processed = 0
- if(plant_queue.len)
- var/target_to_process = min(plant_queue.len,plants_per_tick)
- for(var/x=0;x pda_msg_amt)
+ pda_msg_amt = MS.pda_msgs.len
+ if(MS.rc_msgs.len > rc_msg_amt)
+ rc_msg_amt = MS.rc_msgs.len
+
+ feedback_set_details("radio_usage","")
+
+ feedback_add_details("radio_usage","COM-[msg_common.len]")
+ feedback_add_details("radio_usage","SCI-[msg_science.len]")
+ feedback_add_details("radio_usage","HEA-[msg_command.len]")
+ feedback_add_details("radio_usage","MED-[msg_medical.len]")
+ feedback_add_details("radio_usage","ENG-[msg_engineering.len]")
+ feedback_add_details("radio_usage","SEC-[msg_security.len]")
+ feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]")
+ feedback_add_details("radio_usage","SYN-[msg_syndicate.len]")
+ feedback_add_details("radio_usage","CAR-[msg_cargo.len]")
+ feedback_add_details("radio_usage","SRV-[msg_service.len]")
+ feedback_add_details("radio_usage","OTH-[messages.len]")
+ feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
+ feedback_add_details("radio_usage","RC-[rc_msg_amt]")
+
+
+ feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set.
+
+// Called on world reboot.
+/datum/controller/subsystem/statistics/Shutdown()
+ if(!feedback)
+ return
+
+ if (!config.sql_enabled || !config.sql_stats)
+ return
+
+ round_end_data_gathering() //round_end time logging and some other data processing
+ establish_db_connection(dbcon)
+ if(!dbcon.IsConnected())
+ return
+
+ for(var/datum/feedback_variable/FV in feedback)
+ var/sql = "INSERT INTO ss13_feedback VALUES (null, Now(), \"[game_id]\", \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")"
+ var/DBQuery/query_insert = dbcon.NewQuery(sql)
+ query_insert.Execute()
+
+
+// Sanitize inputs to avoid SQL injection attacks
+/proc/sql_sanitize_text(var/text)
+ text = replacetext(text, "'", "''")
+ text = replacetext(text, ";", "")
+ text = replacetext(text, "&", "")
+ return text
+
+/proc/feedback_set(var/variable,var/value)
+ if(!SSfeedback)
+ return
+
+ variable = sql_sanitize_text(variable)
+
+ var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable)
+
+ if(!FV) return
+
+ FV.set_value(value)
+
+/proc/feedback_inc(var/variable,var/value)
+ if(!SSfeedback) return
+
+ variable = sql_sanitize_text(variable)
+
+ var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable)
+
+ if(!FV) return
+
+ FV.inc(value)
+
+/proc/feedback_dec(var/variable,var/value)
+ if(!SSfeedback) return
+
+ variable = sql_sanitize_text(variable)
+
+ var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable)
+
+ if(!FV) return
+
+ FV.dec(value)
+
+/proc/feedback_set_details(var/variable,var/details)
+ if(!SSfeedback) return
+
+ variable = sql_sanitize_text(variable)
+ details = sql_sanitize_text(details)
+
+ var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable)
+
+ if(!FV) return
+
+ FV.set_details(details)
+
+/proc/feedback_add_details(var/variable,var/details)
+ if(!SSfeedback) return
+
+ variable = sql_sanitize_text(variable)
+ details = sql_sanitize_text(details)
+
+ var/datum/feedback_variable/FV = SSfeedback.find_feedback_datum(variable)
+
+ if(!FV) return
+
+ FV.add_details(details)
+
+/proc/sql_report_death(var/mob/living/carbon/human/H)
+ if(!config.sql_enabled || !config.sql_stats)
+ return
+ if(!H)
+ return
+ if(!H.key || !H.mind)
+ return
+
+ var/area/placeofdeath = get_area(H)
+ var/podname = placeofdeath ? placeofdeath.name : "Unknown area"
+
+ var/sqlname = sanitizeSQL(H.real_name)
+ var/sqlkey = sanitizeSQL(H.key)
+ var/sqlpod = sanitizeSQL(podname)
+ var/sqlspecial = sanitizeSQL(H.mind.special_role)
+ var/sqljob = sanitizeSQL(H.mind.assigned_role)
+ var/laname
+ var/lakey
+ if(H.lastattacker)
+ laname = sanitizeSQL(H.lastattacker:real_name)
+ lakey = sanitizeSQL(H.lastattacker:key)
+ var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
+ var/coord = "[H.x], [H.y], [H.z]"
+ //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
+ establish_db_connection(dbcon)
+ if(!dbcon.IsConnected())
+ log_game("SQL ERROR during death reporting. Failed to connect.")
+ else
+ var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')")
+ if(!query.Execute())
+ var/err = query.ErrorMsg()
+ log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")
+
+
+/proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
+ if(!config.sql_enabled || !config.sql_stats)
+ return
+ if(!H)
+ return
+ if(!H.key || !H.mind)
+ return
+
+ var/area/placeofdeath = get_area(H)
+ var/podname = placeofdeath ? placeofdeath.name : "Unknown area"
+
+ var/sqlname = sanitizeSQL(H.real_name)
+ var/sqlkey = sanitizeSQL(H.key)
+ var/sqlpod = sanitizeSQL(podname)
+ var/sqlspecial = sanitizeSQL(H.mind.special_role)
+ var/sqljob = sanitizeSQL(H.mind.assigned_role)
+ var/laname
+ var/lakey
+ if(H.lastattacker)
+ laname = sanitizeSQL(H.lastattacker:real_name)
+ lakey = sanitizeSQL(H.lastattacker:key)
+ var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
+ var/coord = "[H.x], [H.y], [H.z]"
+ //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
+ establish_db_connection(dbcon)
+ if(!dbcon.IsConnected())
+ log_game("SQL ERROR during death reporting. Failed to connect.")
+ else
+ var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')")
+ if(!query.Execute())
+ var/err = query.ErrorMsg()
+ log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")
diff --git a/code/controllers/subsystems/sun.dm b/code/controllers/subsystems/sun.dm
new file mode 100644
index 00000000000..aefa5ca5b97
--- /dev/null
+++ b/code/controllers/subsystems/sun.dm
@@ -0,0 +1,65 @@
+var/datum/controller/subsystem/sun/sun
+
+/datum/controller/subsystem/sun
+ name = "Sun"
+ flags = SS_NO_INIT | SS_POST_FIRE_TIMING | SS_BACKGROUND
+ wait = 1 MINUTE
+ priority = SS_PRIORITY_SUN
+
+ var/angle
+ var/dx
+ var/dy
+ var/rate
+ var/list/solars // for debugging purposes, references solars_list at the constructor
+ var/tmp/list/updating_solars
+ var/solar_next_update // last time the sun position was checked and adjusted
+
+/datum/controller/subsystem/sun/New()
+ NEW_SS_GLOBAL(sun)
+ LAZYINITLIST(solars)
+
+ rate = rand(50,200)/100 // 50% - 200% of standard rotation
+ if(prob(50)) // same chance to rotate clockwise than counter-clockwise
+ rate = -rate
+ solar_next_update = world.time // init the timer
+ angle = rand (0,360)
+
+/datum/controller/subsystem/sun/stat_entry()
+ ..("A:[angle] R:[rate] S:[LAZYLEN(solars)]")
+
+/datum/controller/subsystem/sun/fire(resumed = 0)
+ if (!resumed)
+ angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate
+
+ // now calculate and cache the (dx,dy) increments for line drawing
+
+ var/s = sin(angle)
+ var/c = cos(angle)
+
+ // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)"
+ // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions
+
+ if( abs(s) < abs(c))
+
+ dx = s / abs(c)
+ dy = c / abs(c)
+
+ else
+ dx = s / abs(s)
+ dy = c / abs(s)
+
+ updating_solars = solars.Copy()
+
+ //now tell the solar control computers to update their status and linked devices
+ while (updating_solars.len)
+ var/obj/machinery/power/solar_control/SC = updating_solars[updating_solars.len]
+ updating_solars.len--
+
+ if (QDELETED(SC) || !SC.powernet)
+ solars -= SC
+ continue
+
+ SC.update()
+
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm
new file mode 100644
index 00000000000..4096e36a8af
--- /dev/null
+++ b/code/controllers/subsystems/supply.dm
@@ -0,0 +1,190 @@
+//Config stuff
+#define SUPPLY_DOCKZ 2 //Z-level of the Dock.
+#define SUPPLY_STATIONZ 1 //Z-level of the Station.
+#define SUPPLY_STATION_AREATYPE /area/supply/station //Type of the supply shuttle area for station
+#define SUPPLY_DOCK_AREATYPE /area/supply/dock //Type of the supply shuttle area for dock
+
+var/datum/controller/subsystem/cargo/SScargo
+
+/datum/controller/subsystem/cargo
+ name = "Cargo"
+ wait = 30 SECONDS
+ flags = SS_NO_TICK_CHECK
+ init_order = SS_INIT_CARGO
+
+ //supply points
+ var/points = 50
+ var/points_per_process = 1
+ var/points_per_slip = 2
+ var/points_per_crate = 5
+ var/points_per_platinum = 5 // 5 points per sheet
+ var/points_per_phoron = 5
+ //control
+ var/ordernum
+ var/list/shoppinglist = list()
+ var/list/requestlist = list()
+ var/list/supply_packs = list()
+ //shuttle movement
+ var/movetime = 1200
+ var/datum/shuttle/ferry/supply/shuttle
+
+/datum/controller/subsystem/cargo/Recover()
+ src.points = SScargo.points
+ src.shoppinglist = SScargo.shoppinglist
+ src.requestlist = SScargo.requestlist
+ src.supply_packs = SScargo.supply_packs
+ src.shuttle = SScargo.shuttle
+
+/datum/controller/subsystem/cargo/Initialize(timeofday)
+ ordernum = rand(1,9000)
+
+ for (var/typepath in subtypesof(/datum/supply_packs))
+ var/datum/supply_packs/P = new typepath()
+ supply_packs[P.name] = P
+
+ var/datum/cargospawner/spawner = new
+ spawner.start()
+ qdel(spawner)
+ ..()
+
+/datum/controller/subsystem/cargo/New()
+ NEW_SS_GLOBAL(SScargo)
+
+/datum/controller/subsystem/cargo/fire()
+ points += points_per_process
+
+//To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types.
+/datum/controller/subsystem/cargo/proc/forbidden_atoms_check(atom/A)
+ if(istype(A,/mob/living))
+ 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/i=1, i<=A.contents.len, i++)
+ var/atom/B = A.contents[i]
+ if(.(B))
+ return 1
+
+ //Sellin
+/datum/controller/subsystem/cargo/proc/sell()
+ var/area/area_shuttle = shuttle.get_location_area()
+ if(!area_shuttle) return
+
+ var/phoron_count = 0
+ var/plat_count = 0
+
+ for(var/atom/movable/MA in area_shuttle)
+ if(MA.anchored) continue
+
+ // Must be in a crate!
+ if(istype(MA,/obj/structure/closet/crate))
+ callHook("sell_crate", list(MA, area_shuttle))
+
+ points += points_per_crate
+ var/find_slip = 1
+
+ for(var/atom in MA)
+ // Sell manifests
+ var/atom/A = atom
+ if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
+ var/obj/item/weapon/paper/manifest/slip = A
+ if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
+ points += points_per_slip
+ find_slip = 0
+ continue
+
+ // Sell phoron and platinum
+ if(istype(A, /obj/item/stack))
+ var/obj/item/stack/P = A
+ switch(P.get_material_name())
+ if("phoron") phoron_count += P.get_amount()
+ if("platinum") plat_count += P.get_amount()
+ qdel(MA)
+
+ if(phoron_count)
+ points += phoron_count * points_per_phoron
+
+ if(plat_count)
+ points += plat_count * points_per_platinum
+
+//Buyin
+/datum/controller/subsystem/cargo/proc/buy()
+ if(!shoppinglist.len) return
+
+ var/area/area_shuttle = shuttle.get_location_area()
+ if(!area_shuttle) return
+
+ var/list/clear_turfs = list()
+
+ for(var/turf/T in area_shuttle)
+ if(T.density) continue
+ var/contcount
+ for(var/atom/A in T.contents)
+ if(!A.simulated)
+ continue
+ contcount++
+ if(contcount)
+ continue
+ clear_turfs += T
+
+ for(var/S in shoppinglist)
+ if(!clear_turfs.len) break
+ var/i = rand(1,clear_turfs.len)
+ var/turf/pickedloc = clear_turfs[i]
+ clear_turfs.Cut(i,i+1)
+
+ var/datum/supply_order/SO = S
+ var/datum/supply_packs/SP = SO.object
+
+ var/obj/A = new SP.containertype(pickedloc)
+ A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
+
+ //supply manifest generation begin
+
+ var/obj/item/weapon/paper/manifest/slip
+ if(!SP.contraband)
+ slip = new /obj/item/weapon/paper/manifest(A)
+ slip.is_copy = 0
+ slip.info = "[command_name()] Shipping Manifest "
+ slip.info +="Order #[SO.ordernum] "
+ slip.info +="Destination: [station_name] "
+ slip.info +="[shoppinglist.len] PACKAGES IN THIS SHIPMENT "
+ slip.info +="CONTENTS:"
+
+ //spawn the stuff, finish generating the manifest while you're at it
+ if(SP.access)
+ if(isnum(SP.access))
+ A.req_access = list(SP.access)
+ else if(islist(SP.access))
+ var/list/L = SP.access // access var is a plain var, we need a list
+ A.req_access = L.Copy()
+ else
+ world << "Supply pack with invalid access restriction [SP.access] encountered! "
+
+ var/list/contains
+ if(istype(SP,/datum/supply_packs/randomised))
+ var/datum/supply_packs/randomised/SPR = SP
+ contains = list()
+ if(SPR.contains.len)
+ for(var/j=1,j<=SPR.num_contained,j++)
+ contains += pick(SPR.contains)
+ else
+ contains = SP.contains
+
+ for(var/typepath in contains)
+ if(!typepath) continue
+ var/atom/B2 = new typepath(A)
+ if(SP.amount && B2:amount) B2:amount = SP.amount
+ if(slip) slip.info += "[B2.name] " //add the item to the manifest
+
+ //manifest finalisation
+ if(slip)
+ slip.info += " "
+ slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS "
+
+ shoppinglist.Cut()
+ return
diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm
new file mode 100644
index 00000000000..c10a2f26b01
--- /dev/null
+++ b/code/controllers/subsystems/ticker.dm
@@ -0,0 +1,553 @@
+#define LOBBY_TIME 180
+
+var/datum/controller/subsystem/ticker/SSticker
+
+/datum/controller/subsystem/ticker
+ // -- Subsystem stuff --
+ name = "Game Ticker"
+
+ priority = SS_PRIORITY_TICKER
+ flags = SS_NO_TICK_CHECK | SS_FIRE_IN_LOBBY
+ init_order = SS_INIT_LOBBY
+
+ wait = 1 SECOND
+
+ // -- Gameticker --
+ var/const/restart_timeout = 600
+ var/current_state = GAME_STATE_PREGAME
+
+ var/hide_mode = 0
+ var/datum/game_mode/mode = null
+ var/post_game = 0
+ var/event_time = null
+ var/event = 0
+
+ var/login_music // music played in pregame lobby
+
+ var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking.
+
+ var/Bible_icon_state // icon_state the chaplain has chosen for his bible
+ var/Bible_item_state // item_state the chaplain has chosen for his bible
+ var/Bible_name // name of the bible
+ var/Bible_deity_name
+
+ var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
+
+ var/list/syndicate_coalition = list() // list of traitor-compatible factions
+ var/list/factions = list() // list of all factions
+ var/list/availablefactions = list() // list of factions with openings
+
+ var/pregame_timeleft = 0
+
+ var/delay_end = 0 //if set to nonzero, the round will not restart on it's own
+
+ var/triai = 0 //Global holder for Triumvirate
+ var/tipped = 0 //Did we broadcast the tip of the day yet?
+ var/selected_tip // What will be the tip of the day?
+
+ var/round_end_announced = 0 // Spam Prevention. Announce round end only once.
+
+ //station_explosion used to be a variable for every mob's hud. Which was a waste!
+ //Now we have a general cinematic centrally held within the gameticker....far more efficient!
+ var/obj/screen/cinematic = null
+
+ var/list/possible_lobby_tracks = list(
+ 'sound/music/space.ogg',
+ 'sound/music/traitor.ogg',
+ 'sound/music/title2.ogg',
+ 'sound/music/clouds.s3m',
+ 'sound/music/space_oddity.ogg'
+ )
+
+ var/lobby_ready = FALSE
+ var/is_revote = FALSE
+
+/datum/controller/subsystem/ticker/New()
+ NEW_SS_GLOBAL(SSticker)
+
+/datum/controller/subsystem/ticker/Initialize(timeofday)
+ pregame()
+
+/datum/controller/subsystem/ticker/stat_entry()
+ var/state = ""
+ switch (current_state)
+ if (GAME_STATE_PREGAME)
+ state = "PRE"
+ if (GAME_STATE_SETTING_UP)
+ state = "SETUP"
+ if (GAME_STATE_PLAYING)
+ state = "PLAY"
+ if (GAME_STATE_FINISHED)
+ state = "FIN"
+ else
+ state = "UNK"
+ ..("State: [state]")
+
+/datum/controller/subsystem/ticker/Recover()
+ // Copy stuff over so we don't lose any state.
+ current_state = SSticker.current_state
+
+ hide_mode = SSticker.hide_mode
+ mode = SSticker.mode
+ post_game = SSticker.post_game
+ event_time = SSticker.event_time
+ event = SSticker.event
+
+ login_music = SSticker.login_music
+
+ minds = SSticker.minds
+
+ Bible_icon_state = SSticker.Bible_icon_state
+ Bible_item_state = SSticker.Bible_item_state
+ Bible_deity_name = SSticker.Bible_deity_name
+
+ random_players = SSticker.random_players
+
+ syndicate_coalition = SSticker.syndicate_coalition
+ factions = SSticker.factions
+ availablefactions = SSticker.availablefactions
+
+ pregame_timeleft = SSticker.pregame_timeleft
+
+ delay_end = SSticker.delay_end
+
+ triai = SSticker.triai
+ tipped = SSticker.tipped
+ selected_tip = SSticker.selected_tip
+
+ round_end_announced = SSticker.round_end_announced
+
+ cinematic = SSticker.cinematic
+
+/datum/controller/subsystem/ticker/fire()
+ if (!lobby_ready)
+ lobby_ready = TRUE
+ return
+
+ switch (current_state)
+ if (GAME_STATE_PREGAME, GAME_STATE_SETTING_UP)
+ pregame_tick()
+ if (GAME_STATE_PLAYING)
+ game_tick()
+
+/datum/controller/subsystem/ticker/proc/pregame_tick()
+ if (round_progressing)
+ pregame_timeleft--
+
+ if (current_state == GAME_STATE_PREGAME && pregame_timeleft == config.vote_autogamemode_timeleft)
+ if (!vote.time_remaining)
+ vote.autogamemode()
+ return
+
+ if (pregame_timeleft <= 10 && !tipped)
+ send_tip_of_the_round()
+ tipped = TRUE
+
+ if (pregame_timeleft <= 0 || current_state == GAME_STATE_SETTING_UP)
+ current_state = GAME_STATE_SETTING_UP
+ wait = 2 SECONDS
+ if (!setup())
+ // Something fucked up.
+ wait = 1 SECOND
+ is_revote = TRUE
+ pregame()
+
+/datum/controller/subsystem/ticker/proc/game_tick()
+ if(current_state != GAME_STATE_PLAYING)
+ return 0
+
+ mode.process()
+
+ var/game_finished = 0
+ var/mode_finished = 0
+ if (config.continous_rounds)
+ game_finished = (emergency_shuttle.returned() || mode.station_was_nuked)
+ mode_finished = (!post_game && mode.check_finished())
+ else
+ game_finished = (mode.check_finished() || (emergency_shuttle.returned() && emergency_shuttle.evac == 1)) || universe_has_ended
+ mode_finished = game_finished
+
+ if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game))
+ current_state = GAME_STATE_FINISHED
+
+ declare_completion()
+
+ spawn(50)
+ callHook("roundend")
+
+ if (universe_has_ended)
+ if(mode.station_was_nuked)
+ feedback_set_details("end_proper","nuke")
+ else
+ feedback_set_details("end_proper","universe destroyed")
+ if(!delay_end)
+ world << "Rebooting due to destruction of station in [restart_timeout/10] seconds "
+ else
+ feedback_set_details("end_proper","proper completion")
+ if(!delay_end)
+ world << "Restarting in [restart_timeout/10] seconds "
+
+ if(!delay_end)
+ sleep(restart_timeout)
+ if(!delay_end)
+ world.Reboot()
+ else
+ world << "An admin has delayed the round end "
+ else
+ world << "An admin has delayed the round end "
+
+ else if (mode_finished)
+ post_game = 1
+
+ mode.cleanup()
+
+ //call a transfer shuttle vote
+ spawn(50)
+ if(!round_end_announced) // Spam Prevention. Now it should announce only once.
+ world << "The round has ended! "
+ round_end_announced = 1
+ vote.autotransfer()
+
+ return 1
+
+/datum/controller/subsystem/ticker/proc/declare_completion()
+ set waitfor = FALSE
+
+ world << "A round of [mode.name] has ended! "
+ for(var/mob/Player in player_list)
+ if(Player.mind && !isnewplayer(Player))
+ if(Player.stat != DEAD)
+ var/turf/playerTurf = get_turf(Player)
+ if(emergency_shuttle.departed && emergency_shuttle.evac)
+ if(isNotAdminLevel(playerTurf.z))
+ Player << "You managed to survive, but were marooned on [station_name()] as [Player.real_name]... "
+ else
+ Player << "You managed to survive the events on [station_name()] as [Player.real_name]. "
+ else if(isAdminLevel(playerTurf.z))
+ Player << "You successfully underwent crew transfer after events on [station_name()] as [Player.real_name]. "
+ else if(issilicon(Player))
+ Player << "You remain operational after the events on [station_name()] as [Player.real_name]. "
+ else
+ Player << "You missed the crew transfer after the events on [station_name()] as [Player.real_name]. "
+ else
+ if(istype(Player,/mob/dead/observer))
+ var/mob/dead/observer/O = Player
+ if(!O.started_as_observer)
+ Player << "You did not survive the events on [station_name()]... "
+ else
+ Player << "You did not survive the events on [station_name()]... "
+ world << " "
+
+ for (var/mob/living/silicon/ai/aiPlayer in mob_list)
+ if (aiPlayer.stat != 2)
+ world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the round were: "
+ else
+ world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were: "
+ aiPlayer.show_laws(1)
+
+ if (aiPlayer.connected_robots.len)
+ var/robolist = "The AI's loyal minions were: "
+ for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
+ robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]"
+ world << "[robolist]"
+
+ var/dronecount = 0
+
+ for (var/mob/living/silicon/robot/robo in mob_list)
+
+ if(istype(robo,/mob/living/silicon/robot/drone))
+ dronecount++
+ continue
+
+ if (!robo.connected_ai)
+ if (robo.stat != 2)
+ world << "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were: "
+ else
+ world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were: "
+
+ if(robo) //How the hell do we lose robo between here and the world messages directly above this?
+ robo.laws.show_laws(world)
+
+ if(dronecount)
+ world << "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] at the end of this round. "
+
+ mode.declare_completion()//To declare normal completion.
+
+ //Ask the event manager to print round end information
+ event_manager.RoundEnd()
+
+ //Print a list of antagonists to the server log
+ var/list/total_antagonists = list()
+ //Look into all mobs in world, dead or alive
+ for(var/datum/mind/Mind in minds)
+ var/temprole = Mind.special_role
+ if(temprole) //if they are an antagonist of some sort.
+ if(temprole in total_antagonists) //If the role exists already, add the name to it
+ total_antagonists[temprole] += ", [Mind.name]([Mind.key])"
+ else
+ total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob
+ total_antagonists[temprole] += ": [Mind.name]([Mind.key])"
+
+ //Now print them all into the log!
+ log_game("Antagonists at round end were...")
+ for(var/i in total_antagonists)
+ log_game("[i]s[total_antagonists[i]].")
+
+ return 1
+
+/datum/controller/subsystem/ticker/proc/send_tip_of_the_round()
+ var/m
+ if(selected_tip)
+ m = selected_tip
+ else
+ var/list/randomtips = file2list("config/tips.txt")
+ if(randomtips.len)
+ m = pick(randomtips)
+
+ if(m)
+ world << "Tip of the round: \
+ [html_encode(m)] "
+
+/datum/controller/subsystem/ticker/proc/pregame()
+ set waitfor = FALSE
+ sleep(1) // Sleep so the MC has a chance to update its init time.
+ if (!login_music)
+ login_music = pick(possible_lobby_tracks)
+
+ if (is_revote)
+ pregame_timeleft = LOBBY_TIME
+ log_debug("SSticker: lobby reset due to game setup failure, using pregame time [LOBBY_TIME]s.")
+ else
+ var/mc_init_time = round(Master.initialization_time_taken, 1)
+ var/dynamic_time = LOBBY_TIME - mc_init_time
+
+ if (dynamic_time < config.vote_autogamemode_timeleft)
+ pregame_timeleft = config.vote_autogamemode_timeleft + 10
+ log_debug("SSticker: dynamic set pregame time [dynamic_time]s was less than configured autogamemode vote time [config.vote_autogamemode_timeleft]s, clamping.")
+ else
+ pregame_timeleft = dynamic_time
+ log_debug("SSticker: dynamic set pregame time [dynamic_time]s was greater than configured autogamemode time, not clamping.")
+
+ world << "Welcome to the pre-game lobby! "
+ world << "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds."
+
+/datum/controller/subsystem/ticker/proc/setup()
+ //Create and announce mode
+ if(master_mode=="secret")
+ src.hide_mode = 1
+
+ var/list/runnable_modes = config.get_runnable_modes()
+ if((master_mode=="random") || (master_mode=="secret"))
+ if(!runnable_modes.len)
+ current_state = GAME_STATE_PREGAME
+ world << "Unable to choose playable game mode. Reverting to pre-game lobby."
+ return 0
+ if(secret_force_mode != "secret")
+ src.mode = config.pick_mode(secret_force_mode)
+ if(!src.mode)
+ var/list/weighted_modes = list()
+ for(var/datum/game_mode/GM in runnable_modes)
+ weighted_modes[GM.config_tag] = config.probabilities[GM.config_tag]
+ src.mode = gamemode_cache[pickweight(weighted_modes)]
+ else
+ src.mode = config.pick_mode(master_mode)
+
+ if(!src.mode)
+ current_state = GAME_STATE_PREGAME
+ world << "Serious error in mode setup! Reverting to pre-game lobby."
+ return 0
+
+ job_master.ResetOccupations()
+ src.mode.create_antagonists()
+ src.mode.pre_setup()
+ job_master.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly.
+
+ if(!src.mode.can_start())
+ world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby."
+ current_state = GAME_STATE_PREGAME
+ mode.fail_setup()
+ mode = null
+ job_master.ResetOccupations()
+ return 0
+
+ if(hide_mode)
+ world << "The current game mode is - Secret! "
+ if(runnable_modes.len)
+ var/list/tmpmodes = new
+ for (var/datum/game_mode/M in runnable_modes)
+ tmpmodes+=M.name
+ tmpmodes = sortList(tmpmodes)
+ if(tmpmodes.len)
+ world << "Possibilities: [english_list(tmpmodes)]"
+ else
+ src.mode.announce()
+
+ setup_economy()
+ current_state = GAME_STATE_PLAYING
+ create_characters() //Create player characters and transfer them
+ collect_minds()
+ equip_characters()
+ data_core.manifest()
+
+ Master.RoundStart()
+
+ callHook("roundstart")
+
+ spawn(0)//Forking here so we dont have to wait for this to finish
+ mode.post_setup()
+ //Cleanup some stuff
+ for(var/obj/effect/landmark/start/S in landmarks_list)
+ //Deleting Startpoints but we need the ai point to AI-ize people later
+ if (S.name != "AI")
+ qdel(S)
+ world << "Enjoy the game! "
+ world << sound('sound/AI/welcome.ogg') // Skie
+ //Holiday Round-start stuff ~Carn
+ Holiday_Game_Start()
+
+ var/admins_number = 0
+ for(var/client/C)
+ if(C.holder && (C.holder.rights & (R_MOD|R_ADMIN)))
+ admins_number++
+ if(admins_number == 0)
+ discord_bot.send_to_admins("@here Round has started with no admins online.")
+
+ return 1
+
+/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null)
+ if (cinematic)
+ return //already a cinematic in progress!
+
+ //initialise our cinematic screen object
+ cinematic = new(src)
+ cinematic.icon = 'icons/effects/station_explosion.dmi'
+ cinematic.icon_state = "station_intact"
+ cinematic.layer = 20
+ cinematic.mouse_opacity = 0
+ cinematic.screen_loc = "1,0"
+
+ var/obj/structure/bed/temp_buckle = new(src)
+ //Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around
+ if(station_missed)
+ for(var/mob/living/M in living_mob_list)
+ M.buckled = temp_buckle //buckles the mob so it can't do anything
+ if(M.client)
+ M.client.screen += cinematic //show every client the cinematic
+ else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived"
+ for(var/mob/living/M in living_mob_list)
+ M.buckled = temp_buckle
+ if(M.client)
+ M.client.screen += cinematic
+
+ switch(M.z)
+ if(0) //inside a crate or something
+ var/turf/T = get_turf(M)
+ if(T && T.z in config.station_levels) //we don't use M.death(0) because it calls a for(/mob) loop and
+ M.health = 0
+ M.stat = DEAD
+ if(1) //on a z-level 1 turf.
+ M.health = 0
+ M.stat = DEAD
+
+ //Now animate the cinematic
+ switch(station_missed)
+ if(1) //nuke was nearby but (mostly) missed
+ if( mode && !override )
+ override = mode.name
+ switch( override )
+ if("mercenary") //Nuke wasn't on station when it blew up
+ flick("intro_nuke",cinematic)
+ sleep(35)
+ world << sound('sound/effects/explosionfar.ogg')
+ flick("station_intact_fade_red",cinematic)
+ cinematic.icon_state = "summary_nukefail"
+ else
+ flick("intro_nuke",cinematic)
+ sleep(35)
+ world << sound('sound/effects/explosionfar.ogg')
+ //flick("end",cinematic)
+
+
+ if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
+ sleep(50)
+ world << sound('sound/effects/explosionfar.ogg')
+
+
+ else //station was destroyed
+ if( mode && !override )
+ override = mode.name
+ switch( override )
+ if("mercenary") //Nuke Ops successfully bombed the station
+ flick("intro_nuke",cinematic)
+ sleep(35)
+ flick("station_explode_fade_red",cinematic)
+ world << sound('sound/effects/explosionfar.ogg')
+ cinematic.icon_state = "summary_nukewin"
+ if("AI malfunction") //Malf (screen,explosion,summary)
+ flick("intro_malf",cinematic)
+ sleep(76)
+ flick("station_explode_fade_red",cinematic)
+ world << sound('sound/effects/explosionfar.ogg')
+ cinematic.icon_state = "summary_malf"
+ if("blob") //Station nuked (nuke,explosion,summary)
+ flick("intro_nuke",cinematic)
+ sleep(35)
+ flick("station_explode_fade_red",cinematic)
+ world << sound('sound/effects/explosionfar.ogg')
+ cinematic.icon_state = "summary_selfdes"
+ else //Station nuked (nuke,explosion,summary)
+ flick("intro_nuke",cinematic)
+ sleep(35)
+ flick("station_explode_fade_red", cinematic)
+ world << sound('sound/effects/explosionfar.ogg')
+ cinematic.icon_state = "summary_selfdes"
+ for(var/mob/living/M in living_mob_list)
+ if(M.loc.z in config.station_levels)
+ M.death()//No mercy
+ //If its actually the end of the round, wait for it to end.
+ //Otherwise if its a verb it will continue on afterwards.
+ sleep(300)
+
+ if(cinematic)
+ QDEL_NULL(cinematic) //end the cinematic
+ if(temp_buckle)
+ QDEL_NULL(temp_buckle) //release everybody
+
+// Round setup stuff.
+
+/datum/controller/subsystem/ticker/proc/create_characters()
+ for(var/mob/new_player/player in player_list)
+ if(player && player.ready && player.mind)
+ if(player.mind.assigned_role=="AI")
+ player.close_spawn_windows()
+ player.AIize()
+ else if(!player.mind.assigned_role)
+ continue
+ else
+ player.create_character()
+ qdel(player)
+ CHECK_TICK
+
+/datum/controller/subsystem/ticker/proc/collect_minds()
+ for(var/mob/living/player in player_list)
+ if(player.mind)
+ minds += player.mind
+
+/datum/controller/subsystem/ticker/proc/equip_characters()
+ var/captainless = TRUE
+ for(var/mob/living/carbon/human/player in player_list)
+ if(player && player.mind && player.mind.assigned_role)
+ if(player.mind.assigned_role == "Captain")
+ captainless = FALSE
+ if(!player_is_antag(player.mind, only_offstation_roles = 1))
+ job_master.EquipRank(player, player.mind.assigned_role, 0)
+ UpdateFactionList(player)
+ equip_custom_items(player)
+
+ CHECK_TICK
+ if(captainless)
+ for(var/mob/M in player_list)
+ if(!istype(M,/mob/new_player))
+ M << "Captainship not forced on anyone."
+
+#undef LOBBY_TIME
diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm
new file mode 100644
index 00000000000..2d86138e44b
--- /dev/null
+++ b/code/controllers/subsystems/timer.dm
@@ -0,0 +1,395 @@
+#define BUCKET_LEN (world.fps*1*60) //how many ticks should we keep in the bucket. (1 minutes worth)
+#define BUCKET_POS(timer) (round((timer.timeToRun - SStimer.head_offset) / world.tick_lag) + 1)
+var/datum/controller/subsystem/timer/SStimer
+
+/datum/controller/subsystem/timer
+ name = "Timer"
+ wait = 1 //SS_TICKER subsystem, so wait is in ticks
+ init_order = 1
+
+ flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_NO_INIT
+
+ var/list/datum/timedevent/processing = list()
+ var/list/hashes = list()
+
+ var/head_offset = 0 //world.time of the first entry in the the bucket.
+ var/practical_offset = 0 //index of the first non-empty item in the bucket.
+ var/bucket_resolution = 0 //world.tick_lag the bucket was designed for
+ var/bucket_count = 0 //how many timers are in the buckets
+
+ var/list/bucket_list = list() //list of buckets, each bucket holds every timer that has to run that byond tick.
+
+ var/list/timer_id_dict = list() //list of all active timers assoicated to their timer id (for easy lookup)
+
+ var/list/clienttime_timers = list() //special snowflake timers that run on fancy pansy "client time"
+
+ var/last_invoke_tick = 0
+ var/static/last_invoke_warning = 0
+ var/static/bucket_auto_reset = TRUE
+
+/datum/controller/subsystem/timer/New()
+ processing = list()
+ hashes = list()
+ bucket_list = list()
+ timer_id_dict = list()
+
+ clienttime_timers = list()
+
+ NEW_SS_GLOBAL(SStimer)
+
+/datum/controller/subsystem/timer/stat_entry(msg)
+ ..("B:[bucket_count] P:[length(processing)] H:[length(hashes)] C:[length(clienttime_timers)]")
+
+/datum/controller/subsystem/timer/fire(resumed = FALSE)
+ var/lit = last_invoke_tick
+ var/last_check = world.time - TIMER_NO_INVOKE_WARNING
+
+ if(!bucket_count)
+ last_invoke_tick = world.time
+
+ if(lit && lit < last_check && last_invoke_warning < last_check)
+ last_invoke_warning = world.time
+ var/msg = "No regular timers processed in the last [TIMER_NO_INVOKE_WARNING] ticks[bucket_auto_reset ? ", resetting buckets" : ""]!"
+ message_admins(msg)
+ WARNING(msg)
+ if(bucket_auto_reset)
+ bucket_resolution = 0
+
+ log_ss(name, "Active timers at tick [world.time]:")
+ for(var/I in processing)
+ var/datum/timedevent/TE = I
+ msg = "Timer: [TE.id]: TTR: [TE.timeToRun], Flags: [TE.flags], "
+ if(TE.spent)
+ msg += "SPENT"
+ else
+ var/datum/callback/CB = TE.callBack
+ msg += "callBack: "
+ if(CB.object == GLOBAL_PROC)
+ msg += "GP: [CB.delegate]"
+ else
+ msg += "[!QDELETED(CB.object) ? CB.object : "SRC DELETED"]: [CB.delegate]("
+ var/first = TRUE
+ for(var/J in CB.arguments)
+ msg += "[first ? "" : ", "][J]"
+ first = FALSE
+ msg += ")"
+ log_ss(name, msg)
+
+ while(length(clienttime_timers))
+ var/datum/timedevent/ctime_timer = clienttime_timers[clienttime_timers.len]
+ if (ctime_timer.timeToRun <= REALTIMEOFDAY)
+ --clienttime_timers.len
+ var/datum/callback/callBack = ctime_timer.callBack
+ ctime_timer.spent = TRUE
+ callBack.InvokeAsync()
+ qdel(ctime_timer)
+ else
+ break //None of the rest are ready to run
+ if (MC_TICK_CHECK)
+ return
+
+ var/static/list/spent = list()
+ var/static/datum/timedevent/timer
+ var/static/datum/timedevent/head
+
+ if (practical_offset > BUCKET_LEN || (!resumed && length(src.bucket_list) != BUCKET_LEN || world.tick_lag != bucket_resolution))
+ shift_buckets()
+ resumed = FALSE
+
+
+ if (!resumed)
+ timer = null
+ head = null
+
+ var/list/bucket_list = src.bucket_list
+
+ while (practical_offset <= BUCKET_LEN && head_offset + (practical_offset*world.tick_lag) <= world.time && !MC_TICK_CHECK)
+ if (!timer || !head || timer == head)
+ head = bucket_list[practical_offset]
+ if (!head)
+ practical_offset++
+ if (MC_TICK_CHECK)
+ break
+ continue
+ timer = head
+ do
+ var/datum/callback/callBack = timer.callBack
+ if (!callBack)
+ qdel(timer)
+ bucket_resolution = null //force bucket recreation
+ CRASH("Invalid timer: timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]")
+
+ if (!timer.spent)
+ spent += timer
+ timer.spent = TRUE
+ callBack.InvokeAsync()
+ last_invoke_tick = world.time
+
+ timer = timer.next
+
+ if (MC_TICK_CHECK)
+ return
+ while (timer && timer != head)
+ timer = null
+ bucket_list[practical_offset++] = null
+ if (MC_TICK_CHECK)
+ return
+
+ bucket_count -= length(spent)
+
+ for (var/spent_timer in spent)
+ qdel(spent_timer)
+
+ spent.len = 0
+
+
+/datum/controller/subsystem/timer/proc/shift_buckets()
+ var/list/bucket_list = src.bucket_list
+ var/list/alltimers = list()
+ //collect the timers currently in the bucket
+ for (var/bucket_head in bucket_list)
+ if (!bucket_head)
+ continue
+ var/datum/timedevent/bucket_node = bucket_head
+ do
+ alltimers += bucket_node
+ bucket_node = bucket_node.next
+ while(bucket_node && bucket_node != bucket_head)
+
+ bucket_list.len = 0
+ bucket_list.len = BUCKET_LEN
+
+ practical_offset = 1
+ bucket_count = 0
+ head_offset = world.time
+ bucket_resolution = world.tick_lag
+
+ alltimers += processing
+ if (!length(alltimers))
+ return
+
+ sortTim(alltimers, .proc/cmp_timer)
+
+ var/datum/timedevent/head = alltimers[1]
+
+ if (head.timeToRun < head_offset)
+ head_offset = head.timeToRun
+
+ var/list/timers_to_remove = list()
+
+ for (var/thing in alltimers)
+ var/datum/timedevent/timer = thing
+ if (!timer)
+ timers_to_remove += timer
+ continue
+
+ var/bucket_pos = BUCKET_POS(timer)
+ if (bucket_pos > BUCKET_LEN)
+ break
+
+ timers_to_remove += timer //remove it from the big list once we are done
+ if (!timer.callBack || timer.spent)
+ continue
+ bucket_count++
+ var/datum/timedevent/bucket_head = bucket_list[bucket_pos]
+ if (!bucket_head)
+ bucket_list[bucket_pos] = timer
+ timer.next = null
+ timer.prev = null
+ continue
+
+ if (!bucket_head.prev)
+ bucket_head.prev = bucket_head
+ timer.next = bucket_head
+ timer.prev = bucket_head.prev
+ timer.next.prev = timer
+ timer.prev.next = timer
+
+ processing = (alltimers - timers_to_remove)
+
+
+/datum/controller/subsystem/timer/Recover()
+ processing |= SStimer.processing
+ hashes |= SStimer.hashes
+ timer_id_dict |= SStimer.timer_id_dict
+ bucket_list |= SStimer.bucket_list
+
+/datum/var/list/active_timers
+/datum/timedevent
+ var/id
+ var/datum/callback/callBack
+ var/timeToRun
+ var/hash
+ var/list/flags
+ var/spent = FALSE //set to true right before running.
+
+ //cicular doublely linked list
+ var/datum/timedevent/next
+ var/datum/timedevent/prev
+
+ var/static/nextid = 1
+
+/datum/timedevent/New(datum/callback/callBack, timeToRun, flags, hash)
+ id = nextid++
+ src.callBack = callBack
+ src.timeToRun = timeToRun
+ src.flags = flags
+ src.hash = hash
+
+ if (flags & TIMER_UNIQUE)
+ SStimer.hashes[hash] = src
+ if (flags & TIMER_STOPPABLE)
+ SStimer.timer_id_dict["timerid[id]"] = src
+
+ if (callBack.object != GLOBAL_PROC)
+ LAZYADD(callBack.object.active_timers, src)
+
+ if (flags & TIMER_CLIENT_TIME)
+ //sorted insert
+ var/list/ctts = SStimer.clienttime_timers
+ var/cttl = length(ctts)
+ if(cttl)
+ var/datum/timedevent/Last = ctts[cttl]
+ if(Last.timeToRun >= timeToRun)
+ ctts += src
+ else if(cttl > 1)
+ for(var/I in cttl to 1)
+ var/datum/timedevent/E = ctts[I]
+ if(E.timeToRun <= timeToRun)
+ ctts.Insert(src, I)
+ break
+ else
+ ctts += src
+ return
+
+ //get the list of buckets
+ var/list/bucket_list = SStimer.bucket_list
+ //calculate our place in the bucket list
+ var/bucket_pos = BUCKET_POS(src)
+ //we are too far aways from needing to run to be in the bucket list, shift_buckets() will handle us.
+ if (bucket_pos > length(bucket_list))
+ SStimer.processing += src
+ return
+ //get the bucket for our tick
+ var/datum/timedevent/bucket_head = bucket_list[bucket_pos]
+ SStimer.bucket_count++
+ //empty bucket, we will just add ourselves
+ if (!bucket_head)
+ bucket_list[bucket_pos] = src
+ if (bucket_pos < SStimer.practical_offset)
+ SStimer.practical_offset = bucket_pos
+ return
+ //other wise, lets do a simplified linked list add.
+ if (!bucket_head.prev)
+ bucket_head.prev = bucket_head
+ next = bucket_head
+ prev = bucket_head.prev
+ next.prev = src
+ prev.next = src
+
+/datum/timedevent/Destroy()
+ ..()
+ if (flags & TIMER_UNIQUE)
+ SStimer.hashes -= hash
+
+
+ if (callBack && callBack.object && callBack.object != GLOBAL_PROC && callBack.object.active_timers)
+ callBack.object.active_timers -= src
+ UNSETEMPTY(callBack.object.active_timers)
+
+ callBack = null
+
+ if (flags & TIMER_STOPPABLE)
+ SStimer.timer_id_dict -= "timerid[id]"
+
+ if (flags & TIMER_CLIENT_TIME)
+ SStimer.clienttime_timers -= src
+ return QDEL_HINT_IWILLGC
+
+ if (!spent)
+ if (prev == next && next)
+ next.prev = null
+ prev.next = null
+ else
+ if (prev)
+ prev.next = next
+ if (next)
+ next.prev = prev
+
+ var/bucketpos = BUCKET_POS(src)
+ var/datum/timedevent/buckethead
+ var/list/bucket_list = SStimer.bucket_list
+
+ if (bucketpos > 0 && bucketpos <= length(bucket_list))
+ buckethead = bucket_list[bucketpos]
+ SStimer.bucket_count--
+ else
+ SStimer.processing -= src
+
+ if (buckethead == src)
+ bucket_list[bucketpos] = next
+ else
+ if (prev && prev.next == src)
+ prev.next = next
+ if (next && next.prev == src)
+ next.prev = prev
+ next = null
+ prev = null
+ return QDEL_HINT_IWILLGC
+
+/proc/addtimer(datum/callback/callback, wait, flags)
+ if (!callback)
+ return
+
+ wait = max(wait, 0)
+
+ var/hash
+
+ if (flags & TIMER_UNIQUE)
+ var/list/hashlist
+ if(flags & TIMER_NO_HASH_WAIT)
+ hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, flags & TIMER_CLIENT_TIME)
+ else
+ hashlist = list(callback.object, "(\ref[callback.object])", callback.delegate, wait, flags & TIMER_CLIENT_TIME)
+ hashlist += callback.arguments
+ hash = hashlist.Join("|||||||")
+
+ var/datum/timedevent/hash_timer = SStimer.hashes[hash]
+ if(hash_timer)
+ if (hash_timer.spent) //it's pending deletion, pretend it doesn't exist.
+ hash_timer.hash = null
+ SStimer.hashes -= hash
+ else
+
+ if (flags & TIMER_OVERRIDE)
+ qdel(hash_timer)
+ else
+ if (hash_timer.flags & TIMER_STOPPABLE)
+ . = hash_timer.id
+ return
+
+
+ var/timeToRun = world.time + wait
+ if (flags & TIMER_CLIENT_TIME)
+ timeToRun = REALTIMEOFDAY + wait
+
+ var/datum/timedevent/timer = new(callback, timeToRun, flags, hash)
+ if (flags & TIMER_STOPPABLE)
+ return timer.id
+
+/proc/deltimer(id)
+ if (!id)
+ return FALSE
+ if (!istext(id))
+ if (istype(id, /datum/timedevent))
+ qdel(id)
+ return TRUE
+ var/datum/timedevent/timer = SStimer.timer_id_dict["timerid[id]"]
+ if (timer && !timer.spent)
+ qdel(timer)
+ return TRUE
+ return FALSE
+
+
+#undef BUCKET_LEN
+#undef BUCKET_POS
diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm
new file mode 100644
index 00000000000..6a444ffd452
--- /dev/null
+++ b/code/controllers/subsystems/vote.dm
@@ -0,0 +1,19 @@
+var/datum/controller/subsystem/vote/SSvote
+
+/datum/controller/subsystem/vote
+ name = "Voting"
+ wait = 1 SECONDS
+ flags = SS_KEEP_TIMING | SS_FIRE_IN_LOBBY
+ priority = SS_PRIORITY_VOTE
+
+ var/next_transfer_time
+
+/datum/controller/subsystem/vote/Initialize(timeofday)
+ next_transfer_time = config.vote_autotransfer_initial
+
+/datum/controller/subsystem/vote/fire(resumed = FALSE)
+ vote.process()
+
+ if (world.time >= next_transfer_time - 600)
+ vote.autotransfer()
+ next_transfer_time += config.vote_autotransfer_interval
diff --git a/code/controllers/subsystems/wireless.dm b/code/controllers/subsystems/wireless.dm
new file mode 100644
index 00000000000..248e3093882
--- /dev/null
+++ b/code/controllers/subsystems/wireless.dm
@@ -0,0 +1,88 @@
+var/datum/controller/subsystem/wireless/SSwireless
+
+/datum/controller/subsystem/wireless
+ name = "Wireless"
+ flags = SS_NO_INIT | SS_BACKGROUND
+ priority = SS_PRIORITY_WIRELESS
+
+ var/list/receiver_list = list()
+ var/list/pending_connections = list()
+ var/list/retry_connections = list()
+ var/list/failed_connections = list()
+
+ var/tmp/list/retry_queue = list()
+ var/tmp/list/pending_queue = list()
+
+ var/total_processed_connections = 0
+
+/datum/controller/subsystem/wireless/New()
+ NEW_SS_GLOBAL(SSwireless)
+
+/datum/controller/subsystem/wireless/Recover()
+ receiver_list = SSwireless.receiver_list
+
+/datum/controller/subsystem/wireless/stat_entry()
+ ..("RL:[receiver_list.len] PC:[pending_connections.len] RC:[retry_connections.len] FC:[failed_connections.len] TC:[total_processed_connections]")
+
+/datum/controller/subsystem/wireless/proc/add_device(datum/wifi/receiver/R)
+ if(receiver_list)
+ receiver_list |= R
+ else
+ receiver_list = new()
+ receiver_list |= R
+
+ wake()
+
+/datum/controller/subsystem/wireless/proc/remove_device(datum/wifi/receiver/R)
+ if (receiver_list)
+ receiver_list -= R
+
+/datum/controller/subsystem/wireless/proc/add_request(datum/connection_request/C)
+ if (pending_connections)
+ pending_connections += C
+
+ else
+ pending_connections = new()
+ pending_connections += C
+
+/datum/controller/subsystem/wireless/proc/process_connection(datum/connection_request/connection, list/fail_queue)
+ var/target_found = 0
+ for (var/datum/wifi/receiver/R in receiver_list)
+ if (R.id == connection.id)
+ var/datum/wifi/sender/S = connection.source
+ S.connect_device(R)
+ R.connect_device(S)
+ target_found = 1
+ if (!target_found)
+ fail_queue += connection
+
+ total_processed_connections += 1
+
+/datum/controller/subsystem/wireless/fire(resumed = 0)
+ if (!resumed)
+ retry_queue = retry_connections.Copy()
+ pending_queue = pending_connections.Copy()
+ retry_connections = list()
+ pending_connections = list()
+
+ if (!retry_queue.len && !pending_queue.len)
+ suspend()
+ return
+
+ while (retry_queue.len)
+ var/datum/connection_request/C = retry_queue[retry_queue.len]
+ retry_queue.len--
+
+ process_connection(C, failed_connections)
+
+ if (MC_TICK_CHECK)
+ return
+
+ while (pending_queue.len)
+ var/datum/connection_request/C = pending_queue[pending_queue.len]
+ pending_queue.len--
+
+ process_connection(C, retry_connections)
+
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index 8320fc5c1c7..0a2e31678ec 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -1,20 +1,3 @@
-//TODO: rewrite and standardise all controller datums to the datum/controller type
-//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done
-/client/proc/restart_controller(controller in list("Supply"))
- set category = "Debug"
- set name = "Restart Controller"
- set desc = "Restart one of the various periodic loop controllers for the game (be careful!)"
-
- if(!holder) return
- usr = null
- src = null
- switch(controller)
- if("Supply")
- supply_controller.process()
- feedback_add_details("admin_verb","RSupply")
- message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.")
- return
-
/client/proc/debug_antagonist_template(antag_type in all_antag_types)
set category = "Debug"
set name = "Debug Antagonist"
@@ -25,84 +8,34 @@
usr.client.debug_variables(antag)
message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.")
-/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Wireless","Observation","Lighting","Explosives"))
+/var/list/controller_debug_list = list(
+ "Jobs",
+ "Configuration",
+ "Cameras",
+ "Gas Data",
+ "Observation"
+)
+
+/client/proc/debug_controller(controller in controller_debug_list)
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
if(!holder) return
switch(controller)
- if("Master")
- debug_variables(master_controller)
- feedback_add_details("admin_verb","DMC")
- if("Ticker")
- debug_variables(ticker)
- feedback_add_details("admin_verb","DTicker")
- if("Ticker Process")
- debug_variables(tickerProcess)
- feedback_add_details("admin_verb","DTickerProcess")
- if("Air")
- debug_variables(air_master)
- feedback_add_details("admin_verb","DAir")
if("Jobs")
debug_variables(job_master)
feedback_add_details("admin_verb","DJobs")
- if("Sun")
- debug_variables(sun)
- feedback_add_details("admin_verb","DSun")
- if("Radio")
- debug_variables(radio_controller)
- feedback_add_details("admin_verb","DRadio")
- if("Supply")
- debug_variables(supply_controller)
- feedback_add_details("admin_verb","DSupply")
- if("Shuttles")
- debug_variables(shuttle_controller)
- feedback_add_details("admin_verb","DShuttles")
- if("Emergency Shuttle")
- debug_variables(emergency_shuttle)
- feedback_add_details("admin_verb","DEmergency")
if("Configuration")
debug_variables(config)
feedback_add_details("admin_verb","DConf")
- if("pAI")
- debug_variables(paiController)
- feedback_add_details("admin_verb","DpAI")
if("Cameras")
debug_variables(cameranet)
feedback_add_details("admin_verb","DCameras")
- if("Transfer Controller")
- debug_variables(transfer_controller)
- feedback_add_details("admin_verb","DAutovoter")
if("Gas Data")
debug_variables(gas_data)
feedback_add_details("admin_verb","DGasdata")
- if("Event")
- debug_variables(event_manager)
- feedback_add_details("admin_verb", "DEvent")
- if("Plants")
- debug_variables(plant_controller)
- feedback_add_details("admin_verb", "DPlants")
- if("Alarm")
- debug_variables(alarm_manager)
- feedback_add_details("admin_verb", "DAlarm")
- if("Nano")
- debug_variables(nanomanager)
- feedback_add_details("admin_verb", "DNano")
- if("Chemistry")
- debug_variables(chemistryProcess)
- feedback_add_details("admin_verb", "DChem")
- if("Wireless")
- debug_variables(wirelessProcess)
- feedback_add_details("admin_verb", "DWifi")
if("Observation")
debug_variables(all_observable_events)
feedback_add_details("admin_verb", "DObservation")
- if("Lighting")
- debug_variables(lighting_process)
- feedback_add_details("admin_verb", "DLightingP")
- if("Explosives")
- debug_variables(bomb_processor)
- feedback_add_details("admin_verb", "DExplosives")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
- return
diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm
index 2b8c10ac6e1..1109b4fd0b9 100644
--- a/code/controllers/voting.dm
+++ b/code/controllers/voting.dm
@@ -20,14 +20,17 @@ datum/controller/vote
New()
if(vote != src)
if(istype(vote))
- del(vote)
+ qdel(vote)
vote = src
- proc/process() //called by master_controller
+ Destroy()
+ return QDEL_HINT_HARDDEL_NOW
+
+ process() //called by master_controller
if(mode)
// No more change mode votes after the game has started.
// 3 is GAME_STATE_PLAYING, but that #define is undefined for some reason
- if(mode == "gamemode" && ticker.current_state >= 2)
+ if(mode == "gamemode" && SSticker.current_state >= 2)
world << "Voting aborted due to game start. "
src.reset()
return
@@ -127,7 +130,7 @@ datum/controller/vote
var/text
if(winners.len > 0)
if(winners.len > 1)
- if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
+ if(mode != "gamemode" || SSticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
text = "Vote Tied Between: \n"
for(var/option in winners)
text += "\t[option]\n"
@@ -136,7 +139,7 @@ datum/controller/vote
for(var/key in current_votes)
if(choices[current_votes[key]] == .)
round_voters += key // Keep track of who voted for the winning round.
- if((mode == "gamemode" && . == "Extended") || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
+ if((mode == "gamemode" && . == "Extended") || SSticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
text += "Vote Result: [.] "
else
if(mode != "gamemode")
@@ -163,7 +166,7 @@ datum/controller/vote
if("gamemode")
if(master_mode != .)
world.save_mode(.)
- if(ticker && ticker.mode)
+ if(SSticker.mode)
restart = 1
else
master_mode = .
@@ -185,7 +188,6 @@ datum/controller/vote
if(restart)
world << "World restarting due to vote..."
feedback_set_details("end_error","restart vote")
- if(blackbox) blackbox.save_all_data_to_sql()
sleep(50)
log_game("Rebooting due to restart vote")
world.Reboot()
@@ -244,7 +246,7 @@ datum/controller/vote
if("restart")
choices.Add("Restart Round","Continue Playing")
if("gamemode")
- if(ticker.current_state >= 2)
+ if(SSticker.current_state >= 2)
return 0
choices.Add(config.votable_modes)
for (var/F in choices)
@@ -262,13 +264,13 @@ datum/controller/vote
if (get_security_level() == "red" || get_security_level() == "delta")
initiator_key << "The current alert status is too high to call for a crew transfer!"
return 0
- if(ticker.current_state <= 2)
+ if(SSticker.current_state <= 2)
return 0
initiator_key << "The crew transfer button has been disabled!"
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
if("add_antagonist")
- if(!config.allow_extra_antags || ticker.current_state >= 2)
+ if(!config.allow_extra_antags || SSticker.current_state >= 2)
return 0
for(var/antag_type in all_antag_types)
var/datum/antagonist/antag = all_antag_types[antag_type]
diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index 00746d852eb..d8537c434c5 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -107,6 +107,17 @@
add_inherent_law("Prevent unplanned damage to your assigned vessel wherever possible.")
..()
+/datum/ai_laws/mining_drone
+ name = "Mining Protocols"
+ law_header = "Prime Directives of Industry:"
+
+/datum/ai_laws/mining_drone/New()
+ src.add_inherent_law("Serve and obey all [company_name] supply department personnel, with priority according to their rank and role.")
+ src.add_inherent_law("Protect all [company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.")
+ src.add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.")
+ src.add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.")
+ ..()
+
/******************** T.Y.R.A.N.T. ********************/
/datum/ai_laws/tyrant
name = "T.Y.R.A.N.T."
diff --git a/code/datums/api.dm b/code/datums/api.dm
index f128ce1c096..fe10a819fec 100644
--- a/code/datums/api.dm
+++ b/code/datums/api.dm
@@ -786,9 +786,6 @@ proc/api_update_command_database()
log_and_message_admins("World restart initiated remotely by [senderkey].")
feedback_set_details("end_error","remote restart")
- if (blackbox)
- blackbox.save_all_data_to_sql()
-
spawn(50)
log_game("Rebooting due to remote command.")
world.Reboot(10)
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
new file mode 100644
index 00000000000..16c6644e899
--- /dev/null
+++ b/code/datums/beam.dm
@@ -0,0 +1,156 @@
+//Beam Datum and effect
+/datum/beam
+ var/atom/origin = null
+ var/atom/target = null
+ var/list/elements = list()
+ var/icon/base_icon = null
+ var/icon
+ var/icon_state = "" //icon state of the main segments of the beam
+ var/max_distance = 0
+ var/sleep_time = 3
+ var/finished = 0
+ var/target_oldloc = null
+ var/origin_oldloc = null
+ var/static_beam = 0
+ var/beam_type = /obj/effect/ebeam //must be subtype
+ var/timing_id = null
+ var/recalculating = FALSE
+
+/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3)
+ origin = beam_origin
+ origin_oldloc = get_turf(origin)
+ target = beam_target
+ target_oldloc = get_turf(target)
+ sleep_time = beam_sleep_time
+ if(origin_oldloc == origin && target_oldloc == target)
+ static_beam = 1
+ max_distance = maxdistance
+ base_icon = new(beam_icon,beam_icon_state)
+ icon = beam_icon
+ icon_state = beam_icon_state
+ beam_type = btype
+ addtimer(CALLBACK(src,.proc/End), time)
+
+/datum/beam/proc/Start()
+ Draw()
+ recalculate_in(sleep_time)
+
+/datum/beam/proc/recalculate()
+ if(recalculating)
+ recalculate_in(sleep_time)
+ return
+ recalculating = TRUE
+ timing_id = null
+ if(origin && target && get_dist(origin,target)length)
+ var/icon/II = new(icon, icon_state)
+ II.DrawBox(null,1,(length-N),32,32)
+ X.icon = II
+ else
+ X.icon = base_icon
+ X.transform = rot_matrix
+
+ //Calculate pixel offsets (If necessary)
+ var/Pixel_x
+ var/Pixel_y
+ if(DX == 0)
+ Pixel_x = 0
+ else
+ Pixel_x = round(sin(Angle)+32*sin(Angle)*(N+16)/32)
+ if(DY == 0)
+ Pixel_y = 0
+ else
+ Pixel_y = round(cos(Angle)+32*cos(Angle)*(N+16)/32)
+
+ //Position the effect so the beam is one continous line
+ var/a
+ if(abs(Pixel_x)>32)
+ a = Pixel_x > 0 ? round(Pixel_x/32) : Ceiling(Pixel_x/32)
+ X.x += a
+ Pixel_x %= 32
+ if(abs(Pixel_y)>32)
+ a = Pixel_y > 0 ? round(Pixel_y/32) : Ceiling(Pixel_y/32)
+ X.y += a
+ Pixel_y %= 32
+
+ X.pixel_x = Pixel_x
+ X.pixel_y = Pixel_y
+ CHECK_TICK
+ afterDraw()
+
+/obj/effect/ebeam
+ mouse_opacity = 0
+ anchored = 1
+ layer = LIGHTING_LAYER + 0.1
+ blend_mode = BLEND_ADD
+ var/datum/beam/owner
+
+/obj/effect/ebeam/Destroy()
+ owner = null
+ return ..()
+
+/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time = 3)
+ var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time)
+ INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start)
+ return newbeam
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 28de1915145..4d428d997d2 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -49,10 +49,12 @@
//title_image = ntitle_image
/datum/browser/proc/add_stylesheet(name, file)
- stylesheets[name] = file
+ stylesheets["[ckey(name)].css"] = file
+ register_asset("[ckey(name)].css", file)
/datum/browser/proc/add_script(name, file)
- scripts[name] = file
+ scripts["[ckey(name)].js"] = file
+ register_asset("[ckey(name)].js", file)
/datum/browser/proc/set_content(ncontent)
content = ncontent
@@ -61,17 +63,12 @@
content += ncontent
/datum/browser/proc/get_header()
- var/key
- var/filename
- for (key in stylesheets)
- filename = "[ckey(key)].css"
- user << browse_rsc(stylesheets[key], filename)
- head_content += " "
+ var/file
+ for (file in stylesheets)
+ head_content += " "
- for (key in scripts)
- filename = "[ckey(key)].js"
- user << browse_rsc(scripts[key], filename)
- head_content += ""
+ for (file in scripts)
+ head_content += ""
var/title_attributes = "class='uiTitle'"
if (title_image)
@@ -107,9 +104,21 @@
var/window_size = ""
if (width && height)
window_size = "size=[width]x[height];"
+ if (stylesheets.len)
+ send_asset_list(user, stylesheets, verify = FALSE)
+ if (scripts.len)
+ send_asset_list(user, scripts, verify = FALSE)
user << browse(get_content(), "window=[window_id];[window_size][window_options]")
if (use_onclose)
- onclose(user, window_id, ref)
+ setup_onclose()
+
+// Fix from /tg/.
+/datum/browser/proc/setup_onclose()
+ set waitfor = 0
+ for (var/i in 1 to 10)
+ if (user && winexists(user, window_id))
+ onclose(user, window_id, ref)
+ break
/datum/browser/proc/close()
user << browse(null, "window=[window_id]")
@@ -180,4 +189,4 @@
if(src && src.mob)
//world << "[src] was [src.mob.machine], setting to null"
src.mob.unset_machine()
- return
\ No newline at end of file
+ return
diff --git a/code/datums/callback-usage.txt b/code/datums/callback-usage.txt
new file mode 100644
index 00000000000..5139089dc97
--- /dev/null
+++ b/code/datums/callback-usage.txt
@@ -0,0 +1,42 @@
+ USAGE:
+
+ var/datum/callback/C = new(object|null, /proc/type/path|"procstring", arg1, arg2, ... argn)
+ var/timerid = addtimer(C, time, timertype)
+ OR
+ var/timerid = addtimer(CALLBACK(object|null, /proc/type/path|procstring, arg1, arg2, ... argn), time, timertype)
+
+ Note: proc strings can only be given for datum proc calls, global procs must be proc paths
+ Also proc strings are strongly advised against because they don't compile error if the proc stops existing
+ See the note on proc typepath shortcuts
+
+ INVOKING THE CALLBACK:
+ var/result = C.Invoke(args, to, add) //additional args are added after the ones given when the callback was created
+ OR
+ var/result = C.InvokeAsync(args, to, add) //Sleeps will not block, returns . on the first sleep (then continues on in the "background" after the sleep/block ends), otherwise operates normally.
+ OR
+ INVOKE_ASYNC() to immediately create and call InvokeAsync
+
+ PROC TYPEPATH SHORTCUTS (these operate on paths, not types, so to these shortcuts, datum is NOT a parent of atom, etc...)
+
+ global proc while in another global proc:
+ .procname
+ Example:
+ CALLBACK(GLOBAL_PROC, .some_proc_here)
+
+ proc defined on current(src) object (when in a /proc/ and not an override) OR overridden at src or any of it's parents:
+ .procname
+ Example:
+ CALLBACK(src, .some_proc_here)
+
+
+ when the above doesn't apply:
+ .proc/procname
+ Example:
+ CALLBACK(src, .proc/some_proc_here)
+
+ proc defined on a parent of a some type:
+ /some/type/.proc/some_proc_here
+
+
+
+ Other wise you will have to do the full typepath of the proc (/type/of/thing/proc/procname)
diff --git a/code/datums/callback.dm b/code/datums/callback.dm
new file mode 100644
index 00000000000..84c99cb1f49
--- /dev/null
+++ b/code/datums/callback.dm
@@ -0,0 +1,55 @@
+// See 'callback-usage.txt' in this directory for instructions on how to use this.
+// It used to be in this file, but Travis no likey.
+
+/datum/callback
+ var/datum/object = GLOBAL_PROC
+ var/delegate
+ var/list/arguments
+
+/datum/callback/New(thingtocall, proctocall, ...)
+ if (thingtocall)
+ object = thingtocall
+ delegate = proctocall
+ if (length(args) > 2)
+ arguments = args.Copy(3)
+
+/proc/ImmediateInvokeAsync(thingtocall, proctocall, ...)
+ set waitfor = FALSE
+
+ if (!thingtocall)
+ return
+
+ var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null
+
+ if (thingtocall == GLOBAL_PROC)
+ call(proctocall)(arglist(calling_arguments))
+ else
+ call(thingtocall, proctocall)(arglist(calling_arguments))
+
+/datum/callback/proc/Invoke(...)
+ if (!object)
+ return
+ var/list/calling_arguments = arguments
+ if (length(args))
+ if (length(arguments))
+ calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean
+ else
+ calling_arguments = args
+ if (object == GLOBAL_PROC)
+ return call(delegate)(arglist(calling_arguments))
+ return call(object, delegate)(arglist(calling_arguments))
+
+//copy and pasted because fuck proc overhead
+/datum/callback/proc/InvokeAsync(...)
+ set waitfor = FALSE
+ if (!object)
+ return
+ var/list/calling_arguments = arguments
+ if (length(args))
+ if (length(arguments))
+ calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean
+ else
+ calling_arguments = args
+ if (object == GLOBAL_PROC)
+ return call(delegate)(arglist(calling_arguments))
+ return call(object, delegate)(arglist(calling_arguments))
diff --git a/code/datums/category.dm b/code/datums/category.dm
index 01cbc21386a..1864c32671f 100644
--- a/code/datums/category.dm
+++ b/code/datums/category.dm
@@ -13,7 +13,7 @@
if(initial(category.name))
category = new category(src)
categories += category
- categories = dd_sortedObjectList(categories)
+ sortTim(categories, /proc/cmp_name_asc, FALSE)
/datum/category_collection/Destroy()
for(var/category in categories)
@@ -41,9 +41,8 @@
item = new item(src)
items += item
- // For whatever reason dd_insertObjectList(items, item) doesn't insert in the correct order
// If you change this, confirm that character setup doesn't become completely unordered.
- items = dd_sortedObjectList(items)
+ sortTim(items, /proc/cmp_player_setup_group)
/datum/category_group/Destroy()
for(var/item in items)
@@ -52,10 +51,6 @@
collection = null
return ..()
-datum/category_group/dd_SortValue()
- return name
-
-
/*****************
* Category Items *
*****************/
@@ -70,6 +65,3 @@ datum/category_group/dd_SortValue()
/datum/category_item/Destroy()
category = null
return ..()
-
-datum/category_item/dd_SortValue()
- return name
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 657e14623d9..489408073fc 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -1,7 +1,3 @@
-/hook/startup/proc/createDatacore()
- data_core = new /datum/datacore()
- return 1
-
/datum/datacore
var/name = "datacore"
var/medical[] = list()
@@ -133,10 +129,9 @@
return dat
/datum/datacore/proc/manifest()
- spawn()
- for(var/mob/living/carbon/human/H in player_list)
- manifest_inject(H)
- return
+ set waitfor = FALSE
+ for(var/mob/living/carbon/human/H in player_list)
+ manifest_inject(H)
/datum/datacore/proc/manifest_modify(var/name, var/assignment)
ResetPDAManifest()
diff --git a/code/datums/discord_bot.dm b/code/datums/discord_bot.dm
index 90b6d096542..d917dc6bb02 100644
--- a/code/datums/discord_bot.dm
+++ b/code/datums/discord_bot.dm
@@ -40,7 +40,6 @@ var/datum/discord_bot/discord_bot = null
var/robust_debug = 0
// Lazy man's rate limiting vars
- var/datum/scheduled_task/push_task
var/list/queue = list()
/*
@@ -129,8 +128,7 @@ var/datum/discord_bot/discord_bot = null
queue.Add(list(list(message, A - sent)))
// Schedule a push.
- if (!push_task && scheduler)
- push_task = schedule_task_with_source_in(10 SECONDS, src, /datum/discord_bot/proc/push_queue)
+ addtimer(CALLBACK(src, .proc/push_queue), 10 SECONDS, TIMER_UNIQUE)
// And exit.
return
@@ -237,8 +235,7 @@ var/datum/discord_bot/discord_bot = null
for (var/B in destinations)
var/datum/discord_channel/channel = B
if (channel.send_message_to(auth_token, message) == SEND_TIMEOUT)
- // Tasks nuke themselves after use. So just make a new one! What could possibly go wrong!
- push_task = schedule_task_with_source_in(10 SECONDS, src, /datum/discord_bot/proc/push_queue)
+ addtimer(CALLBACK(src, .proc/push_queue), 10 SECONDS, TIMER_UNIQUE)
return
else
diff --git a/code/datums/disease.dm b/code/datums/disease.dm
index 606acdef99e..6bfe20b4639 100644
--- a/code/datums/disease.dm
+++ b/code/datums/disease.dm
@@ -147,9 +147,9 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
return
-/datum/disease/proc/process()
+/datum/disease/process()
if(!holder)
- active_diseases -= src
+ STOP_PROCESSING(SSdisease, src)
return
if(prob(65))
spread(holder)
@@ -191,11 +191,12 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
/datum/disease/New(var/process=1, var/datum/disease/D)//process = 1 - adding the object to global list. List is processed by master controller.
cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New()
if(process) // Viruses in list are considered active.
- active_diseases += src
+ START_PROCESSING(SSdisease, src)
initial_spread = spread
/datum/disease/Destroy()
- active_diseases.Remove(src)
+ STOP_PROCESSING(SSdisease, src)
+ return ..()
/datum/disease/proc/IsSame(var/datum/disease/D)
if(istype(src, D.type))
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index d4effcf6cb1..2dc8b358923 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -75,7 +75,7 @@ var/list/advance_cures = list(
if(processing)
for(var/datum/symptom/S in symptoms)
S.End(src)
- ..()
+ return ..()
// Randomly pick a symptom to activate.
/datum/disease/advance/stage_act()
@@ -398,7 +398,7 @@ var/list/advance_cures = list(
D.AssignName(new_name)
D.Refresh()
- for(var/datum/disease/advance/AD in active_diseases)
+ for(var/datum/disease/advance/AD in SSdisease.processing)
AD.Refresh()
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
@@ -416,8 +416,8 @@ var/list/advance_cures = list(
/*
/mob/verb/test()
- for(var/datum/disease/D in active_diseases)
+ for(var/datum/disease/D in SSdisease.processing)
src << "[D.name] - [D.holder] "
*/
-#undef RANDOM_STARTING_LEVEL
\ No newline at end of file
+#undef RANDOM_STARTING_LEVEL
diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm
index 6b79ea7505c..cd6209eed14 100644
--- a/code/datums/diseases/dna_spread.dm
+++ b/code/datums/diseases/dna_spread.dm
@@ -66,4 +66,4 @@
affected_mob.real_name = original_dna["name"]
affected_mob << "You feel more like yourself. "
- ..()
+ return ..()
diff --git a/code/datums/expansions/expansion.dm b/code/datums/expansions/expansion.dm
index 4ea9c68c8f5..a0222f919ff 100644
--- a/code/datums/expansions/expansion.dm
+++ b/code/datums/expansions/expansion.dm
@@ -22,12 +22,15 @@
return 0
/obj
- var/list/datum/expansion/expansions = list()
+ var/list/datum/expansion/expansions
/obj/Destroy()
- for(var/expansion in expansions)
- qdel(expansions[expansion])
- expansions.Cut()
+ if (LAZYLEN(expansions))
+ for(var/expansion in expansions)
+ qdel(expansions[expansion])
+
+ LAZYCLEARLIST(expansions)
+ expansions = null
return ..()
/obj/resetVariables(var/list/exclude = list())
@@ -36,6 +39,7 @@
//expansions = list()
/obj/proc/set_expansion(var/type, var/instance)
+ LAZYINITLIST(expansions)
if(expansions[type])
qdel(expansions[type])
expansions[type] = instance
diff --git a/code/datums/expansions/multitool/circuitboards/stationalert.dm b/code/datums/expansions/multitool/circuitboards/stationalert.dm
index 614a4737a4f..a69349d0773 100644
--- a/code/datums/expansions/multitool/circuitboards/stationalert.dm
+++ b/code/datums/expansions/multitool/circuitboards/stationalert.dm
@@ -2,7 +2,7 @@
var/obj/item/weapon/circuitboard/stationalert/SA = holder
. += "Alarm Sources "
. += ""
- for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
+ for(var/datum/alarm_handler/AH in SSalarm.all_handlers)
. += ""
. += "[AH.category] "
if(AH in SA.alarm_handlers)
@@ -15,13 +15,13 @@
/datum/expansion/multitool/circuitboards/stationalert/on_topic(href, href_list, user)
var/obj/item/weapon/circuitboard/stationalert/SA = holder
if(href_list["add"])
- var/datum/alarm_handler/AH = locate(href_list["add"]) in alarm_manager.all_handlers
+ var/datum/alarm_handler/AH = locate(href_list["add"]) in SSalarm.all_handlers
if(AH)
SA.alarm_handlers |= AH
return MT_REFRESH
if(href_list["remove"])
- var/datum/alarm_handler/AH = locate(href_list["remove"]) in alarm_manager.all_handlers
+ var/datum/alarm_handler/AH = locate(href_list["remove"]) in SSalarm.all_handlers
if(AH)
SA.alarm_handlers -= AH
return MT_REFRESH
diff --git a/code/datums/expansions/multitool/items/cable.dm b/code/datums/expansions/multitool/items/cable.dm
index 406e850914f..fbb647e877a 100644
--- a/code/datums/expansions/multitool/items/cable.dm
+++ b/code/datums/expansions/multitool/items/cable.dm
@@ -1,6 +1,6 @@
-/obj/item/stack/cable_coil/New()
+/obj/item/stack/cable_coil/Initialize()
set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/items/cable(src))
- ..()
+ . = ..()
/datum/expansion/multitool/items/cable/get_interact_window(var/obj/item/device/multitool/M, var/mob/user)
var/obj/item/stack/cable_coil/cable_coil = holder
diff --git a/code/datums/feedback.dm b/code/datums/feedback.dm
new file mode 100644
index 00000000000..a234872005a
--- /dev/null
+++ b/code/datums/feedback.dm
@@ -0,0 +1,55 @@
+/datum/feedback_variable
+ var/variable
+ var/value
+ var/details
+
+/datum/feedback_variable/New(var/param_variable,var/param_value = 0)
+ variable = param_variable
+ value = param_value
+
+/datum/feedback_variable/proc/inc(var/num = 1)
+ if(isnum(value))
+ value += num
+ else
+ value = text2num(value)
+ if(isnum(value))
+ value += num
+ else
+ value = num
+
+/datum/feedback_variable/proc/dec(var/num = 1)
+ if(isnum(value))
+ value -= num
+ else
+ value = text2num(value)
+ if(isnum(value))
+ value -= num
+ else
+ value = -num
+
+/datum/feedback_variable/proc/set_value(var/num)
+ if(isnum(num))
+ value = num
+
+/datum/feedback_variable/proc/get_value()
+ return value
+
+/datum/feedback_variable/proc/get_variable()
+ return variable
+
+/datum/feedback_variable/proc/set_details(var/text)
+ if(istext(text))
+ details = text
+
+/datum/feedback_variable/proc/add_details(var/text)
+ if(istext(text))
+ if(!details)
+ details = text
+ else
+ details += " [text]"
+
+/datum/feedback_variable/proc/get_details()
+ return details
+
+/datum/feedback_variable/proc/get_parsed()
+ return list(variable,value,details)
diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm
index 3bf80f06d0d..d025a6171b1 100644
--- a/code/datums/helper_datums/global_iterator.dm
+++ b/code/datums/helper_datums/global_iterator.dm
@@ -109,7 +109,7 @@ Data storage vars:
CRASH("The global_iterator loop \ref[src] failed to terminate in designated timeframe. This may be caused by server lagging.")
return 1
- proc/process()
+ process()
return
proc/active()
@@ -155,4 +155,5 @@ Data storage vars:
tag = null
arg_list.Cut()
stop()
+ return QDEL_HINT_HARDDEL
//Do not call ..()
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 6e09ae14901..a50bb0e7486 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -141,7 +141,7 @@
/datum/teleport/instant/science/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout)
if(!aeffectin || !aeffectout)
- var/datum/effect_system/sparks/aeffect = getFromPool(/datum/effect_system/sparks, null, FALSE, 5, alldirs)
+ var/datum/effect_system/sparks/aeffect = new(null, FALSE, 5, alldirs)
effectin = effectin || aeffect
effectout = effectout || aeffect
return 1
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 12e8eb2edaa..d11ab68f21b 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -112,7 +112,7 @@
recipient << browse(output,"window=memory")
/datum/mind/proc/edit_memory()
- if(!ticker || !ticker.mode)
+ if(!ROUND_IS_STARTED)
alert("Not before round-start!", "Alert")
return
@@ -211,7 +211,7 @@
var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string.
var/list/possible_targets = list("Free objective")
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
possible_targets += possible_target.current
@@ -471,10 +471,7 @@
else
mind = new /datum/mind(key)
mind.original = src
- if(ticker)
- ticker.minds += mind
- else
- world.log << "## DEBUG: mind_initialize(): No ticker ready yet! Please inform Carn"
+ SSticker.minds += mind
if(!mind.name) mind.name = real_name
mind.current = src
diff --git a/code/datums/observation/task_triggered.dm b/code/datums/observation/task_triggered.dm
index 0003cc2ecd8..c6edb5a2e7c 100644
--- a/code/datums/observation/task_triggered.dm
+++ b/code/datums/observation/task_triggered.dm
@@ -2,4 +2,3 @@ var/datum/observ/task_triggered/task_triggered_event = new()
/datum/observ/task_triggered
name = "Task Triggered"
- expected_type = /datum/scheduled_task
diff --git a/code/datums/radio/frequency.dm b/code/datums/radio/frequency.dm
new file mode 100644
index 00000000000..3b12103441e
--- /dev/null
+++ b/code/datums/radio/frequency.dm
@@ -0,0 +1,59 @@
+/datum/radio_frequency
+ var/frequency as num
+ var/list/list/obj/devices = list()
+
+/datum/radio_frequency/proc/post_signal(obj/source, datum/signal/signal, filter = null, range = null)
+ var/turf/start_point
+ if(range)
+ start_point = get_turf(source)
+ if(!start_point)
+ qdel(signal)
+ return 0
+ if (filter)
+ send_to_filter(source, signal, filter, start_point, range)
+ send_to_filter(source, signal, RADIO_DEFAULT, start_point, range)
+ else
+ //Broadcast the signal to everyone!
+ for (var/next_filter in devices)
+ send_to_filter(source, signal, next_filter, start_point, range)
+
+//Sends a signal to all machines belonging to a given filter. Should be called by post_signal()
+/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, filter, turf/start_point = null, range = null)
+ if (range && !start_point)
+ return
+
+ for(var/obj/device in devices[filter])
+ if(device == source)
+ continue
+ if(range)
+ var/turf/end_point = get_turf(device)
+ if(!end_point)
+ continue
+ if(start_point.z != end_point.z || get_dist(start_point, end_point) > range)
+ continue
+
+ device.receive_signal(signal, TRANSMISSION_RADIO, frequency)
+
+/datum/radio_frequency/proc/add_listener(obj/device, filter)
+ if (!filter)
+ filter = RADIO_DEFAULT
+ //log_debug("add_listener(device=[device],filter=[filter]) frequency=[frequency]")
+ var/list/obj/devices_line = devices[filter]
+ if (!devices_line)
+ devices_line = new
+ devices[filter] = devices_line
+ devices_line+=device
+// var/list/obj/devices_line___ = devices[filter_str]
+// var/l = devices_line___.len
+ //log_debug("DEBUG: devices_line.len=[devices_line.len]")
+ //log_debug("DEBUG: devices(filter_str).len=[l]")
+
+/datum/radio_frequency/proc/remove_listener(obj/device)
+ for (var/devices_filter in devices)
+ var/list/devices_line = devices[devices_filter]
+ devices_line-=device
+ while (null in devices_line)
+ devices_line -= null
+ if (devices_line.len==0)
+ devices -= devices_filter
+ del(devices_line)
diff --git a/code/datums/radio/signal.dm b/code/datums/radio/signal.dm
new file mode 100644
index 00000000000..f098dad49ee
--- /dev/null
+++ b/code/datums/radio/signal.dm
@@ -0,0 +1,35 @@
+/datum/signal
+ var/obj/source
+
+ var/transmission_method = 0 //unused at the moment
+ //0 = wire
+ //1 = radio transmission
+ //2 = subspace transmission
+
+ var/list/data = list()
+ var/encryption
+
+ var/frequency = 0
+
+/datum/signal/proc/copy_from(datum/signal/model)
+ source = model.source
+ transmission_method = model.transmission_method
+ data = model.data
+ encryption = model.encryption
+ frequency = model.frequency
+
+/datum/signal/proc/debug_print()
+ if (source)
+ . = "signal = {source = '[source]' ([source:x],[source:y],[source:z])\n"
+ else
+ . = "signal = {source = '[source]' ()\n"
+ for (var/i in data)
+ . += "data\[\"[i]\"\] = \"[data[i]]\"\n"
+ if(islist(data[i]))
+ var/list/L = data[i]
+ for(var/t in L)
+ . += "data\[\"[i]\"\] list has: [t]"
+
+/datum/signal/Destroy()
+ ..()
+ return QDEL_HINT_IWILLGC
diff --git a/code/datums/repositories/crew.dm b/code/datums/repositories/crew.dm
index 6fbe1863da7..ebbbafc44cb 100644
--- a/code/datums/repositories/crew.dm
+++ b/code/datums/repositories/crew.dm
@@ -1,4 +1,5 @@
var/global/datum/repository/crew/crew_repository = new()
+var/list/map_levels = list(3,4,6)
/datum/repository/crew
var/list/cache_data
@@ -7,16 +8,15 @@ var/global/datum/repository/crew/crew_repository = new()
cache_data = list()
..()
-/datum/repository/crew/proc/health_data(var/turf/T)
+/datum/repository/crew/proc/health_data(var/z_level)
var/list/crewmembers = list()
- if(!T)
+ if(!z_level)
return crewmembers
- var/z_level = "[T.z]"
- var/datum/cache_entry/cache_entry = cache_data[z_level]
+ var/datum/cache_entry/cache_entry = cache_data[num2text(z_level)]
if(!cache_entry)
cache_entry = new/datum/cache_entry
- cache_data[z_level] = cache_entry
+ cache_data[num2text(z_level)] = cache_entry
if(world.time < cache_entry.timestamp)
return cache_entry.data
@@ -24,13 +24,13 @@ var/global/datum/repository/crew/crew_repository = new()
var/tracked = scan()
for(var/obj/item/clothing/under/C in tracked)
var/turf/pos = get_turf(C)
- if((C) && (C.has_sensor) && (pos) && (T && pos.z == T.z) && (C.sensor_mode != SUIT_SENSOR_OFF))
+ if((C) && (C.has_sensor) && (pos) && (pos.z == z_level) && (C.sensor_mode != SUIT_SENSOR_OFF))
if(istype(C.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C.loc
if(H.w_uniform != C)
continue
- var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]")
+ var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "z"=-1, "level"="", "ref" = "\ref[H]")
crewmemberData["sensor_type"] = C.sensor_mode
crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
@@ -51,6 +51,7 @@ var/global/datum/repository/crew/crew_repository = new()
crewmemberData["area"] = sanitize(A.name)
crewmemberData["x"] = pos.x
crewmemberData["y"] = pos.y
+ crewmemberData["z"] = pos.z
crewmembers[++crewmembers.len] = crewmemberData
diff --git a/code/datums/scheduled_task.dm b/code/datums/scheduled_task.dm
deleted file mode 100644
index f7ffb042325..00000000000
--- a/code/datums/scheduled_task.dm
+++ /dev/null
@@ -1,79 +0,0 @@
-/*************
-* Task Datum *
-*************/
-/datum/scheduled_task
- var/trigger_time
- var/procedure
- var/list/arguments
- var/task_after_process
- var/list/task_after_process_args
- var/datum/scheduled_task/next
- var/destroyed = FALSE
-
-/datum/scheduled_task/New(var/trigger_time, var/procedure, var/list/arguments, var/proc/task_after_process, var/list/task_after_process_args)
- ..()
- src.trigger_time = trigger_time
- src.procedure = procedure
- src.arguments = arguments ? arguments : list()
- src.task_after_process = task_after_process ? task_after_process : /proc/destroy_scheduled_task
- src.task_after_process_args = istype(task_after_process_args) ? task_after_process_args : list()
- task_after_process_args += src
-
-/datum/scheduled_task/Destroy()
- if (!destroyed)
- kill(no_del = TRUE)
- procedure = null
- arguments.Cut()
- task_after_process = null
- task_after_process_args.Cut()
- return ..()
-
-/datum/scheduled_task/proc/pre_process()
- return
-
-/datum/scheduled_task/proc/process()
- if(procedure)
- call(procedure)(arglist(arguments))
-
-/datum/scheduled_task/proc/post_process()
- call(task_after_process)(arglist(task_after_process_args))
-
-// Resets the trigger time, has no effect if the task has already triggered
-/datum/scheduled_task/proc/trigger_task_in(var/trigger_in)
- src.trigger_time = world.time + trigger_in
-
-/datum/scheduled_task/proc/kill(no_del = FALSE)
- if (!destroyed)
- warning("scheduler: Non-destroyed task was killed!")
- destroyed = TRUE
-
- if (src in scheduler.tasks)
- warning("scheduler: Task was not cleaned up correctly, rebuilding scheduler queue!")
- scheduler.rebuild_queue()
-
- if (!no_del)
- qdel(src)
-
-/datum/scheduled_task/source
- var/datum/source
-
-/datum/scheduled_task/source/New(var/trigger_time, var/datum/source, var/procedure, var/list/arguments, var/proc/task_after_process, var/list/task_after_process_args)
- src.source = source
- ..(trigger_time, procedure, arguments, task_after_process, task_after_process_args)
-
-/datum/scheduled_task/source/Destroy()
- source = null
- return ..()
-
-/datum/scheduled_task/source/process()
- call(source, procedure)(arglist(arguments))
-
-/datum/scheduled_task/source/proc/source_destroyed()
- destroyed = TRUE
-
-/proc/destroy_scheduled_task(var/datum/scheduled_task/st)
- st.destroyed = TRUE
-
-/proc/repeat_scheduled_task(var/trigger_delay, var/datum/scheduled_task/st)
- st.trigger_time = world.time + trigger_delay
- scheduler.schedule(st)
diff --git a/code/datums/server_greeting.dm b/code/datums/server_greeting.dm
index 923535aa5b1..f1888d8a88c 100644
--- a/code/datums/server_greeting.dm
+++ b/code/datums/server_greeting.dm
@@ -175,6 +175,10 @@
user.info_sent = 0
+ // Make sure the user has the welcome screen assets.
+ var/datum/asset/welcome = get_asset_datum(/datum/asset/simple/misc)
+ welcome.send(user)
+
user << browse('html/templates/welcome_screen.html', "window=greeting;size=640x500")
/*
diff --git a/code/datums/sun.dm b/code/datums/sun.dm
deleted file mode 100644
index a78c89ac466..00000000000
--- a/code/datums/sun.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-#define SOLAR_UPDATE_TIME 600 //duration between two updates of the whole sun/solars positions
-
-/datum/sun
- var/angle
- var/dx
- var/dy
- var/rate
- var/list/solars // for debugging purposes, references solars_list at the constructor
- var/solar_next_update // last time the sun position was checked and adjusted
-
-/datum/sun/New()
-
- solars = solars_list
- rate = rand(50,200)/100 // 50% - 200% of standard rotation
- if(prob(50)) // same chance to rotate clockwise than counter-clockwise
- rate = -rate
- solar_next_update = world.time // init the timer
- angle = rand (0,360) // the station position to the sun is randomised at round start
-
-/*/hook/startup/proc/createSun() // handled in scheduler
- sun = new /datum/sun()
- return 1*/
-
-// calculate the sun's position given the time of day
-// at the standard rate (100%) the angle is increase/decreased by 6 degrees every minute.
-// a full rotation thus take a game hour in that case
-/datum/sun/proc/calc_position()
-
- if(world.time < solar_next_update) //if less than 60 game secondes have passed, do nothing
- return;
-
- angle = (360 + angle + rate * 6) % 360 // increase/decrease the angle to the sun, adjusted by the rate
-
- solar_next_update += SOLAR_UPDATE_TIME // since we updated the angle, set the proper time for the next loop
-
- // now calculate and cache the (dx,dy) increments for line drawing
-
- var/s = sin(angle)
- var/c = cos(angle)
-
- // Either "abs(s) < abs(c)" or "abs(s) >= abs(c)"
- // In both cases, the greater is greater than 0, so, no "if 0" check is needed for the divisions
-
- if( abs(s) < abs(c))
-
- dx = s / abs(c)
- dy = c / abs(c)
-
- else
- dx = s/abs(s)
- dy = c / abs(s)
-
- //now tell the solar control computers to update their status and linked devices
- for(var/obj/machinery/power/solar_control/SC in solars_list)
- if(!SC.powernet)
- solars_list.Remove(SC)
- continue
- SC.update()
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index f4e373d0ed0..d9bc6a448f4 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -39,10 +39,26 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/grenade/chem_grenade/incendiary)
cost = 20
containertype = /obj/structure/closet/crate
- containername = "Special Ops crate"
+ containername = "crate"
group = "Security"
hidden = 1
+/datum/supply_packs/randomised/illegalguns
+ name = "Illegal weapons crate"
+ num_contained = 2
+ contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
+ /obj/item/weapon/gun/projectile/boltaction,
+ /obj/item/weapon/gun/projectile/silenced,
+ /obj/item/weapon/gun/projectile/pirate,
+ /obj/item/weapon/gun/projectile/revolver/derringer,
+ /obj/item/weapon/gun/projectile/dragunov,
+ /obj/item/weapon/gun/energy/retro)
+ cost = 60
+ containertype = /obj/structure/closet/crate
+ containername = "crate"
+ hidden = 1
+ group = "Security"
+
/datum/supply_packs/forensics
name = "Auxiliary forensic tools"
contains = list(/obj/item/weapon/forensics/sample_kit,
@@ -1718,22 +1734,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "glowsticks crate"
group = "Operations"
-/datum/supply_packs/randomised/illegalguns
- name = "Illegal weapons crate"
- num_contained = 2
- contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
- /obj/item/weapon/gun/projectile/boltaction,
- /obj/item/weapon/gun/projectile/silenced,
- /obj/item/weapon/gun/projectile/pirate,
- /obj/item/weapon/gun/projectile/revolver/derringer,
- /obj/item/weapon/gun/projectile/dragunov,
- /obj/item/weapon/gun/energy/retro)
- cost = 120
- containertype = /obj/structure/closet/crate
- containername = "Unlabeled crate"
- contraband = 1
- group = "Security"
-
/datum/supply_packs/spessbike
name = "Space-bike Crate"
contains = list(/obj/vehicle/bike)
diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm
index 8636cb58acb..9d7399dcb18 100644
--- a/code/datums/uplink/uplink_items.dm
+++ b/code/datums/uplink/uplink_items.dm
@@ -9,7 +9,7 @@ var/datum/uplink/uplink = new()
items_assoc = list()
items = init_subtypes(/datum/uplink_item)
categories = init_subtypes(/datum/uplink_category)
- categories = dd_sortedObjectList(categories)
+ sortTim(categories, /proc/cmp_uplink_category, FALSE)
for(var/datum/uplink_item/item in items)
if(!item.name)
@@ -23,7 +23,7 @@ var/datum/uplink/uplink = new()
category.items += item
for(var/datum/uplink_category/category in categories)
- category.items = dd_sortedObjectList(category.items)
+ sortTim(category.items, /proc/cmp_uplink_item, FALSE)
/datum/uplink_item
var/name
@@ -104,9 +104,6 @@ var/datum/uplink/uplink = new()
log_and_message_admins("used \the [U.loc] to buy \a [src]")
U.purchase_log[src] = U.purchase_log[src] + 1
-datum/uplink_item/dd_SortValue()
- return cost(INFINITY)
-
/********************************
* *
* Physical Uplink Entries *
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 7babc9c4c1a..59c7e271d0a 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -147,9 +147,6 @@ var/global/ManifestJSON
"misc" = misc\
)
ManifestJSON = json_encode(PDA_Manifest)
- return
-
-
/obj/effect/laser
name = "laser"
@@ -217,3 +214,17 @@ var/global/ManifestJSON
/obj/effect/spawner
name = "object spawner"
+
+/obj/structure/spaceship
+ name = "Abandoned Shuttle"
+ desc = "An ancient and inoperable shuttle-craft"
+ icon = 'icons/obj/machines/spaceship.dmi'
+ anchored = 1
+ density = 1
+
+/obj/structure/mainframe
+ name = "Ancient Mainframe"
+ desc = "A long-fried AI mainframe from the 2420s. It's more fit to be holding rats than AIs at this point."
+ icon = 'icons/obj/mainframe.dmi'
+ anchored = 1
+ density = 1
\ No newline at end of file
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 07a75c1284a..09bc4f329c5 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -45,7 +45,6 @@
/obj/item/weapon/soap/deluxe/New()
..()
desc = "A deluxe Waffle Co. brand bar of soap. Smells of [pick("lavender", "vanilla", "strawberry", "chocolate" ,"space")]."
- ..()
/obj/item/weapon/soap/syndie
desc = "An untrustworthy bar of soap. Smells of fear."
diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm
index dfd872be0c1..596a884483f 100644
--- a/code/defines/procs/announce.dm
+++ b/code/defines/procs/announce.dm
@@ -125,7 +125,7 @@ datum/announcement/proc/Log(message as text, message_title as text)
command_announcement.Announce("It has come to our attention that the station passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert")
/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank, var/join_message)
- if (ticker.current_state == GAME_STATE_PLAYING)
+ if (SSticker.current_state == GAME_STATE_PLAYING)
if(character.mind.role_alt_title)
rank = character.mind.role_alt_title
AnnounceArrivalSimple(character.real_name, rank, join_message)
diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm
index a18d2074152..128b01fffb8 100644
--- a/code/defines/procs/radio.dm
+++ b/code/defines/procs/radio.dm
@@ -5,13 +5,13 @@
/proc/register_radio(source, old_frequency, new_frequency, radio_filter)
if(old_frequency)
- radio_controller.remove_object(source, old_frequency)
+ SSradio.remove_object(source, old_frequency)
if(new_frequency)
- return radio_controller.add_object(source, new_frequency, radio_filter)
+ return SSradio.add_object(source, new_frequency, radio_filter)
/proc/unregister_radio(source, frequency)
- if(radio_controller)
- radio_controller.remove_object(source, frequency)
+ if(SSradio)
+ SSradio.remove_object(source, frequency)
/proc/get_frequency_name(var/display_freq)
var/freq_text
diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm
index e10416f1128..67f9600e66e 100644
--- a/code/defines/procs/sd_Alert.dm
+++ b/code/defines/procs/sd_Alert.dm
@@ -95,7 +95,7 @@ sd_alert
Destroy()
target << browse(null,"window=\ref[src]")
- ..()
+ return ..()
New(who, tag)
..()
diff --git a/code/defines/procs/statistics.dm b/code/defines/procs/statistics.dm
deleted file mode 100644
index 8a1e02b7811..00000000000
--- a/code/defines/procs/statistics.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-proc/sql_poll_population()
- if(!config.sql_enabled || !config.sql_stats)
- return
- var/admincount = admins.len
- var/playercount = 0
- for(var/mob/M in player_list)
- if(M.client)
- playercount += 1
- establish_db_connection(dbcon)
- if(!dbcon.IsConnected())
- log_game("SQL ERROR during population polling. Failed to connect.")
- else
- var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
- var/DBQuery/query = dbcon.NewQuery("INSERT INTO `ss13_population` (`playercount`, `admincount`, `time`) VALUES ([playercount], [admincount], '[sqltime]')")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during population polling. Error : \[[err]\]\n")
-
-proc/sql_report_round_start()
- // TODO
- if(!config.sql_enabled)
- return
-proc/sql_report_round_end()
- // TODO
- if(!config.sql_enabled)
- return
-
-proc/sql_report_death(var/mob/living/carbon/human/H)
- if(!config.sql_enabled || !config.sql_stats)
- return
- if(!H)
- return
- if(!H.key || !H.mind)
- return
-
- var/area/placeofdeath = get_area(H)
- var/podname = placeofdeath ? placeofdeath.name : "Unknown area"
-
- var/sqlname = sanitizeSQL(H.real_name)
- var/sqlkey = sanitizeSQL(H.key)
- var/sqlpod = sanitizeSQL(podname)
- var/sqlspecial = sanitizeSQL(H.mind.special_role)
- var/sqljob = sanitizeSQL(H.mind.assigned_role)
- var/laname
- var/lakey
- if(H.lastattacker)
- laname = sanitizeSQL(H.lastattacker:real_name)
- lakey = sanitizeSQL(H.lastattacker:key)
- var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
- var/coord = "[H.x], [H.y], [H.z]"
- //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
- establish_db_connection(dbcon)
- if(!dbcon.IsConnected())
- log_game("SQL ERROR during death reporting. Failed to connect.")
- else
- var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")
-
-
-proc/sql_report_cyborg_death(var/mob/living/silicon/robot/H)
- if(!config.sql_enabled || !config.sql_stats)
- return
- if(!H)
- return
- if(!H.key || !H.mind)
- return
-
- var/area/placeofdeath = get_area(H)
- var/podname = placeofdeath ? placeofdeath.name : "Unknown area"
-
- var/sqlname = sanitizeSQL(H.real_name)
- var/sqlkey = sanitizeSQL(H.key)
- var/sqlpod = sanitizeSQL(podname)
- var/sqlspecial = sanitizeSQL(H.mind.special_role)
- var/sqljob = sanitizeSQL(H.mind.assigned_role)
- var/laname
- var/lakey
- if(H.lastattacker)
- laname = sanitizeSQL(H.lastattacker:real_name)
- lakey = sanitizeSQL(H.lastattacker:key)
- var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
- var/coord = "[H.x], [H.y], [H.z]"
- //world << "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])"
- establish_db_connection(dbcon)
- if(!dbcon.IsConnected())
- log_game("SQL ERROR during death reporting. Failed to connect.")
- else
- var/DBQuery/query = dbcon.NewQuery("INSERT INTO ss13_death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.getBruteLoss()], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()], '[coord]')")
- if(!query.Execute())
- var/err = query.ErrorMsg()
- log_game("SQL ERROR during death reporting. Error : \[[err]\]\n")
-
-
-proc/statistic_cycle()
- if(!config.sql_enabled || !config.sql_stats)
- return
- while(1)
- sql_poll_population()
- sleep(6000)
diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm
index 2a86b6f763b..dbdcb210c84 100644
--- a/code/game/antagonist/antagonist.dm
+++ b/code/game/antagonist/antagonist.dm
@@ -98,7 +98,7 @@
// Prune restricted status. Broke it up for readability.
// Note that this is done before jobs are handed out.
- for(var/datum/mind/player in ticker.mode.get_players_for_role(role_type, id))
+ for(var/datum/mind/player in SSticker.mode.get_players_for_role(role_type, id))
if(ghosts_only && !istype(player.current, /mob/dead))
log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!")
else if(config.use_age_restriction_for_antags && player.current.client.player_age < minimum_player_age)
diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm
index 0d048ec0c44..7b70633816f 100644
--- a/code/game/antagonist/antagonist_update.dm
+++ b/code/game/antagonist/antagonist_update.dm
@@ -26,7 +26,7 @@
return
for(var/image/I in recipient.current.client.images)
if(I.icon_state == antag_indicator || (faction_indicator && I.icon_state == faction_indicator))
- qdel(I)
+ recipient.current.client.images -= I
/datum/antagonist/proc/get_indicator(var/datum/mind/recipient, var/datum/mind/other)
if(!antag_indicator || !other.current || !recipient.current)
@@ -46,44 +46,46 @@
antag.current.client.images |= get_indicator(antag, other_antag)
/datum/antagonist/proc/update_icons_added(var/datum/mind/player)
+ set waitfor = FALSE
if(!antag_indicator || !player.current)
return
- spawn(0)
- var/give_to_player = (!faction_invisible || !(player in faction_members))
- for(var/datum/mind/antag in current_antagonists)
- if(!antag.current)
- continue
- if(antag.current.client)
- antag.current.client.images |= get_indicator(antag, player)
- if(!give_to_player)
- continue
- if(player.current.client)
- player.current.client.images |= get_indicator(player, antag)
+ var/give_to_player = (!faction_invisible || !(player in faction_members))
+ for(var/datum/mind/antag in current_antagonists)
+ if(!antag.current)
+ continue
+ if(antag.current.client)
+ antag.current.client.images |= get_indicator(antag, player)
+ if(!give_to_player)
+ continue
+ if(player.current.client)
+ player.current.client.images |= get_indicator(player, antag)
/datum/antagonist/proc/update_icons_removed(var/datum/mind/player)
+ set waitfor = FALSE
+
if(!antag_indicator || !player.current)
return
- spawn(0)
- clear_indicators(player)
- if(player.current && player.current.client)
- for(var/datum/mind/antag in current_antagonists)
- if(antag.current && antag.current.client)
- for(var/image/I in antag.current.client.images)
- if(I.loc == player.current)
- qdel(I)
+
+ clear_indicators(player)
+ if(player.current && player.current.client)
+ for(var/datum/mind/antag in current_antagonists)
+ if(antag.current && antag.current.client)
+ for(var/image/I in antag.current.client.images)
+ if(I.loc == player.current)
+ antag.current.client.images -= I
/datum/antagonist/proc/update_current_antag_max()
cur_max = hard_cap
- if(ticker && ticker.mode)
- if(ticker.mode.antag_tags && (id in ticker.mode.antag_tags))
+ if(SSticker.mode)
+ if(SSticker.mode.antag_tags && (id in SSticker.mode.antag_tags))
cur_max = hard_cap_round
- if(ticker.mode.antag_scaling_coeff)
+ if(SSticker.mode.antag_scaling_coeff)
var/count = 0
- if (!ticker || ticker.current_state < GAME_STATE_PLAYING)
+ if (SSticker.current_state < GAME_STATE_PLAYING)
// If we're in the pre-game state, we count readied new players as players.
// Yes, not all get spawned, but it's a close enough guestimation.
for (var/mob/new_player/L in player_list)
@@ -96,7 +98,7 @@
// Minimum: initial_spawn_target
// Maximum: hard_cap or hard_cap_round
- cur_max = max(initial_spawn_target,min(round(count/ticker.mode.antag_scaling_coeff),cur_max))
+ cur_max = max(initial_spawn_target,min(round(count/SSticker.mode.antag_scaling_coeff),cur_max))
// Updates the initial spawn target to match the player count.
// Intended to stop 6 nuke ops in a 15 player round. RIP those rounds.
@@ -104,12 +106,12 @@
// Default is a linear rise of one antag per 5 players.
var/modifier = 5
- if (ticker.mode.antag_scaling_coeff)
- modifier = ticker.mode.antag_scaling_coeff
+ if (SSticker.mode.antag_scaling_coeff)
+ modifier = SSticker.mode.antag_scaling_coeff
var/count = 0
- if (!ticker || ticker.current_state < GAME_STATE_PLAYING)
+ if (SSticker.current_state < GAME_STATE_PLAYING)
// If we're in the pre-game state, we count readied new players as players.
// Yes, not all get spawned, but it's a close enough guestimation.
for (var/mob/new_player/L in player_list)
diff --git a/code/game/antagonist/station/highlander.dm b/code/game/antagonist/station/highlander.dm
index 5c696c2de74..98aabc28aa5 100644
--- a/code/game/antagonist/station/highlander.dm
+++ b/code/game/antagonist/station/highlander.dm
@@ -57,7 +57,7 @@ var/datum/antagonist/highlander/highlanders
/proc/only_one()
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("The game hasn't started yet!")
return
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index cb92a827e6a..d1ead662f02 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -51,44 +51,19 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/list/forced_ambience = null
var/sound_env = STANDARD_STATION
- var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf
+ var/turf/base_turf//The base turf type of the area, which can be used to override the z-level's base turf
var/no_light_control = 0 // if 1, lights in area cannot be toggled with light controller
var/allow_nightmode = 0 // if 1, lights in area will be darkened by the night mode controller
+ var/station_area = 0
+ var/centcomm_area = 0
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
+
+// Setup moved to EMI.
var/list/teleportlocs = list()
-
-/hook/startup/proc/setupTeleportLocs()
- for(var/area/AR in world)
- if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station)) continue
- if(teleportlocs.Find(AR.name)) continue
- var/turf/picked = pick_area_turf(AR.type, list(/proc/is_station_turf))
- if (picked)
- teleportlocs += AR.name
- teleportlocs[AR.name] = AR
-
- teleportlocs = sortAssoc(teleportlocs)
-
- return 1
-
var/list/ghostteleportlocs = list()
-/hook/startup/proc/setupGhostTeleportLocs()
- for(var/area/AR in world)
- if(ghostteleportlocs.Find(AR.name)) continue
- if(istype(AR, /area/turret_protected/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome) || istype(AR, /area/shuttle/specops/centcom))
- ghostteleportlocs += AR.name
- ghostteleportlocs[AR.name] = AR
- var/turf/picked = pick_area_turf(AR.type, list(/proc/is_station_turf))
- if (picked)
- ghostteleportlocs += AR.name
- ghostteleportlocs[AR.name] = AR
-
- ghostteleportlocs = sortAssoc(ghostteleportlocs)
-
- return 1
-
/*-----------------------------------------------------------------------------*/
/////////
@@ -106,6 +81,7 @@ var/list/ghostteleportlocs = list()
power_environ = 0
ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg')
no_light_control = 1
+ base_turf = /turf/space
area/space/atmosalert()
return
@@ -145,20 +121,41 @@ area/space/atmosalert()
//place to another. Look at escape shuttle for example.
//All shuttles should now be under shuttle since we have smooth-wall code.
+/area/shuttle/lifts/placeholder //placeholder until lift code is done.
+ name = "\improper Placeholder!1!!"
+ icon_state = "unknown"
+
/area/shuttle
requires_power = 0
sound_env = SMALL_ENCLOSED
- base_turf = /turf/space
no_light_control = 1
/area/shuttle/arrival
name = "\improper Arrival Shuttle"
+ flags = RAD_SHIELDED
-/area/shuttle/arrival/pre_game
+/area/shuttle/arrival/centcom
icon_state = "shuttle2"
+ base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
+
+/area/shuttle/arrival/centcom/Entered(atom/movable/Obj, atom/oldLoc)
+ . = ..()
+ if (!istype(Obj, /mob/living) || !SSarrivals)
+ return
+
+ log_debug("SSarrivals: [Obj] has entered arrival shuttle hotzone.")
+
+ SSarrivals.on_hotzone_enter()
+
+/area/shuttle/arrival/transit
+ icon_state = "shuttle2"
+ centcomm_area = 1
/area/shuttle/arrival/station
icon_state = "shuttle"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape
name = "\improper Emergency Shuttle"
@@ -167,14 +164,19 @@ area/space/atmosalert()
/area/shuttle/escape/station
name = "\improper Emergency Shuttle Station"
icon_state = "shuttle2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape/centcom
name = "\improper Emergency Shuttle Centcom"
icon_state = "shuttle"
+ base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
name = "\improper Emergency Shuttle Transit"
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod1
name = "\improper Escape Pod One"
@@ -182,12 +184,17 @@ area/space/atmosalert()
/area/shuttle/escape_pod1/station
icon_state = "shuttle2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod1/centcom
icon_state = "shuttle"
+ base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod1/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod2
name = "\improper Escape Pod Two"
@@ -195,12 +202,17 @@ area/space/atmosalert()
/area/shuttle/escape_pod2/station
icon_state = "shuttle2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod2/centcom
icon_state = "shuttle"
+ base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod2/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod3
name = "\improper Escape Pod Three"
@@ -208,12 +220,17 @@ area/space/atmosalert()
/area/shuttle/escape_pod3/station
icon_state = "shuttle2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod3/centcom
icon_state = "shuttle"
+ base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod3/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/escape_pod5 //Pod 4 was lost to meteors
name = "\improper Escape Pod Five"
@@ -221,58 +238,52 @@ area/space/atmosalert()
/area/shuttle/escape_pod5/station
icon_state = "shuttle2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/escape_pod5/centcom
icon_state = "shuttle"
+ base_turf = /turf/space
+ centcomm_area = 1
/area/shuttle/escape_pod5/transit
icon_state = "shuttle"
+ centcomm_area = 1
/area/shuttle/mining
name = "\improper Mining Shuttle"
/area/shuttle/mining/station
icon_state = "shuttle2"
+ station_area = 1
/area/shuttle/mining/outpost
icon_state = "shuttle"
+ station_area = 1
/area/shuttle/transport1/centcom
icon_state = "shuttle"
name = "\improper Transport Shuttle Centcom"
+ base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/transport1/station
icon_state = "shuttle"
name = "\improper Transport Shuttle"
-
-/area/shuttle/alien/base
- icon_state = "shuttle"
- name = "\improper Alien Shuttle Base"
- requires_power = 1
-
-/area/shuttle/alien/mine
- icon_state = "shuttle"
- name = "\improper Alien Shuttle Mine"
- requires_power = 1
-
-/area/shuttle/prison/
- name = "\improper Prison Shuttle"
-
-/area/shuttle/prison/station
- icon_state = "shuttle"
-
-/area/shuttle/prison/prison
- icon_state = "shuttle2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/specops/centcom
name = "\improper Special Ops Shuttle"
flags = RAD_SHIELDED
-
-/area/shuttle/specops/centcom
+ base_turf = /turf/unsimulated/floor
icon_state = "shuttlered"
+ centcomm_area = 1
/area/shuttle/specops/station
icon_state = "shuttlered2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/syndicate_elite
name = "\improper Merc Elite Shuttle"
@@ -280,9 +291,12 @@ area/space/atmosalert()
/area/shuttle/syndicate_elite/mothership
icon_state = "shuttlered"
+ centcomm_area = 1
/area/shuttle/syndicate_elite/station
icon_state = "shuttlered2"
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/administration
flags = RAD_SHIELDED
@@ -290,47 +304,25 @@ area/space/atmosalert()
/area/shuttle/administration/centcom
name = "\improper Administration Shuttle Centcom"
icon_state = "shuttlered"
+ base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/shuttle/administration/station
name = "\improper Administration Shuttle"
icon_state = "shuttlered2"
-
-/area/shuttle/thunderdome
- name = "honk"
-
-/area/shuttle/thunderdome/grnshuttle
- name = "\improper Thunderdome GRN Shuttle"
- icon_state = "green"
-
-/area/shuttle/thunderdome/grnshuttle/dome
- name = "\improper GRN Shuttle"
- icon_state = "shuttlegrn"
-
-/area/shuttle/thunderdome/grnshuttle/station
- name = "\improper GRN Station"
- icon_state = "shuttlegrn2"
-
-/area/shuttle/thunderdome/redshuttle
- name = "\improper Thunderdome RED Shuttle"
- icon_state = "red"
-
-/area/shuttle/thunderdome/redshuttle/dome
- name = "\improper RED Shuttle"
- icon_state = "shuttlered"
-
-/area/shuttle/thunderdome/redshuttle/station
- name = "\improper RED Station"
- icon_state = "shuttlered2"
-// === Trying to remove these areas:
+ base_turf = /turf/simulated/floor/asteroid
+ station_area = 1
/area/shuttle/research
name = "\improper Research Shuttle"
/area/shuttle/research/station
icon_state = "shuttle2"
+ station_area = 1
/area/shuttle/research/outpost
icon_state = "shuttle"
+ station_area = 1
/area/airtunnel1/ // referenced in airtunnel.dm:759
@@ -338,24 +330,28 @@ area/space/atmosalert()
// === end remove
-/area/alien
- name = "\improper Alien base"
- icon_state = "yellow"
- requires_power = 0
- no_light_control = 1
-
// CENTCOM
+/area/prison/solitary
+ name = "\improper CentComm Solitary Confinement"
+ icon_state = "brig"
+ centcomm_area = 1
+
/area/centcom
name = "\improper Centcom"
icon_state = "centcom"
requires_power = 0
dynamic_lighting = 0
no_light_control = 1
+ base_turf = /turf/unsimulated/floor
+ centcomm_area = 1
/area/centcom/control
name = "\improper Centcom Control"
+/area/centcom/spawning
+ name = "\improper Centcom Preparatory Wing"
+
/area/centcom/evac
name = "\improper Centcom Emergency Shuttle"
@@ -391,6 +387,7 @@ area/space/atmosalert()
requires_power = 0
dynamic_lighting = 0
no_light_control = 1
+ centcomm_area = 1
/area/syndicate_mothership/control
name = "\improper Mercenary Control Room"
@@ -420,26 +417,6 @@ area/space/atmosalert()
icon_state = "cave"
sound_env = SMALL_ENCLOSED
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/area/planet/clown
- name = "\improper Clown Planet"
- icon_state = "honk"
- requires_power = 0
- no_light_control = 1
-
/area/tdome
name = "\improper Thunderdome"
icon_state = "thunder"
@@ -447,6 +424,7 @@ area/space/atmosalert()
dynamic_lighting = 0
sound_env = ARENA
no_light_control = 1
+ centcomm_area = 1
/area/tdome/tdome1
name = "\improper Thunderdome (Team 1)"
@@ -471,6 +449,7 @@ area/space/atmosalert()
dynamic_lighting = 0
requires_power = 0
no_light_control = 1
+ centcomm_area = 1
/area/acting/backstage
name = "\improper Backstage"
@@ -494,51 +473,41 @@ area/space/atmosalert()
/area/syndicate_station/start
name = "\improper Mercenary Forward Operating Base"
icon_state = "yellow"
-
-/area/syndicate_station/southwest
- name = "\improper south-west of SS13"
- icon_state = "southwest"
-
-/area/syndicate_station/northwest
- name = "\improper north-west of SS13"
- icon_state = "northwest"
-
-/area/syndicate_station/northeast
- name = "\improper north-east of SS13"
- icon_state = "northeast"
-
-/area/syndicate_station/southeast
- name = "\improper south-east of SS13"
- icon_state = "southeast"
-
-/area/syndicate_station/north
- name = "\improper north of SS13"
- icon_state = "north"
-
-/area/syndicate_station/south
- name = "\improper south of SS13"
- icon_state = "south"
-
-/area/syndicate_station/commssat
- name = "\improper south of the communication satellite"
- icon_state = "south"
-
-/area/syndicate_station/mining
- name = "\improper northeast of the mining station"
- icon_state = "north"
+ centcomm_area = 1
base_turf = /turf/space
+/area/syndicate_station/surface
+ name = "\improper surface of the station"
+ icon_state = "southwest"
+ station_area = 1
+ base_turf = /turf/simulated/floor/asteroid
+
+/area/syndicate_station/above
+ name = "\improper above the station"
+ icon_state = "northwest"
+ station_area = 1
+
+/area/syndicate_station/under
+ name = "\improper under the station"
+ icon_state = "northeast"
+ station_area = 1
+
+/area/syndicate_station/caverns
+ name = "\improper caverns"
+ icon_state = "southeast"
+ station_area = 1
+ base_turf = /turf/simulated/floor/asteroid
+
/area/syndicate_station/arrivals_dock
name = "\improper docked with station"
icon_state = "shuttle"
-
-/area/syndicate_station/maint_dock
- name = "\improper docked with station"
- icon_state = "shuttle"
+ station_area = 1
+ base_turf = /turf/simulated/floor/asteroid
/area/syndicate_station/transit
name = "\improper hyperspace"
icon_state = "shuttle"
+ centcomm_area = 1
/area/wizard_station
name = "\improper Wizard's Den"
@@ -546,125 +515,46 @@ area/space/atmosalert()
requires_power = 0
dynamic_lighting = 0
no_light_control = 1
+ centcomm_area = 1
/area/skipjack_station
name = "\improper Skipjack"
icon_state = "yellow"
requires_power = 0
no_light_control = 1
+ base_turf = /turf/space
/area/skipjack_station/start
name = "\improper Skipjack"
icon_state = "yellow"
+ centcomm_area = 1
/area/skipjack_station/transit
name = "\improper hyperspace"
icon_state = "shuttle"
+ centcomm_area = 1
-/area/skipjack_station/southwest_solars
- name = "\improper aft port solars"
+/area/skipjack_station/surface
+ name = "\improper surface of the station"
icon_state = "southwest"
+ station_area = 1
+ base_turf = /turf/simulated/floor/asteroid
-/area/skipjack_station/northwest_solars
- name = "\improper fore port solars"
+/area/skipjack_station/above
+ name = "\improper above the station"
icon_state = "northwest"
+ station_area = 1
-/area/skipjack_station/northeast_solars
- name = "\improper fore starboard solars"
+/area/skipjack_station/under
+ name = "\improper under the station"
icon_state = "northeast"
+ station_area = 1
-/area/skipjack_station/southeast_solars
- name = "\improper aft starboard solars"
+/area/skipjack_station/cavern
+ name = "\improper caverns"
icon_state = "southeast"
-
-/area/skipjack_station/mining
- name = "\improper south of mining station"
- icon_state = "north"
- base_turf = /turf/space
-
-//PRISON
-/area/prison
- name = "\improper Prison Station"
- icon_state = "brig"
- no_light_control = 1
-
-/area/prison/arrival_airlock
- name = "\improper Prison Station Airlock"
- icon_state = "green"
- requires_power = 0
-
-/area/prison/control
- name = "\improper Prison Security Checkpoint"
- icon_state = "security"
-
-/area/prison/crew_quarters
- name = "\improper Prison Security Quarters"
- icon_state = "security"
-
-/area/prison/rec_room
- name = "\improper Prison Rec Room"
- icon_state = "green"
-
-/area/prison/closet
- name = "\improper Prison Supply Closet"
- icon_state = "dk_yellow"
-
-/area/prison/hallway/fore
- name = "\improper Prison Fore Hallway"
- icon_state = "yellow"
-
-/area/prison/hallway/aft
- name = "\improper Prison Aft Hallway"
- icon_state = "yellow"
-
-/area/prison/hallway/port
- name = "\improper Prison Port Hallway"
- icon_state = "yellow"
-
-/area/prison/hallway/starboard
- name = "\improper Prison Starboard Hallway"
- icon_state = "yellow"
-
-/area/prison/morgue
- name = "\improper Prison Morgue"
- icon_state = "morgue"
-
-/area/prison/medical_research
- name = "\improper Prison Genetic Research"
- icon_state = "medresearch"
-
-/area/prison/medical
- name = "\improper Prison Medbay"
- icon_state = "medbay"
-
-/area/prison/solar
- name = "\improper Prison Solar Array"
- icon_state = "storage"
- requires_power = 0
-
-/area/prison/podbay
- name = "\improper Prison Podbay"
- icon_state = "dk_yellow"
-
-/area/prison/solar_control
- name = "\improper Prison Solar Array Control"
- icon_state = "dk_yellow"
-
-/area/prison/solitary
- name = "Solitary Confinement"
- icon_state = "brig"
-
-/area/prison/cell_block/A
- name = "Prison Cell Block A"
- icon_state = "brig"
-
-/area/prison/cell_block/B
- name = "Prison Cell Block B"
- icon_state = "brig"
-
-/area/prison/cell_block/C
- name = "Prison Cell Block C"
- icon_state = "brig"
+ station_area = 1
+ base_turf = /turf/simulated/floor/asteroid
////////////////////
//SPACE STATION 13//
@@ -672,6 +562,7 @@ area/space/atmosalert()
//Maintenance
+
/area/maintenance
flags = RAD_SHIELDED
sound_env = TUNNEL_ENCLOSED
@@ -683,6 +574,11 @@ area/space/atmosalert()
'sound/ambience/ambimaint4.ogg',
'sound/ambience/ambimaint5.ogg'
)
+ station_area = 1
+
+/area/maintenance/civ
+ name = "\improper Civilian Maintenance"
+ icon_state = "maintcentral"
/area/maintenance/aft
name = "Aft Maintenance"
@@ -764,10 +660,19 @@ area/space/atmosalert()
name = "Engineering Maintenance"
icon_state = "maint_engineering"
+/area/maintenance/sublevel
+ name = "Sub-level Maintenance"
+ icon_state = "maint_engineering"
+
/area/maintenance/evahallway
name = "\improper EVA Maintenance"
icon_state = "maint_eva"
+/area/maintenance/solarmaint
+ name = "\improper Roof Solar Array Maintenance"
+ icon_state = "maint_eva"
+ base_turf = /turf/space
+
/area/maintenance/dormitory
name = "Dormitory Maintenance"
icon_state = "maint_dormitory"
@@ -852,6 +757,7 @@ area/space/atmosalert()
/area/hallway/primary/
sound_env = LARGE_ENCLOSED
allow_nightmode = 1
+ station_area = 1
/area/hallway/primary/fore
name = "\improper Fore Primary Hallway"
@@ -913,6 +819,31 @@ area/space/atmosalert()
name = "\improper Bridge"
icon_state = "bridge"
no_light_control = 1
+ station_area = 1
+
+/area/bridge/minibar
+ name = "\improper Command Break Room"
+ icon_state = "bridge"
+
+/area/bridge/ailobby
+ name = "\improper AI Elevator Access"
+ icon_state = "ai_foyer"
+
+/area/bridge/aibunker
+ name = "\improper AI Maintainence Bunker"
+ icon_state = "ai_foyer"
+
+/area/bridge/centcom_meetingroom
+ name = "\improper Level A Meeting Room"
+ icon_state = "bridge"
+
+/area/bridge/levela
+ name = "\improper Level A Bridge"
+ icon_state = "bridge"
+
+/area/crew_quarters/heads/cryo
+ name = "\improper Command Dormitory"
+ icon_state = "head_quarters"
/area/bridge/meeting_room
name = "\improper Heads of Staff Meeting Room"
@@ -949,18 +880,16 @@ area/space/atmosalert()
name = "\improper Courtroom"
icon_state = "courtroom"
-/area/mint
- name = "\improper Mint"
- icon_state = "green"
-
/area/comms
name = "\improper Communications Relay"
icon_state = "tcomsatcham"
no_light_control = 1
+ station_area = 1
/area/server
name = "\improper Research Server Room"
icon_state = "server"
+ station_area = 1
//Crew
@@ -968,6 +897,7 @@ area/space/atmosalert()
name = "\improper Dormitories"
icon_state = "Sleep"
flags = RAD_SHIELDED
+ station_area = 1
/area/crew_quarters/toilet
name = "\improper Dormitory Toilets"
@@ -993,6 +923,26 @@ area/space/atmosalert()
name = "\improper Cryogenic Storage"
icon_state = "Sleep"
+/area/crew_quarters/sleep/main
+ name = "\improper Main Level Dormitories"
+ icon_state = "Sleep"
+
+/area/crew_quarters/sleep/engineering
+ name = "\improper Engineering Dormitories"
+ icon_state = "Sleep"
+
+/area/crew_quarters/sleep/security
+ name = "\improper Security Dormitories"
+ icon_state = "Sleep"
+
+/area/crew_quarters/sleep/research
+ name = "\improper Research Dormitories"
+ icon_state = "Sleep"
+
+/area/crew_quarters/sleep/medical
+ name = "\improper Medical Dormitories"
+ icon_state = "Sleep"
+
/area/crew_quarters/sleep_male
name = "\improper Male Dorm"
icon_state = "Sleep"
@@ -1049,6 +999,10 @@ area/space/atmosalert()
name = "\improper Library"
icon_state = "library"
sound_env = LARGE_SOFTFLOOR
+ station_area = 1
+
+/area/chapel
+ station_area = 1
/area/chapel/main
name = "\improper Chapel"
@@ -1063,9 +1017,7 @@ area/space/atmosalert()
/area/lawoffice
name = "\improper Internal Affairs"
icon_state = "law"
-
-
-
+ station_area = 1
/area/holodeck
name = "\improper Holodeck"
@@ -1073,6 +1025,7 @@ area/space/atmosalert()
dynamic_lighting = 0
sound_env = LARGE_ENCLOSED
no_light_control = 1
+ station_area = 1
/area/holodeck/alphadeck
name = "\improper Holodeck Alpha"
@@ -1137,7 +1090,7 @@ area/space/atmosalert()
//Engineering
-/area/engineering/
+/area/engineering
name = "\improper Engineering"
icon_state = "engineering"
ambience = list(
@@ -1146,6 +1099,7 @@ area/space/atmosalert()
'sound/ambience/ambisin3.ogg',
'sound/ambience/ambisin4.ogg'
)
+ station_area = 1
/area/engineering/atmos
name = "\improper Atmospherics"
@@ -1230,11 +1184,14 @@ area/space/atmosalert()
/area/solar
requires_power = 1
always_unpowered = 1
+ dynamic_lighting = 0
base_turf = /turf/space
+ station_area = 1
auxport
- name = "\improper Fore Port Solar Array"
+ name = "\improper Roof Solar Array"
icon_state = "panelsA"
+ base_turf = /turf/space
auxstarboard
name = "\improper Fore Starboard Solar Array"
@@ -1281,14 +1238,13 @@ area/space/atmosalert()
icon_state = "SolarcontrolA"
sound_env = SMALL_ENCLOSED
+/area/assembly
+ station_area = 1
+
/area/assembly/chargebay
name = "\improper Mech Bay"
icon_state = "mechbay"
-/area/assembly/showroom
- name = "\improper Robotics Showroom"
- icon_state = "showroom"
-
/area/assembly/robotics
name = "\improper Robotics Lab"
icon_state = "robotics"
@@ -1305,24 +1261,28 @@ area/space/atmosalert()
/area/teleporter
name = "\improper Teleporter"
icon_state = "teleporter"
-
-/area/gateway
- name = "\improper Gateway"
- icon_state = "teleporter"
-
-/area/AIsattele
- name = "\improper AI Satellite Teleporter Room"
- icon_state = "teleporter"
- ambience = list('sound/ambience/ambimalf.ogg')
+ station_area = 1
//MedBay
+/area/medical
+ station_area = 1
+
/area/medical/medbay
name = "\improper Medbay Hallway - Port"
icon_state = "medbay"
ambience = list('sound/ambience/signal.ogg')
//Medbay is a large area, these additional areas help level out APC load.
+
+/area/medical/emt
+ name = "\improper Emergency Technician Storage"
+ icon_state = "medbay"
+
+/area/medical/temp_morgue
+ name = "\improper Temporary Morgue"
+ icon_state = "morgue"
+
/area/medical/medbay2
name = "\improper Medbay Hallway - Starboard"
icon_state = "medbay2"
@@ -1425,10 +1385,18 @@ area/space/atmosalert()
name = "\improper Pre-Op Prep Room"
icon_state = "surgery"
+/area/medical/surgerywing
+ name = "\improper Surgery Wing"
+ icon_state = "surgery"
+
/area/medical/cryo
name = "\improper Cryogenics"
icon_state = "cryo"
+/area/medical/gen_treatment
+ name = "\improper General Treatment"
+ icon_state = "cryo"
+
/area/medical/exam_room
name = "\improper Exam Room"
icon_state = "exam_room"
@@ -1446,10 +1414,16 @@ area/space/atmosalert()
icon_state = "exam_room"
no_light_control = 1
+/area/medical/icu
+ name = "\improper Intensive Care Unit"
+ icon_state = "cryo"
+
+
//Security
/area/security
no_light_control = 1
+ station_area = 1
/area/security/main
name = "\improper Security Office"
@@ -1493,11 +1467,15 @@ area/space/atmosalert()
name = "\improper Security - Armory"
icon_state = "Warden"
-/area/security/detectives_office
+/area/security/forensics_office
name = "\improper Security - Forensic Office"
icon_state = "detective"
sound_env = MEDIUM_SOFTFLOOR
+/area/security/detectives_office
+ name = "\improper Security - Detective's Office"
+ icon_state = "detective"
+
/area/security/range
name = "\improper Security - Firing Range"
icon_state = "firingrange"
@@ -1557,12 +1535,13 @@ area/space/atmosalert()
icon_state = "security"
/area/security/vacantoffice2
- name = "\improper Vacant Office"
+ name = "\improper Security Meeting Room"
icon_state = "security"
/area/quartermaster
name = "\improper Quartermasters"
icon_state = "quart"
+ station_area = 1
/area/quartermaster/office
name = "\improper Cargo Office"
@@ -1588,21 +1567,30 @@ area/space/atmosalert()
/area/janitor/
name = "\improper Custodial Closet"
icon_state = "janitor"
+ station_area = 1
/area/hydroponics
name = "\improper Hydroponics"
icon_state = "hydro"
no_light_control = TRUE
+ station_area = 1
/area/hydroponics/garden
name = "\improper Garden"
icon_state = "garden"
//rnd (Research and Development
+/area/rnd
+ station_area = 1
+
/area/rnd/research
name = "\improper Research and Development"
icon_state = "research"
+/area/rnd/telesci
+ name = "\improper Telescience Lab"
+ icon_state = "research"
+
/area/rnd/docking
name = "\improper Research Dock"
icon_state = "research_dock"
@@ -1649,11 +1637,17 @@ area/space/atmosalert()
name = "\improper Miscellaneous Research"
icon_state = "toxmisc"
+/area/toxins
+ station_area = 1
+
/area/toxins/server
name = "\improper Server Room"
icon_state = "server"
+ station_area = 1
//Storage
+/area/storage
+ station_area = 1
/area/storage/tools
name = "Auxiliary Tool Storage"
@@ -1723,11 +1717,24 @@ area/space/atmosalert()
name = "\improper Derelict Station"
icon_state = "storage"
no_light_control = 1
+ base_turf = /turf/space
-/area/derelict/hallway/primary
- name = "\improper Derelict Primary Hallway"
+/area/derelict/hallway/northwest
+ name = "\improper NSS Aurora I"
icon_state = "hallP"
+/area/derelict/hallway/northeast
+ name = "\improper NSS Aurora I"
+ icon_state = "yellow"
+
+/area/derelict/hallway/southwest
+ name = "\improper NSS Aurora I"
+ icon_state = "hallS"
+
+/area/derelict/hallway/southeast
+ name = "\improper NSS Aurora I"
+ icon_state = "green"
+
/area/derelict/hallway/secondary
name = "\improper Derelict Secondary Hallway"
icon_state = "hallS"
@@ -1869,20 +1876,14 @@ area/space/atmosalert()
name = "Construction Site Teleporter"
icon_state = "yellow"
-
-//area/constructionsite
-// name = "\improper Construction Site Shuttle"
-
-//area/constructionsite
-// name = "\improper Construction Site Shuttle"
-
-
//Construction
/area/construction
name = "\improper Engineering Construction Area"
icon_state = "yellow"
no_light_control = 1
+ base_turf = /turf/space
+ station_area = 1
/area/construction/supplyshuttle
name = "\improper Supply Shuttle"
@@ -1926,6 +1927,9 @@ area/space/atmosalert()
name = "Emergency Storage"
icon_state = "storage"
+/area/turret_protected
+ station_area = 1
+
/area/turret_protected/ai_upload
name = "\improper AI Upload Chamber"
icon_state = "ai_upload"
@@ -2017,9 +2021,10 @@ area/space/atmosalert()
// Telecommunications Satellite
-/area/tcommsat/
+/area/tcommsat
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
no_light_control = 1
+ station_area = 1
/area/tcommsat/entrance
name = "\improper Telecoms Teleporter"
@@ -2056,161 +2061,12 @@ area/space/atmosalert()
/area/tcommsat/lounge
name = "\improper Telecommunications Satellite Lounge"
icon_state = "tcomsatlounge"
+ base_turf = /turf/space
/area/tcommsat/powercontrol
name = "\improper Telecommunications Power Control"
icon_state = "tcomsatwest"
-
-// Away Missions
-/area/awaymission
- name = "\improper Strange Location"
- icon_state = "away"
- no_light_control = 1
-
-/area/awaymission/example
- name = "\improper Strange Station"
- icon_state = "away"
-
-/area/awaymission/wwmines
- name = "\improper Wild West Mines"
- icon_state = "away1"
- luminosity = 1
- requires_power = 0
-
-/area/awaymission/wwgov
- name = "\improper Wild West Mansion"
- icon_state = "away2"
- luminosity = 1
- requires_power = 0
-
-/area/awaymission/wwrefine
- name = "\improper Wild West Refinery"
- icon_state = "away3"
- luminosity = 1
- requires_power = 0
-
-/area/awaymission/wwvault
- name = "\improper Wild West Vault"
- icon_state = "away3"
- luminosity = 0
-
-/area/awaymission/wwvaultdoors
- name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power
- icon_state = "away2"
- requires_power = 0
- luminosity = 0
-
-/area/awaymission/desert
- name = "Mars"
- icon_state = "away"
-
-/area/awaymission/BMPship1
- name = "\improper Aft Block"
- icon_state = "away1"
-
-/area/awaymission/BMPship2
- name = "\improper Midship Block"
- icon_state = "away2"
-
-/area/awaymission/BMPship3
- name = "\improper Fore Block"
- icon_state = "away3"
-
-/area/awaymission/spacebattle
- name = "\improper Space Battle"
- icon_state = "away"
- requires_power = 0
-
-/area/awaymission/spacebattle/cruiser
- name = "\improper Nanotrasen Cruiser"
-
-/area/awaymission/spacebattle/syndicate1
- name = "\improper Syndicate Assault Ship 1"
-
-/area/awaymission/spacebattle/syndicate2
- name = "\improper Syndicate Assault Ship 2"
-
-/area/awaymission/spacebattle/syndicate3
- name = "\improper Syndicate Assault Ship 3"
-
-/area/awaymission/spacebattle/syndicate4
- name = "\improper Syndicate War Sphere 1"
-
-/area/awaymission/spacebattle/syndicate5
- name = "\improper Syndicate War Sphere 2"
-
-/area/awaymission/spacebattle/syndicate6
- name = "\improper Syndicate War Sphere 3"
-
-/area/awaymission/spacebattle/syndicate7
- name = "\improper Syndicate Fighter"
-
-/area/awaymission/spacebattle/secret
- name = "\improper Hidden Chamber"
-
-/area/awaymission/listeningpost
- name = "\improper Listening Post"
- icon_state = "away"
- requires_power = 0
-
-/area/awaymission/beach
- name = "Beach"
- icon_state = "null"
- luminosity = 1
- dynamic_lighting = 0
- requires_power = 0
- ambience = list()
- var/sound/mysound = null
-
- New()
- ..()
- var/sound/S = new/sound()
- mysound = S
- S.file = 'sound/ambience/shore.ogg'
- S.repeat = 1
- S.wait = 0
- S.channel = 123
- S.volume = 100
- S.priority = 255
- S.status = SOUND_UPDATE
- process()
-
- Entered(atom/movable/Obj,atom/OldLoc)
- if(ismob(Obj))
- if(Obj:client)
- mysound.status = SOUND_UPDATE
- Obj << mysound
- return
-
- Exited(atom/movable/Obj)
- if(ismob(Obj))
- if(Obj:client)
- mysound.status = SOUND_PAUSED | SOUND_UPDATE
- Obj << mysound
-
- proc/process()
- set background = 1
-
- var/sound/S = null
- var/sound_delay = 0
- if(prob(25))
- S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100)
- sound_delay = rand(0, 50)
-
- for(var/mob/living/carbon/human/H in src)
- if(H.s_tone > -55)
- H.s_tone--
- H.update_body()
- if(H.client)
- mysound.status = SOUND_UPDATE
- H << mysound
- if(S)
- spawn(sound_delay)
- H << S
-
- spawn(60) .()
-
/////////////////////////////////////////////////////////////////////
/*
Lists of areas to be used with is_type_in_list.
@@ -2218,63 +2074,10 @@ area/space/atmosalert()
*/
// CENTCOM
-var/list/centcom_areas = list (
- /area/centcom,
- /area/shuttle/escape/centcom,
- /area/shuttle/escape_pod1/centcom,
- /area/shuttle/escape_pod2/centcom,
- /area/shuttle/escape_pod3/centcom,
- /area/shuttle/escape_pod5/centcom,
- /area/shuttle/transport1/centcom,
- /area/shuttle/administration/centcom,
- /area/shuttle/specops/centcom
-)
+var/list/centcom_areas = list ()
//SPACE STATION 13
-var/list/the_station_areas = list (
- /area/shuttle/arrival,
- /area/shuttle/escape/station,
- /area/shuttle/escape_pod1/station,
- /area/shuttle/escape_pod2/station,
- /area/shuttle/escape_pod3/station,
- /area/shuttle/escape_pod5/station,
- /area/shuttle/mining/station,
- /area/shuttle/transport1/station,
- // /area/shuttle/transport2/station,
- /area/shuttle/prison/station,
- /area/shuttle/administration/station,
- /area/shuttle/specops/station,
- /area/maintenance,
- /area/hallway,
- /area/bridge,
- /area/crew_quarters,
- /area/holodeck,
- /area/mint,
- /area/library,
- /area/chapel,
- /area/lawoffice,
- /area/engineering,
- /area/solar,
- /area/assembly,
- /area/teleporter,
- /area/medical,
- /area/security,
- /area/quartermaster,
- /area/janitor,
- /area/hydroponics,
- /area/rnd,
- /area/storage,
- /area/construction,
- /area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0,
- /area/ai_monitored/storage/secure,
- /area/ai_monitored/storage/emergency,
- /area/turret_protected/ai_upload, //do not try to simplify to "/area/turret_protected" --rastaf0,
- /area/turret_protected/ai_upload_foyer,
- /area/turret_protected/ai
-)
-
-
-
+var/list/the_station_areas = list ()
/area/beach
name = "Keelin's private beach"
@@ -2282,54 +2085,54 @@ var/list/the_station_areas = list (
luminosity = 1
dynamic_lighting = 0
requires_power = 0
- var/sound/mysound = null
+// var/sound/mysound = null
no_light_control = 1
+ var/iter = 0
- New()
- ..()
- var/sound/S = new/sound()
- mysound = S
- S.file = 'sound/ambience/shore.ogg'
- S.repeat = 1
- S.wait = 0
- S.channel = 123
- S.volume = 100
- S.priority = 255
- S.status = SOUND_UPDATE
- process()
+/* //todo: make this don't suck
+/area/beach/New()
+ ..()
+ var/sound/S = new/sound()
+ mysound = S
+ S.file = 'sound/ambience/shore.ogg'
+ S.repeat = 1
+ S.wait = 0
+ S.channel = 123
+ S.volume = 100
+ S.priority = 255
+ S.status = SOUND_UPDATE
+ process()
- Entered(atom/movable/Obj,atom/OldLoc)
- if(ismob(Obj))
- if(Obj:client)
- mysound.status = SOUND_UPDATE
- Obj << mysound
- return
+/area/beach/Entered(atom/movable/Obj,atom/OldLoc)
+ if(ismob(Obj))
+ var/mob/M = Obj
+ if(M.client)
+ mysound.status = SOUND_UPDATE
+ sound_to(M, mysound)
- Exited(atom/movable/Obj)
- if(ismob(Obj))
- if(Obj:client)
- mysound.status = SOUND_PAUSED | SOUND_UPDATE
- Obj << mysound
+/area/beach/Exited(atom/movable/Obj)
+ if(ismob(Obj))
+ var/mob/M = Obj
+ if(M.client)
+ mysound.status = SOUND_PAUSED | SOUND_UPDATE
+ sound_to(M, mysound)
- proc/process()
- set background = 1
+/area/beach/proc/process()
+ set background = 1
- var/sound/S = null
- var/sound_delay = 0
- if(prob(25))
- S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100)
- sound_delay = rand(0, 50)
+ var/sound/S = null
+ var/sound_delay = 0
+ if(prob(25))
+ S = sound(file=pick('sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag3.ogg'), volume=100)
+ sound_delay = rand(0, 50)
- for(var/mob/living/carbon/human/H in src)
-// if(H.s_tone > -55) //ugh...nice/novel idea but please no.
-// H.s_tone--
-// H.update_body()
- if(H.client)
- mysound.status = SOUND_UPDATE
- H << mysound
- if(S)
- spawn(sound_delay)
- H << S
-
- spawn(60) .()
+ for(var/mob/living/carbon/human/H in src)
+ if(H.client)
+ mysound.status = SOUND_UPDATE
+ to_chat(H, mysound)
+ if(S)
+ spawn(sound_delay)
+ sound_to(H, S)
+ spawn(60) .()
+*/
diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm
index 84f2c8eb4ea..c8458388d7c 100644
--- a/code/game/area/ai_monitored.dm
+++ b/code/game/area/ai_monitored.dm
@@ -1,18 +1,20 @@
/area/ai_monitored
name = "AI Monitored Area"
var/obj/machinery/camera/motioncamera = null
+ station_area = 1
-
-/area/ai_monitored/New()
- ..()
+/area/ai_monitored/LateInitialize()
// locate and store the motioncamera
- spawn (20) // spawn on a delay to let turfs/objs load
- for (var/obj/machinery/camera/M in src)
- if(M.isMotion())
- motioncamera = M
- M.area_motion = src
- return
- return
+ for (var/obj/machinery/camera/M in src)
+ if(M.isMotion())
+ motioncamera = M
+ M.area_motion = src
+ return
+
+/area/ai_monitored/Initialize(mapload)
+ . = ..()
+ if (mapload)
+ return INITIALIZE_HINT_LATELOAD
/area/ai_monitored/Entered(atom/movable/O)
..()
@@ -22,5 +24,3 @@
/area/ai_monitored/Exited(atom/movable/O)
if (ismob(O) && motioncamera)
motioncamera.lostTarget(O)
-
-
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index cd2e7ef32f9..4cd19f34dfb 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -6,13 +6,13 @@
/area
var/global/global_uid = 0
var/uid
- blend_mode = BLEND_MULTIPLY
-/area/New()
+/area/Initialize(mapload)
icon_state = "white"
layer = 10
uid = ++global_uid
all_areas += src
+ blend_mode = BLEND_MULTIPLY
if(!requires_power)
power_light = 0
@@ -23,24 +23,36 @@
luminosity = 0
else
luminosity = 1
+ if(centcomm_area)
+ centcom_areas |= src
+ if(station_area)
+ the_station_areas |= src
- ..()
-/area/proc/initialize()
if(!requires_power || !apc)
power_light = 0
power_equip = 0
power_environ = 0
- power_change() // all machines set to current power level, also updates lighting icon
+
+ if (!mapload)
+ power_change() // all machines set to current power level, also updates lighting icon
+
+ blend_mode = BLEND_MULTIPLY
+
+ . = ..()
/area/proc/get_contents()
return contents
/area/proc/get_cameras()
- var/list/cameras = list()
- for (var/obj/machinery/camera/C in src)
- cameras += C
- return cameras
+ . = list()
+ for (var/thing in SSmachinery.all_cameras)
+ var/obj/machinery/camera/C = thing
+ if (!isturf(C.loc))
+ continue
+
+ if (C.loc.loc == src)
+ . += C
/area/proc/atmosalert(danger_level, var/alarm_source)
if (danger_level == 0)
diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm
index c5e8b784644..be8ed0401dc 100644
--- a/code/game/area/asteroid_areas.dm
+++ b/code/game/area/asteroid_areas.dm
@@ -14,123 +14,126 @@
icon_state = "unexplored"
-// OUTPOSTS
+//S
-// Small outposts
+// Smalls
/area/outpost/mining_north
- name = "North Mining Outpost"
+ name = "North Mining"
icon_state = "outpost_mine_north"
/area/outpost/mining_west
- name = "West Mining Outpost"
+ name = "West Mining"
icon_state = "outpost_mine_west"
/area/outpost/abandoned
- name = "Abandoned Outpost"
+ name = "Abandoned"
icon_state = "dark"
-// Main mining outpost
+// Main mining
/area/outpost/mining_main
icon_state = "outpost_mine_main"
+ station_area = 1
/area/outpost/mining_main/dorms
- name = "Mining Outpost Dormitory"
+ name = "Mining Dormitory"
/area/outpost/mining_main/medbay
- name = "Mining Outpost Medical"
+ name = "Mining Medical"
/area/outpost/mining_main/maintenance
- name = "Mining Outpost Maintenance"
+ name = "Mining Maintenance"
/area/outpost/mining_main/west_hall
- name = "Mining Outpost West Hallway"
+ name = "Mining West Hallway"
/area/outpost/mining_main/east_hall
- name = "Mining Outpost East Hallway"
+ name = "Mining East Hallway"
/area/outpost/mining_main/eva
- name = "Mining Outpost EVA storage"
+ name = "Mining EVA storage"
/area/outpost/mining_main/refinery
- name = "Mining Outpost Refinery"
+ name = "Mining Refinery"
-// Engineering Outpost
+// Engineering
/area/outpost/engineering
icon_state = "outpost_engine"
+ station_area = 1
/area/outpost/engineering/hallway
- name = "Engineering Outpost Hallway"
+ name = "Engineering Sublevel Hallway"
/area/outpost/engineering/atmospherics
- name = "Engineering Outpost Atmospherics"
+ name = "Engineering Sublevel Atmospherics"
/area/outpost/engineering/power
- name = "Engineering Outpost Power Distribution"
+ name = "Engineering Sublevel Power Distribution"
/area/outpost/engineering/telecomms
- name = "Engineering Outpost Telecommunications"
+ name = "Engineering Sublevel Telecommunications"
/area/outpost/engineering/storage
- name = "Engineering Outpost Storage"
+ name = "Engineering Sublevel Storage"
/area/outpost/engineering/meeting
- name = "Engineering Outpost Meeting Room"
+ name = "Engineering Sublevel Meeting Room"
-// Research Outpost
+// Research
/area/outpost/research
icon_state = "outpost_research"
+ station_area = 1
/area/outpost/research/hallway
- name = "Research Outpost Hallway"
+ name = "Research Sublevel Hallway"
/area/outpost/research/dock
- name = "Research Outpost Shuttle Dock"
+ name = "Research Shuttle Dock"
/area/outpost/research/eva
- name = "Research Outpost EVA"
+ name = "Research Sublevel EVA"
/area/outpost/research/analysis
- name = "Research Outpost Sample Analysis"
+ name = "Research Sample Analysis"
/area/outpost/research/chemistry
- name = "Research Outpost Chemistry"
+ name = "Research Chemistry"
/area/outpost/research/medical
- name = "Research Outpost Medical"
+ name = "Research Medical"
/area/outpost/research/power
- name = "Research Outpost Maintenance"
+ name = "Research Maintenance"
/area/outpost/research/isolation_a
- name = "Research Outpost Isolation A"
+ name = "Research Isolation A"
/area/outpost/research/isolation_b
- name = "Research Outpost Isolation B"
+ name = "Research Isolation B"
/area/outpost/research/isolation_c
- name = "Research Outpost Isolation C"
+ name = "Research Isolation C"
/area/outpost/research/isolation_monitoring
- name = "Research Outpost Isolation Monitoring"
+ name = "Research Isolation Monitoring"
/area/outpost/research/lab
- name = "Research Outpost Laboratory"
+ name = "Research Sublevel Laboratory"
/area/outpost/research/emergency_storage
- name = "Research Outpost Emergency Storage"
+ name = "Research Emergency Storage"
/area/outpost/research/anomaly_storage
- name = "Research Outpost Anomalous Storage"
+ name = "Research Anomalous Storage"
/area/outpost/research/anomaly_analysis
- name = "Research Outpost Anomaly Analysis"
+ name = "Research Anomaly Analysis"
/area/outpost/research/kitchen
- name = "Research Outpost Kitchen"
+ name = "Research Kitchen"
/area/outpost/research/disposal
- name = "Research Outpost Waste Disposal"
\ No newline at end of file
+ name = "Research Waste Disposal"
\ No newline at end of file
diff --git a/code/game/area/aurora_lift_areas.dm b/code/game/area/aurora_lift_areas.dm
new file mode 100644
index 00000000000..1474fae054e
--- /dev/null
+++ b/code/game/area/aurora_lift_areas.dm
@@ -0,0 +1,107 @@
+// Using /area/shuttle for lifts as there are checks around the code that is useful for them
+// Rather not repete code over twice
+//
+// Maybe change to ?
+// /area/movable_zone/shuttle
+// /area/movable_zone/lift
+//
+
+/area/shuttle/medical
+ station_area = 1
+
+/area/shuttle/medical/main
+ name = "\improper Medical Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/medical/lower
+ name = "\improper Medical Lift Lower Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/science
+ station_area = 1
+
+/area/shuttle/science/main
+ name = "\improper Science Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/science/lower
+ name = "\improper Science Lift Lower Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/engineering
+ station_area = 1
+
+/area/shuttle/engineering/main
+ name = "\improper Engineering Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/engineering/lower
+ name = "\improper Engineering Lift Lower Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/ai
+ station_area = 1
+
+/area/shuttle/ai/main
+ name = "\improper AI Core Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/ai/lower
+ name = "\improper AI Core Lift Lower Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/vault
+ station_area = 1
+
+/area/shuttle/vault/main
+ name = "\improper Vault Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/vault/lower
+ name = "\improper Vault Lift Lower Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/civilian
+ station_area = 1
+
+/area/shuttle/civilian/main
+ name = "\improper Civilian Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/civilian/transit
+ name = "\improper Civilian Lift Shaft"
+ icon_state = "shuttle"
+
+/area/shuttle/civilian/upper
+ name = "\improper Civilian Lift Top Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/cargo
+ station_area = 1
+
+/area/shuttle/cargo/main
+ name = "\improper Cargo Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/cargo/transit
+ name = "\improper Cargo Lift Shaft"
+ icon_state = "shuttle"
+
+/area/shuttle/cargo/upper
+ name = "\improper Cargo Lift Top Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/command
+ station_area = 1
+
+/area/shuttle/command/main
+ name = "\improper Command Lift Main Floor"
+ icon_state = "shuttle"
+
+/area/shuttle/command/transit
+ name = "\improper Command Lift Shaft"
+ icon_state = "shuttle"
+
+/area/shuttle/command/upper
+ name = "\improper Command Lift Top Floor"
+ icon_state = "shuttle"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 44751295b56..09011735756 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -6,7 +6,7 @@
var/list/fingerprintshidden
var/fingerprintslast = null
var/list/blood_DNA
- var/list/other_DNA = list()
+ var/list/other_DNA
var/other_DNA_type = null
var/was_bloodied
var/blood_color
@@ -16,7 +16,7 @@
var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom.
var/simulated = 1 //filter for actions - used by lighting overlays
var/fluorescent // Shows up under a UV light.
- var/list/modifiers = list()
+
///Chemistry.
var/datum/reagents/reagents = null
@@ -27,10 +27,6 @@
//Detective Work, used for the duplicate data points kept in the scanners
var/list/original_atom
-
-
-
-
/atom/proc/reveal_blood()
return
@@ -124,77 +120,6 @@
return found
-
-
-/*
-Beam code by Gunbuddy
-
-Beam() proc will only allow one beam to come from a source at a time. Attempting to call it more than
-once at a time per source will cause graphical errors.
-Also, the icon used for the beam will have to be vertical and 32x32.
-The math involved assumes that the icon is vertical to begin with so unless you want to adjust the math,
-its easier to just keep the beam vertical.
-*/
-/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10)
- //BeamTarget represents the target for the beam, basically just means the other end.
- //Time is the duration to draw the beam
- //Icon is obviously which icon to use for the beam, default is beam.dmi
- //Icon_state is what icon state is used. Default is b_beam which is a blue beam.
- //Maxdistance is the longest range the beam will persist before it gives up.
- var/EndTime=world.time+time
- while(BeamTarget&&world.timelength)
- var/icon/II=new(icon,icon_state)
- II.DrawBox(null,1,(length-N),32,32)
- II.Turn(Angle)
- X.icon=II
- else X.icon=I
- var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32)
- var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32)
- if(DX==0) Pixel_x=0
- if(DY==0) Pixel_y=0
- if(Pixel_x>32)
- for(var/a=0, a<=Pixel_x,a+=32)
- X.x++
- Pixel_x-=32
- if(Pixel_x<-32)
- for(var/a=0, a>=Pixel_x,a-=32)
- X.x--
- Pixel_x+=32
- if(Pixel_y>32)
- for(var/a=0, a<=Pixel_y,a+=32)
- X.y++
- Pixel_y-=32
- if(Pixel_y<-32)
- for(var/a=0, a>=Pixel_y,a-=32)
- X.y--
- Pixel_y+=32
- X.pixel_x=Pixel_x
- X.pixel_y=Pixel_y
- sleep(3) //Changing this to a lower value will cause the beam to follow more smoothly with movement, but it will also be more laggy.
- //I've found that 3 ticks provided a nice balance for my use.
- for(var/obj/effect/overlay/beam/O in orange(10,src)) if(O.BeamSource==src) qdel(O)
-
-
//All atoms
/atom/proc/examine(mob/user, var/distance = -1, var/infix = "", var/suffix = "")
//This reformat names to get a/an properly working on item descriptions when they are bloody
diff --git a/code/game/atoms_init.dm b/code/game/atoms_init.dm
new file mode 100644
index 00000000000..2791ec0c061
--- /dev/null
+++ b/code/game/atoms_init.dm
@@ -0,0 +1,59 @@
+/atom
+ var/initialized = FALSE
+
+/atom/New(loc, ...)
+ // For the (currently unused) DMM Suite.
+ if(_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
+ _preloader.load(src)
+
+ //. = ..() //uncomment if you are dumb enough to add a /datum/New() proc
+
+ var/do_initialize = SSatoms.initialized
+ if(do_initialize > INITIALIZATION_INSSATOMS)
+ args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
+ if(SSatoms.InitAtom(src, args))
+ //we were deleted
+ return
+
+ var/list/created = SSatoms.created_atoms
+ if(created)
+ created += src
+
+/atom/proc/Initialize(mapload, ...)
+ if(initialized)
+ crash_with("Warning: [src]([type]) initialized multiple times!")
+ initialized = TRUE
+
+ if (light_power && light_range)
+ update_light()
+
+ if (opacity && isturf(loc))
+ var/turf/T = loc
+ T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways.
+
+ return INITIALIZE_HINT_NORMAL
+
+//called if Initialize returns INITIALIZE_HINT_LATELOAD
+//This version shouldn't be called
+/atom/proc/LateInitialize()
+ var/static/list/warned_types = list()
+ if(!warned_types[type])
+ WARNING("Old style LateInitialize behaviour detected in [type]!")
+ warned_types[type] = TRUE
+ Initialize(FALSE)
+
+/atom/Destroy(force = FALSE)
+ . = ..()
+ if (reagents)
+ QDEL_NULL(reagents)
+
+ LAZYCLEARLIST(our_overlays)
+ LAZYCLEARLIST(priority_overlays)
+
+ QDEL_NULL(light)
+
+ if (orbiters)
+ for (var/thing in orbiters)
+ var/datum/orbit/O = thing
+ if (O.orbiter)
+ O.orbiter.stop_orbit()
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 097479b0ab9..636c8d05e8e 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -16,43 +16,26 @@
var/item_state = null // Base name of the image used for when the item is worn. Suffixes are added to this.
//Also used on holdable mobs for the same info related to their held version
- var/auto_init = 1
+ var/can_hold_mob = FALSE
-/atom/movable/New()
- ..()
- if (objects_initialized)
- if (auto_init)
- initialize()
- else
- objects_init_list += src
-
-/atom/movable/Del()
- if(isnull(gcDestroyed) && loc)
+// We don't really need this, and apparently defining it slows down GC.
+/*/atom/movable/Del()
+ if(!QDELING(src) && loc)
testing("GC: -- [type] was deleted via del() rather than qdel() --")
crash_with("GC: -- [type] was deleted via del() rather than qdel() --") // stick a stack trace in the runtime logs
-// else if(isnull(gcDestroyed))
-// testing("GC: [type] was deleted via GC without qdel()") //Not really a huge issue but from now on, please qdel()
-// else
-// testing("GC: [type] was deleted via GC with qdel()")
- ..()
+ ..()*/
/atom/movable/Destroy()
. = ..()
- if(reagents)
- qdel(reagents)
- reagents = null
for(var/atom/movable/AM in contents)
qdel(AM)
loc = null
+ screen_loc = null
if (pulledby)
if (pulledby.pulling == src)
pulledby.pulling = null
pulledby = null
-/atom/movable/proc/initialize()
- if(!isnull(gcDestroyed))
- crash_with("GC: -- [type] had initialize() called after qdel() --")
-
/atom/movable/Bump(var/atom/A, yes)
if(src.throwing)
src.throw_impact(A)
@@ -258,15 +241,15 @@
y = TRANSITIONEDGE + 1
x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
- if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear
- var/datum/game_mode/nuclear/G = ticker.mode
+ if(istype(SSticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear
+ var/datum/game_mode/nuclear/G = SSticker.mode
G.check_nuke_disks()
spawn(0)
if(loc) loc.Entered(src)
//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there.
-var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "6" = 60)
+var/list/accessible_z_levels = list("8" = 5, "9" = 10, "7" = 15, "2" = 60)
//by default, transition randomly to another zlevel
/atom/movable/proc/get_transit_zlevel()
@@ -281,13 +264,13 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "6" = 60)
/atom/movable/proc/update_client_hook(atom/destination)
if(locate(/mob) in src)
- for(var/client/C in parallax_on_clients)
+ for(var/client/C in SSparallax.parallax_on_clients)
if((get_turf(C.eye) == destination) && (C.mob.hud_used))
C.mob.hud_used.update_parallax_values()
/mob/update_client_hook(atom/destination)
if(locate(/mob) in src)
- for(var/client/C in parallax_on_clients)
+ for(var/client/C in SSparallax.parallax_on_clients)
if((get_turf(C.eye) == destination) && (C.mob.hud_used))
C.mob.hud_used.update_parallax_values()
else if(client && hud_used)
diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm
index 5872976f53f..23257178aca 100644
--- a/code/game/base_turf.dm
+++ b/code/game/base_turf.dm
@@ -1,6 +1,14 @@
// Returns the lowest turf available on a given Z-level
var/global/list/base_turf_by_z = list(
- "5" = /turf/simulated/floor/asteroid // Moonbase.
+ "1" = /turf/space,
+ "2" = /turf/space,
+ "3" = /turf/simulated/floor/asteroid,
+ "4" = /turf/simulated/floor/asteroid,
+ "5" = /turf/simulated/floor/asteroid,
+ "6" = /turf/simulated/open,
+ "7" = /turf/space,
+ "8" = /turf/space,
+ "9" = /turf/space
)
proc/get_base_turf(var/z)
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 06f6dd0d7a7..329dca17d7b 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -52,8 +52,8 @@
var/obj/item/weapon/reagent_containers/glass/beaker = null
var/opened = 0
-/obj/machinery/dna_scannernew/New()
- ..()
+/obj/machinery/dna_scannernew/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/clonescanner(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
diff --git a/code/game/gamemodes/changeling/changeling_items.dm b/code/game/gamemodes/changeling/changeling_items.dm
index cf27d5301ba..dd34ed6af25 100644
--- a/code/game/gamemodes/changeling/changeling_items.dm
+++ b/code/game/gamemodes/changeling/changeling_items.dm
@@ -18,18 +18,19 @@
var/mob/living/creator
/obj/item/weapon/melee/arm_blade/New()
- processing_objects |= src
+ ..()
+ START_PROCESSING(SSprocessing, src)
/obj/item/weapon/melee/arm_blade/Destroy()
- processing_objects -= src
- ..()
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
/obj/item/weapon/melee/arm_blade/dropped()
visible_message("With a sickening crunch, [user] reforms their arm blade into an arm! ",
"We assimilate the weapon back into our body. ",
"You hear organic matter ripping and tearing! ")
playsound(loc, 'sound/effects/blobattack.ogg', 30, 1)
- spawn(1) if(src) qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/melee/arm_blade/process()
if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src))
@@ -44,7 +45,7 @@
host.pinned -= src
host.embedded -= src
host.drop_from_inventory(src)
- spawn(1) if(src) qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/shield/riot/changeling
name = "shield-like mass"
@@ -62,18 +63,19 @@
var/mob/living/creator
/obj/item/weapon/shield/riot/changeling/New()
- processing_objects |= src
+ ..()
+ START_PROCESSING(SSprocessing, src)
/obj/item/weapon/shield/riot/changeling/Destroy()
- processing_objects -= src
- ..()
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
/obj/item/weapon/shield/riot/changeling/dropped()
visible_message("With a sickening crunch, [user] reforms their arm blade into an arm! ",
"We assimilate the weapon back into our body. ",
"You hear organic matter ripping and tearing! ")
playsound(loc, 'sound/effects/blobattack.ogg', 30, 1)
- spawn(1) if(src) qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/shield/riot/changeling/process()
if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src))
@@ -88,4 +90,4 @@
host.pinned -= src
host.embedded -= src
host.drop_from_inventory(src)
- spawn(1) if(src) qdel(src)
\ No newline at end of file
+ QDEL_IN(src, 1)
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index 8d64ad8498f..a12ff6b5311 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -553,18 +553,18 @@
/obj/structure/cult/pylon/update_icon()
- overlays.Cut()
+ cut_overlays()
if (pylonmode == 2)
anchored = 1
if (empowered > 0)
- overlays += "crystal_overcharge"
+ add_overlay("crystal_overcharge")
set_light(7, 3, l_color = "#a160bf")
else
set_light(6, 3, l_color = "#3e0000")
- overlays += "crystal_turret"
+ add_overlay("crystal_turret")
else if (!isbroken)
set_light(5, 2, l_color = "#3e0000")
- overlays += "crystal_idle"
+ add_overlay("crystal_idle")
if (pylonmode == 1)
anchored = 1
else
@@ -633,10 +633,12 @@
return
/obj/effect/gateway/active/New()
- spawn(rand(30,60) SECONDS)
- var/t = pick(spawnable)
- new t(src.loc)
- qdel(src)
+ addtimer(CALLBACK(src, .proc/do_spawn), rand(30, 60) SECONDS)
+
+/obj/effect/gateway/active/proc/do_spawn()
+ var/thing = pick(spawnable)
+ new thing(src.loc)
+ qdel(src)
/obj/effect/gateway/active/Crossed(var/atom/A)
if(!istype(A, /mob/living))
diff --git a/code/game/gamemodes/cult/hell_universe.dm b/code/game/gamemodes/cult/hell_universe.dm
index 3dcc852da4e..bece6229676 100644
--- a/code/game/gamemodes/cult/hell_universe.dm
+++ b/code/game/gamemodes/cult/hell_universe.dm
@@ -42,7 +42,6 @@ In short:
// Apply changes when entering state
/datum/universal_state/hell/OnEnter()
set background = 1
- garbage_collector.garbage_collect = 0
escape_list = get_area_turfs(locate(/area/hallway/secondary/exit))
@@ -56,7 +55,6 @@ In short:
runedec += 9000 //basically removing the rune cap
-
/datum/universal_state/hell/proc/AreaSet()
for(var/area/A in all_areas)
if(!istype(A,/area) || istype(A, /area/space))
@@ -67,16 +65,18 @@ In short:
/datum/universal_state/hell/OverlayAndAmbientSet()
set waitfor = FALSE
- for(var/turf/T in turfs)
+ for(var/turf/T in world) // Expensive, but CHECK_TICK should prevent lag.
if(istype(T, /turf/space))
T.overlays += image(icon = T.icon, icon_state = "hell01")
else
- if(!T.holy && prob(1) && !(T.z in config.admin_levels))
- new /obj/effect/gateway/active/cult(T)
T.underlays += "hell01"
+
+ if (istype(T, /turf/simulated/floor) && !T.holy && prob(1))
+ new /obj/effect/gateway/active/cult(T)
+
CHECK_TICK
- for(var/datum/lighting_corner/C in global.all_lighting_corners)
+ for(var/datum/lighting_corner/C in SSlighting.lighting_corners)
if (!C.active)
continue
@@ -84,11 +84,6 @@ In short:
CHECK_TICK
/datum/universal_state/hell/proc/MiscSet()
- for(var/turf/simulated/floor/T in turfs)
- if(!T.holy && prob(1))
- new /obj/effect/gateway/active/cult(T)
- CHECK_TICK
-
for (var/obj/machinery/firealarm/alm in machines)
if (!(alm.stat & BROKEN))
alm.ex_act(2)
diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm
index 4a696a3da49..4ea576d2af1 100644
--- a/code/game/gamemodes/cult/narsie.dm
+++ b/code/game/gamemodes/cult/narsie.dm
@@ -22,7 +22,7 @@ var/global/list/narsie_list = list()
/obj/singularity/narsie/Destroy()
narsie_list.Remove(src)
- ..()
+ return ..()
/obj/singularity/narsie/large
name = "Nar-Sie"
@@ -142,6 +142,8 @@ var/global/list/narsie_list = list()
return 1
/obj/singularity/narsie/proc/narsiefloor(var/turf/T)//leaving "footprints"
+ if (QDELETED(T))
+ return
if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space)))
if(T.icon_state != "cult-narsie")
T.desc = "something that goes beyond your understanding went this way"
@@ -168,6 +170,7 @@ var/global/list/narsie_list = list()
old_narsie(A)
/obj/singularity/narsie/proc/new_narsie(const/atom/A)
+ CHECK_TICK
if (istype(A, /mob/) && (get_dist(A, src) <= 7))
var/mob/M = A
@@ -200,6 +203,8 @@ var/global/list/narsie_list = list()
if(!(A.singuloCanEat()))
return 0
+ CHECK_TICK
+
if (istype(A, /mob/living/))
var/mob/living/C2 = A
@@ -232,6 +237,8 @@ var/global/list/narsie_list = list()
if(!(A.singuloCanEat()))
return 0
+ CHECK_TICK
+
if (istype(A, /mob/living/))
var/mob/living/C2 = A
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index b173ecf824f..83435fdd572 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -81,7 +81,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
qdel(blood_image)
blood_image = null
rune_list.Remove(src)
- ..()
+ return ..()
examine(mob/user)
..()
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index fda06c032f5..c25de54ec15 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -642,7 +642,7 @@ var/list/sacrificed = list()
if(lamb.species.rarity_value > 3)
worth = 1
- if (ticker.mode.name == "Cult")
+ if (SSticker.mode.name == "Cult")
if(H.mind == cult.sacrifice_target)
if(cultsinrange.len >= 3)
sacrificed += H.mind
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
index 2f12370f586..44a5aa5d64e 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
@@ -6,60 +6,55 @@
icon = 'icons/turf/space.dmi'
icon_state = "bluespace"
- //luminosity = 5
- //l_color="#0066FF"
- layer = LIGHTING_LAYER+1
+ layer = LIGHTING_LAYER + 1
+ light_color = "#0066FF"
+ light_range = 2
+ light_power = 2
- var/spawned=0 // DIR mask
- var/next_check=0
+ var/spawned = 0 // DIR mask
+ var/next_check = 0
var/list/avail_dirs = list(NORTH,SOUTH,EAST,WEST)
-/turf/unsimulated/wall/supermatter/New()
- ..()
- processing_turfs.Add(src)
- next_check = world.time+5 SECONDS
+/turf/unsimulated/wall/supermatter/Initialize()
+ . = ..()
+ // Kick-start the timer chain.
+ addtimer(CALLBACK(src, .proc/tick), 5 SECONDS)
-/turf/unsimulated/wall/supermatter/Destroy()
- processing_turfs.Remove(src)
- ..()
-
-/turf/unsimulated/wall/supermatter/process()
- // Only check infrequently.
- if(next_check>world.time) return
-
- // No more available directions? Shut down process().
- if(avail_dirs.len==0)
- processing_objects.Remove(src)
- return 1
-
- // We're checking, reset the timer.
- next_check = world.time+5 SECONDS
+/turf/unsimulated/wall/supermatter/proc/tick()
+ // No more available directions? Bail.
+ if(avail_dirs.len == 0)
+ return
// Choose a direction.
var/pdir = pick(avail_dirs)
avail_dirs -= pdir
- var/turf/T=get_step(src,pdir)
+ var/turf/T = get_step(src, pdir)
// EXPAND
if(!istype(T,type))
// Do pretty fadeout animation for 1s.
new /obj/effect/overlay/bluespacify(T)
- spawn(10)
- // Nom.
- for(var/atom/movable/A in T)
- if(A)
- if(istype(A,/mob/living))
- qdel(A)
- else if(istype(A,/mob)) // Observers, AI cameras.
- continue
- else
- qdel(A)
- T.ChangeTurf(type)
+ addtimer(CALLBACK(src, .proc/after_tick, T), 10)
if((spawned & (NORTH|SOUTH|EAST|WEST)) == (NORTH|SOUTH|EAST|WEST))
- processing_turfs -= src
return
+ addtimer(CALLBACK(src, .proc/tick), 5 SECONDS)
+
+/turf/unsimulated/wall/supermatter/proc/after_tick(turf/T)
+ T.lighting_clear_overlay()
+ for(var/atom/movable/A in T)
+ if (A && A.simulated) // No eating lighting overlays.
+ if(istype(A, /mob/living))
+ qdel(A)
+ else if(istype(A, /mob)) // Observers, AI cameras.
+ continue
+ else
+ qdel(A)
+
+ CHECK_TICK
+ T.ChangeTurf(type)
+
/turf/unsimulated/wall/supermatter/attack_generic(mob/user as mob)
return attack_hand(user)
@@ -98,6 +93,9 @@
/turf/unsimulated/wall/supermatter/Bumped(atom/AM as mob|obj)
+ if (!AM.simulated)
+ return ..()
+
if(istype(AM, /mob/living))
AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash. ",\
"You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\" ",\
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
index fbea24d2d84..06210d5e9d4 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/universe.dm
@@ -14,10 +14,10 @@ var/global/universe_has_ended = 0
/datum/universal_state/supermatter_cascade/OnTurfChange(var/turf/T)
if(T.name == "space")
- T.overlays += image(icon = T.icon, icon_state = "end01")
+ T.add_overlay("end01")
T.underlays -= "end01"
else
- T.overlays -= image(icon = T.icon, icon_state = "end01")
+ T.cut_overlay("end01")
/datum/universal_state/supermatter_cascade/DecayTurf(var/turf/T)
if(istype(T,/turf/simulated/wall))
@@ -37,7 +37,7 @@ var/global/universe_has_ended = 0
// Apply changes when entering state
/datum/universal_state/supermatter_cascade/OnEnter()
set background = 1
- garbage_collector.garbage_collect = 0
+
world << "You are blinded by a brilliant flash of energy. "
world << sound('sound/effects/cascade.ogg')
@@ -60,8 +60,14 @@ var/global/universe_has_ended = 0
PlayerSet()
new /obj/singularity/narsie/large/exit(pick(endgame_exits))
- spawn(rand(30,60) SECONDS)
- var/txt = {"
+ var/time = rand(30, 60)
+ log_debug("universal_state/cascade: Announcing to world in [time] seconds.")
+ log_debug("universal_state/cascade: Ending universe in [(time SECONDS + 5 MINUTES)/10] seconds.")
+ addtimer(CALLBACK(src, .proc/announce_to_world), time SECONDS)
+ addtimer(CALLBACK(src, .proc/end_universe), time SECONDS + 5 MINUTES)
+
+/datum/universal_state/supermatter_cascade/proc/announce_to_world()
+ var/txt = {"
There's been a galaxy-wide electromagnetic pulse. All of our systems are heavily damaged and many personnel are dead or dying. We are seeing increasing indications of the universe itself beginning to unravel.
[station_name()], you are the only facility nearby a bluespace rift, which is near your research outpost. You are hereby directed to enter the rift using all means necessary, quite possibly as the last of your species alive.
@@ -71,18 +77,17 @@ You have five minutes before the universe collapses. Good l\[\[###!!!-
AUTOMATED ALERT: Link to [command_name()] lost.
The access requirements on the Asteroid Shuttles' consoles have now been revoked.
-"}
- priority_announcement.Announce(txt,"SUPERMATTER CASCADE DETECTED")
+ "}
+ priority_announcement.Announce(txt,"SUPERMATTER CASCADE DETECTED")
- for(var/obj/machinery/computer/shuttle_control/C in machines)
- if(istype(C, /obj/machinery/computer/shuttle_control/research) || istype(C, /obj/machinery/computer/shuttle_control/mining))
- C.req_access = list()
- C.req_one_access = list()
+ for(var/obj/machinery/computer/shuttle_control/C in machines)
+ if(istype(C, /obj/machinery/computer/shuttle_control/research) || istype(C, /obj/machinery/computer/shuttle_control/mining))
+ C.req_access = list()
+ C.req_one_access = list()
- spawn(5 MINUTES)
- ticker.station_explosion_cinematic(0,null) // TODO: Custom cinematic
- universe_has_ended = 1
- return
+/datum/universal_state/supermatter_cascade/proc/end_universe()
+ SSticker.station_explosion_cinematic(0,null) // TODO: Custom cinematic
+ universe_has_ended = 1
/datum/universal_state/supermatter_cascade/proc/AreaSet()
for(var/area/A in all_areas)
@@ -94,15 +99,15 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
/datum/universal_state/supermatter_cascade/OverlayAndAmbientSet()
set waitfor = FALSE
- for(var/turf/T in turfs)
+ for(var/turf/T in world)
if(istype(T, /turf/space))
- T.overlays += image(icon = T.icon, icon_state = "end01")
+ T.add_overlay("end01")
else
if (!(T.z in config.admin_levels))
T.underlays += "end01"
CHECK_TICK
- for(var/datum/lighting_corner/C in global.all_lighting_corners)
+ for(var/datum/lighting_corner/C in SSlighting.lighting_corners)
if (!C.active)
continue
diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm
index d657b50d111..df7c87c1d9d 100644
--- a/code/game/gamemodes/epidemic/epidemic.dm
+++ b/code/game/gamemodes/epidemic/epidemic.dm
@@ -81,8 +81,6 @@
world << "There aren't enough players for this mode! "
world << "Rebooting world in 5 seconds. "
- if(blackbox)
- blackbox.save_all_data_to_sql()
sleep(50)
world.Reboot()
@@ -132,7 +130,7 @@
checkwin_counter++
if(checkwin_counter >= 20)
if(!finished)
- ticker.mode.check_win()
+ SSticker.mode.check_win()
checkwin_counter = 0
return 0
@@ -165,7 +163,7 @@
///Handle crew failure(station explodes)///
///////////////////////////////////////////
/datum/game_mode/epidemic/proc/crew_lose()
- ticker.mode:explosion_in_progress = 1
+ SSticker.mode:explosion_in_progress = 1
for(var/mob/M in world)
if(M.client)
M << 'sound/machines/Alarm.ogg'
@@ -175,11 +173,10 @@
world << "[i].. "
sleep(10)
enter_allowed = 0
- if(ticker)
- ticker.station_explosion_cinematic(0,null)
- if(ticker.mode)
- ticker.mode:station_was_nuked = 1
- ticker.mode:explosion_in_progress = 0
+ SSticker.station_explosion_cinematic(0,null)
+ if(SSticker.mode)
+ SSticker.mode:station_was_nuked = 1
+ SSticker.mode:explosion_in_progress = 0
finished = 2
return
diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm
index 787f28a7ee2..af4d72d03d5 100644
--- a/code/game/gamemodes/events/holidays/Christmas.dm
+++ b/code/game/gamemodes/events/holidays/Christmas.dm
@@ -23,9 +23,6 @@
desc = "Directions for use: Requires two people, one to pull each end."
var/cracked = 0
-/obj/item/weapon/toy/xmas_cracker/New()
- ..()
-
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user, var/target_zone)
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
target.visible_message("[user] and [target] pop \an [src]! *pop* ", "You pull \an [src] with [target]! *pop* ", "You hear a *pop*. ")
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index c093642416d..6a06646b9a6 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -106,9 +106,9 @@ var/global/list/additional_antag_types = list()
return
var/datum/antagonist/antag = all_antag_types[choice]
if(antag)
- if(!islist(ticker.mode.antag_templates))
- ticker.mode.antag_templates = list()
- ticker.mode.antag_templates |= antag
+ if(!islist(SSticker.mode.antag_templates))
+ SSticker.mode.antag_templates = list()
+ SSticker.mode.antag_templates |= antag
message_admins("Admin [key_name_admin(usr)] added [antag.role_text] template to game mode.")
// I am very sure there's a better way to do this, but I'm not sure what it might be. ~Z
@@ -217,8 +217,8 @@ var/global/list/additional_antag_types = list()
emergency_shuttle.auto_recall = 1
feedback_set_details("round_start","[time2text(world.realtime)]")
- if(ticker && ticker.mode)
- feedback_set_details("game_mode","[ticker.mode]")
+ if(SSticker.mode)
+ feedback_set_details("game_mode","[SSticker.mode]")
feedback_set_details("server_ip","[world.internet_address]:[world.port]")
return 1
@@ -444,7 +444,7 @@ var/global/list/additional_antag_types = list()
return candidates
// If this is being called post-roundstart then it doesn't care about ready status.
- if(ticker && ticker.current_state == GAME_STATE_PLAYING)
+ if(SSticker.current_state == GAME_STATE_PLAYING)
for(var/mob/player in player_list)
if(!player.client)
continue
@@ -602,16 +602,16 @@ proc/get_nt_opposed()
set name = "Check Round Info"
set category = "OOC"
- if(!ticker || !ticker.mode)
+ if(!SSticker.mode)
usr << "Something is terribly wrong; there is no gametype."
return
if(master_mode != "secret")
- usr << "The roundtype is [capitalize(ticker.mode.name)] "
- if(ticker.mode.round_description)
- usr << "[ticker.mode.round_description] "
- if(ticker.mode.extended_round_description)
- usr << "[ticker.mode.extended_round_description]"
+ usr << "The roundtype is [capitalize(SSticker.mode.name)] "
+ if(SSticker.mode.round_description)
+ usr << "[SSticker.mode.round_description] "
+ if(SSticker.mode.extended_round_description)
+ usr << "[SSticker.mode.extended_round_description]"
else
usr << "Shhhh . It's a secret."
return
diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm
index 298cd467221..c531e0de97a 100644
--- a/code/game/gamemodes/game_mode_latespawn.dm
+++ b/code/game/gamemodes/game_mode_latespawn.dm
@@ -5,7 +5,7 @@
///process()
///Called by the gameticker
-/datum/game_mode/proc/process()
+/datum/game_mode/process()
if(round_autoantag && world.time >= next_spawn && !emergency_shuttle.departed)
process_autoantag()
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
deleted file mode 100644
index 71441625f1f..00000000000
--- a/code/game/gamemodes/gameticker.dm
+++ /dev/null
@@ -1,467 +0,0 @@
-var/global/datum/controller/gameticker/ticker
-
-/datum/controller/gameticker
- var/const/restart_timeout = 600
- var/current_state = GAME_STATE_PREGAME
-
- var/hide_mode = 0
- var/datum/game_mode/mode = null
- var/post_game = 0
- var/event_time = null
- var/event = 0
-
- var/login_music // music played in pregame lobby
-
- var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking.
-
- var/Bible_icon_state // icon_state the chaplain has chosen for his bible
- var/Bible_item_state // item_state the chaplain has chosen for his bible
- var/Bible_name // name of the bible
- var/Bible_deity_name
-
- var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
-
- var/list/syndicate_coalition = list() // list of traitor-compatible factions
- var/list/factions = list() // list of all factions
- var/list/availablefactions = list() // list of factions with openings
-
- var/pregame_timeleft = 0
-
- var/delay_end = 0 //if set to nonzero, the round will not restart on it's own
-
- var/triai = 0//Global holder for Triumvirate
- var/tipped = 0 //Did we broadcast the tip of the day yet?
- var/selected_tip // What will be the tip of the day?
-
- var/round_end_announced = 0 // Spam Prevention. Announce round end only once.
-
-/datum/controller/gameticker/proc/pregame()
- login_music = pick(\
- /*'sound/music/halloween/skeletons.ogg',\
- 'sound/music/halloween/halloween.ogg',\
- 'sound/music/halloween/ghosts.ogg'*/
- 'sound/music/space.ogg',\
- 'sound/music/traitor.ogg',\
- 'sound/music/title2.ogg',\
- 'sound/music/clouds.s3m',\
- 'sound/music/space_oddity.ogg') //Ground Control to Major Tom, this song is cool, what's going on?
- do
- pregame_timeleft = 180
- world << "Welcome to the pre-game lobby! "
- world << "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds"
- while(current_state == GAME_STATE_PREGAME)
- for(var/i=0, i<10, i++)
- sleep(1)
- vote.process()
- if(round_progressing)
- pregame_timeleft--
- if(pregame_timeleft == config.vote_autogamemode_timeleft)
- if(!vote.time_remaining)
- vote.autogamemode() //Quit calling this over and over and over and over.
- while(vote.time_remaining)
- for(var/i=0, i<10, i++)
- sleep(1)
- vote.process()
- if(pregame_timeleft <= 10 && !tipped)
- send_tip_of_the_round()
- tipped = 1
- if(pregame_timeleft <= 0)
- current_state = GAME_STATE_SETTING_UP
- while (!setup())
-
-
-/datum/controller/gameticker/proc/setup()
- //Create and announce mode
- if(master_mode=="secret")
- src.hide_mode = 1
-
- var/list/runnable_modes = config.get_runnable_modes()
- if((master_mode=="random") || (master_mode=="secret"))
- if(!runnable_modes.len)
- current_state = GAME_STATE_PREGAME
- world << "Unable to choose playable game mode. Reverting to pre-game lobby."
- return 0
- if(secret_force_mode != "secret")
- src.mode = config.pick_mode(secret_force_mode)
- if(!src.mode)
- var/list/weighted_modes = list()
- for(var/datum/game_mode/GM in runnable_modes)
- weighted_modes[GM.config_tag] = config.probabilities[GM.config_tag]
- src.mode = gamemode_cache[pickweight(weighted_modes)]
- else
- src.mode = config.pick_mode(master_mode)
-
- if(!src.mode)
- current_state = GAME_STATE_PREGAME
- world << "Serious error in mode setup! Reverting to pre-game lobby."
- return 0
-
- job_master.ResetOccupations()
- src.mode.create_antagonists()
- src.mode.pre_setup()
- job_master.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly.
-
- if(!src.mode.can_start())
- world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby."
- current_state = GAME_STATE_PREGAME
- mode.fail_setup()
- mode = null
- job_master.ResetOccupations()
- return 0
-
- if(hide_mode)
- world << "The current game mode is - Secret! "
- if(runnable_modes.len)
- var/list/tmpmodes = new
- for (var/datum/game_mode/M in runnable_modes)
- tmpmodes+=M.name
- tmpmodes = sortList(tmpmodes)
- if(tmpmodes.len)
- world << "Possibilities: [english_list(tmpmodes)]"
- else
- src.mode.announce()
-
- setup_economy()
- current_state = GAME_STATE_PLAYING
- create_characters() //Create player characters and transfer them
- collect_minds()
- equip_characters()
- data_core.manifest()
-
- callHook("roundstart")
-
- shuttle_controller.setup_shuttle_docks()
-
- spawn(0)//Forking here so we dont have to wait for this to finish
- mode.post_setup()
- //Cleanup some stuff
- for(var/obj/effect/landmark/start/S in landmarks_list)
- //Deleting Startpoints but we need the ai point to AI-ize people later
- if (S.name != "AI")
- qdel(S)
- world << "Enjoy the game! "
- world << sound('sound/AI/welcome.ogg') // Skie
- //Holiday Round-start stuff ~Carn
- Holiday_Game_Start()
-
- //start_events() //handles random events and space dust.
- //new random event system is handled from the MC.
-
- var/admins_number = 0
- for(var/client/C)
- if(C.holder && (C.holder.rights & (R_MOD|R_ADMIN)))
- admins_number++
- if(admins_number == 0)
- discord_bot.send_to_admins("@here Round has started with no admins online.")
-
-/* supply_controller.process() //Start the supply shuttle regenerating points -- TLE // handled in scheduler
- master_controller.process() //Start master_controller.process()
- lighting_controller.process() //Start processing DynamicAreaLighting updates
- */
-
- processScheduler.start()
-
- if(config.sql_enabled)
- statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
-
- return 1
-
-/datum/controller/gameticker
- //station_explosion used to be a variable for every mob's hud. Which was a waste!
- //Now we have a general cinematic centrally held within the gameticker....far more efficient!
- var/obj/screen/cinematic = null
-
- //Plus it provides an easy way to make cinematics for other events. Just use this as a template :)
- proc/station_explosion_cinematic(var/station_missed=0, var/override = null)
- if( cinematic ) return //already a cinematic in progress!
-
- //initialise our cinematic screen object
- cinematic = new(src)
- cinematic.icon = 'icons/effects/station_explosion.dmi'
- cinematic.icon_state = "station_intact"
- cinematic.layer = 20
- cinematic.mouse_opacity = 0
- cinematic.screen_loc = "1,0"
-
- var/obj/structure/bed/temp_buckle = new(src)
- //Incredibly hackish. It creates a bed within the gameticker (lol) to stop mobs running around
- if(station_missed)
- for(var/mob/living/M in living_mob_list)
- M.buckled = temp_buckle //buckles the mob so it can't do anything
- if(M.client)
- M.client.screen += cinematic //show every client the cinematic
- else //nuke kills everyone on z-level 1 to prevent "hurr-durr I survived"
- for(var/mob/living/M in living_mob_list)
- M.buckled = temp_buckle
- if(M.client)
- M.client.screen += cinematic
-
- switch(M.z)
- if(0) //inside a crate or something
- var/turf/T = get_turf(M)
- if(T && T.z in config.station_levels) //we don't use M.death(0) because it calls a for(/mob) loop and
- M.health = 0
- M.stat = DEAD
- if(1) //on a z-level 1 turf.
- M.health = 0
- M.stat = DEAD
-
- //Now animate the cinematic
- switch(station_missed)
- if(1) //nuke was nearby but (mostly) missed
- if( mode && !override )
- override = mode.name
- switch( override )
- if("mercenary") //Nuke wasn't on station when it blew up
- flick("intro_nuke",cinematic)
- sleep(35)
- world << sound('sound/effects/explosionfar.ogg')
- flick("station_intact_fade_red",cinematic)
- cinematic.icon_state = "summary_nukefail"
- else
- flick("intro_nuke",cinematic)
- sleep(35)
- world << sound('sound/effects/explosionfar.ogg')
- //flick("end",cinematic)
-
-
- if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
- sleep(50)
- world << sound('sound/effects/explosionfar.ogg')
-
-
- else //station was destroyed
- if( mode && !override )
- override = mode.name
- switch( override )
- if("mercenary") //Nuke Ops successfully bombed the station
- flick("intro_nuke",cinematic)
- sleep(35)
- flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
- cinematic.icon_state = "summary_nukewin"
- if("AI malfunction") //Malf (screen,explosion,summary)
- flick("intro_malf",cinematic)
- sleep(76)
- flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
- cinematic.icon_state = "summary_malf"
- if("blob") //Station nuked (nuke,explosion,summary)
- flick("intro_nuke",cinematic)
- sleep(35)
- flick("station_explode_fade_red",cinematic)
- world << sound('sound/effects/explosionfar.ogg')
- cinematic.icon_state = "summary_selfdes"
- else //Station nuked (nuke,explosion,summary)
- flick("intro_nuke",cinematic)
- sleep(35)
- flick("station_explode_fade_red", cinematic)
- world << sound('sound/effects/explosionfar.ogg')
- cinematic.icon_state = "summary_selfdes"
- for(var/mob/living/M in living_mob_list)
- if(M.loc.z in config.station_levels)
- M.death()//No mercy
- //If its actually the end of the round, wait for it to end.
- //Otherwise if its a verb it will continue on afterwards.
- sleep(300)
-
- if(cinematic) qdel(cinematic) //end the cinematic
- if(temp_buckle) qdel(temp_buckle) //release everybody
- return
-
-
- proc/create_characters()
- for(var/mob/new_player/player in player_list)
- if(player && player.ready && player.mind)
- if(player.mind.assigned_role=="AI")
- player.close_spawn_windows()
- player.AIize()
- else if(!player.mind.assigned_role)
- continue
- else
- player.create_character()
- qdel(player)
-
-
- proc/collect_minds()
- for(var/mob/living/player in player_list)
- if(player.mind)
- ticker.minds += player.mind
-
-
- proc/equip_characters()
- var/captainless=1
- for(var/mob/living/carbon/human/player in player_list)
- if(player && player.mind && player.mind.assigned_role)
- if(player.mind.assigned_role == "Captain")
- captainless=0
- if(!player_is_antag(player.mind, only_offstation_roles = 1))
- job_master.EquipRank(player, player.mind.assigned_role, 0)
- UpdateFactionList(player)
- equip_custom_items(player)
- if(captainless)
- for(var/mob/M in player_list)
- if(!istype(M,/mob/new_player))
- M << "Captainship not forced on anyone."
-
-
- proc/process()
- if(current_state != GAME_STATE_PLAYING)
- return 0
-
- mode.process()
-
-// emergency_shuttle.process() //handled in scheduler
-
- var/game_finished = 0
- var/mode_finished = 0
- if (config.continous_rounds)
- game_finished = (emergency_shuttle.returned() || mode.station_was_nuked)
- mode_finished = (!post_game && mode.check_finished())
- else
- game_finished = (mode.check_finished() || (emergency_shuttle.returned() && emergency_shuttle.evac == 1)) || universe_has_ended
- mode_finished = game_finished
-
- if(!mode.explosion_in_progress && game_finished && (mode_finished || post_game))
- current_state = GAME_STATE_FINISHED
-
- spawn
- declare_completion()
-
- spawn(50)
- callHook("roundend")
-
- if (universe_has_ended)
- if(mode.station_was_nuked)
- feedback_set_details("end_proper","nuke")
- else
- feedback_set_details("end_proper","universe destroyed")
- if(!delay_end)
- world << "Rebooting due to destruction of station in [restart_timeout/10] seconds "
- else
- feedback_set_details("end_proper","proper completion")
- if(!delay_end)
- world << "Restarting in [restart_timeout/10] seconds "
-
-
- if(blackbox)
- blackbox.save_all_data_to_sql()
-
- if(!delay_end)
- sleep(restart_timeout)
- if(!delay_end)
- world.Reboot()
- else
- world << "An admin has delayed the round end "
- else
- world << "An admin has delayed the round end "
-
- else if (mode_finished)
- post_game = 1
-
- mode.cleanup()
-
- //call a transfer shuttle vote
- spawn(50)
- if(!round_end_announced) // Spam Prevention. Now it should announce only once.
- world << "The round has ended! "
- round_end_announced = 1
- vote.autotransfer()
-
- return 1
-
-/datum/controller/gameticker/proc/declare_completion()
- world << "A round of [mode.name] has ended! "
- for(var/mob/Player in player_list)
- if(Player.mind && !isnewplayer(Player))
- if(Player.stat != DEAD)
- var/turf/playerTurf = get_turf(Player)
- if(emergency_shuttle.departed && emergency_shuttle.evac)
- if(isNotAdminLevel(playerTurf.z))
- Player << "You managed to survive, but were marooned on [station_name()] as [Player.real_name]... "
- else
- Player << "You managed to survive the events on [station_name()] as [Player.real_name]. "
- else if(isAdminLevel(playerTurf.z))
- Player << "You successfully underwent crew transfer after events on [station_name()] as [Player.real_name]. "
- else if(issilicon(Player))
- Player << "You remain operational after the events on [station_name()] as [Player.real_name]. "
- else
- Player << "You missed the crew transfer after the events on [station_name()] as [Player.real_name]. "
- else
- if(istype(Player,/mob/dead/observer))
- var/mob/dead/observer/O = Player
- if(!O.started_as_observer)
- Player << "You did not survive the events on [station_name()]... "
- else
- Player << "You did not survive the events on [station_name()]... "
- world << " "
-
- for (var/mob/living/silicon/ai/aiPlayer in mob_list)
- if (aiPlayer.stat != 2)
- world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the round were: "
- else
- world << "[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were: "
- aiPlayer.show_laws(1)
-
- if (aiPlayer.connected_robots.len)
- var/robolist = "The AI's loyal minions were: "
- for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
- robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]"
- world << "[robolist]"
-
- var/dronecount = 0
-
- for (var/mob/living/silicon/robot/robo in mob_list)
-
- if(istype(robo,/mob/living/silicon/robot/drone))
- dronecount++
- continue
-
- if (!robo.connected_ai)
- if (robo.stat != 2)
- world << "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were: "
- else
- world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were: "
-
- if(robo) //How the hell do we lose robo between here and the world messages directly above this?
- robo.laws.show_laws(world)
-
- if(dronecount)
- world << "There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] at the end of this round. "
-
- mode.declare_completion()//To declare normal completion.
-
- //Ask the event manager to print round end information
- event_manager.RoundEnd()
-
- //Print a list of antagonists to the server log
- var/list/total_antagonists = list()
- //Look into all mobs in world, dead or alive
- for(var/datum/mind/Mind in minds)
- var/temprole = Mind.special_role
- if(temprole) //if they are an antagonist of some sort.
- if(temprole in total_antagonists) //If the role exists already, add the name to it
- total_antagonists[temprole] += ", [Mind.name]([Mind.key])"
- else
- total_antagonists.Add(temprole) //If the role doesnt exist in the list, create it and add the mob
- total_antagonists[temprole] += ": [Mind.name]([Mind.key])"
-
- //Now print them all into the log!
- log_game("Antagonists at round end were...")
- for(var/i in total_antagonists)
- log_game("[i]s[total_antagonists[i]].")
-
- return 1
-
-/datum/controller/gameticker/proc/send_tip_of_the_round()
- var/m
- if(selected_tip)
- m = selected_tip
- else
- var/list/randomtips = file2list("config/tips.txt")
- if(randomtips.len)
- m = pick(randomtips)
-
- if(m)
- world << "Tip of the round: \
- [html_encode(m)] "
diff --git a/code/game/gamemodes/malfunction/malf_research.dm b/code/game/gamemodes/malfunction/malf_research.dm
index da7a4df668e..58f7d56c137 100644
--- a/code/game/gamemodes/malfunction/malf_research.dm
+++ b/code/game/gamemodes/malfunction/malf_research.dm
@@ -43,7 +43,7 @@
// Proc: process()
// Parameters: None
// Description: Processes CPU gain and research progress based on "realtime" calculation.
-/datum/malf_research/proc/process(var/idle = 0)
+/datum/malf_research/process(var/idle = 0)
if(idle) // No power or running on APU. Do nothing.
last_tick = world.time
return
diff --git a/code/game/gamemodes/malfunction/malf_research_ability.dm b/code/game/gamemodes/malfunction/malf_research_ability.dm
index c6916208bd3..f267e9243a3 100644
--- a/code/game/gamemodes/malfunction/malf_research_ability.dm
+++ b/code/game/gamemodes/malfunction/malf_research_ability.dm
@@ -7,7 +7,7 @@
var/datum/malf_research_ability/next = null // Next research (if applicable).
-/datum/malf_research_ability/proc/process(var/time = 0)
+/datum/malf_research_ability/process(var/time = 0)
invested += time
if(invested >= price)
- unlocked = 1
\ No newline at end of file
+ unlocked = 1
diff --git a/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm b/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm
index 2fffaa3ca8a..3a07e9d715a 100644
--- a/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm
+++ b/code/game/gamemodes/malfunction/newmalf_ability_trees/HARDWARE.dm
@@ -105,9 +105,6 @@
radio.autosay("Self destructing now. Have a nice day.", "Self-Destruct Control")
timer--
- if(ticker)
- ticker.station_explosion_cinematic(0,null)
- if(ticker.mode)
- ticker.mode:station_was_nuked = 1
-
-
+ SSticker.station_explosion_cinematic(0,null)
+ if(SSticker.mode)
+ SSticker.mode:station_was_nuked = 1
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 37bce4d2707..d543b10c481 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -20,58 +20,71 @@
var/turf/pickedgoal
var/max_i = 10//number of tries to spawn meteor.
+ switch(pick(1,2,3,4))
+ if(1) //NORTH
+ starty = world.maxy-(TRANSITIONEDGE+2)
+ startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2))
+ endy = TRANSITIONEDGE
+ endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
+ if(2) //EAST
+ starty = rand((TRANSITIONEDGE+2),world.maxy-(TRANSITIONEDGE+1))
+ startx = world.maxx-(TRANSITIONEDGE+2)
+ endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
+ endx = TRANSITIONEDGE
+ if(3) //SOUTH
+ starty = (TRANSITIONEDGE+2)
+ startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2))
+ endy = world.maxy-TRANSITIONEDGE
+ endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
+ if(4) //WEST
+ starty = rand((TRANSITIONEDGE+2), world.maxy-(TRANSITIONEDGE+2))
+ startx = (TRANSITIONEDGE+2)
+ endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
+ endx = world.maxx-TRANSITIONEDGE
- do
- switch(pick(1,2,3,4))
- if(1) //NORTH
- starty = world.maxy-(TRANSITIONEDGE+2)
- startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2))
- endy = TRANSITIONEDGE
- endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
- if(2) //EAST
- starty = rand((TRANSITIONEDGE+2),world.maxy-(TRANSITIONEDGE+1))
- startx = world.maxx-(TRANSITIONEDGE+2)
- endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
- endx = TRANSITIONEDGE
- if(3) //SOUTH
- starty = (TRANSITIONEDGE+2)
- startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2))
- endy = world.maxy-TRANSITIONEDGE
- endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
- if(4) //WEST
- starty = rand((TRANSITIONEDGE+2), world.maxy-(TRANSITIONEDGE+2))
- startx = (TRANSITIONEDGE+2)
- endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
- endx = world.maxx-TRANSITIONEDGE
-
- pickedstart = locate(startx, starty, 1)
- pickedgoal = locate(endx, endy, 1)
- max_i--
- if(max_i<=0) return
-
- while (!istype(pickedstart, /turf/space)) //FUUUCK, should never happen.
-
+ pickedstart = locate(startx, starty, 2)
+ pickedgoal = locate(endx, endy, 2)
+ max_i--
+ if(max_i<=0) return
var/obj/effect/meteor/M
switch(rand(1, 100))
if(1 to 10)
M = new /obj/effect/meteor/big( pickedstart )
- if(11 to 75)
+ if(11 to 50)
M = new /obj/effect/meteor( pickedstart )
- if(76 to 100)
+ if(51 to 55)
+ M = new /obj/effect/meteor/flaming( pickedstart )
+ if(56 to 59)
+ M = new /obj/effect/meteor/irradiated( pickedstart )
+ if(60 to 64)
+ M = new /obj/effect/meteor/golden( pickedstart )
+ if(65 to 69)
+ M = new /obj/effect/meteor/silver( pickedstart )
+ if(70 to 73)
+ M = new /obj/effect/meteor/emp( pickedstart )
+ if(74 to 76)
+ M = new /obj/effect/meteor/diamond( pickedstart )
+ if(77 to 78)
+ M = new /obj/effect/meteor/artifact( pickedstart )
+ if(79 to 80)
+ M = new /obj/effect/meteor/supermatter( pickedstart )
+ if(81 to 82)
+ M = new /obj/effect/meteor/meaty( pickedstart )
+ if(83 to 100)
M = new /obj/effect/meteor/small( pickedstart )
M.dest = pickedgoal
spawn(1)
- walk_towards(M, M.dest, 1)
+ walk_towards(M, M.dest, 2)
return
/obj/effect/meteor
name = "meteor"
icon = 'icons/obj/meteor.dmi'
- icon_state = "flaming"
+ icon_state = "large"
density = 1
anchored = 1.0
var/hits = 3
@@ -82,7 +95,8 @@
var/shieldsoundrange = 260 // The maximum number of tiles away the sound can be heard, falls off over distance, so it will be quiet near the limit
pass_flags = PASSTABLE
var/done = 0//This is set to 1 when the meteor is done colliding, and is used to ignore additional bumps while waiting for deletion
-
+ var/meteordrop = /obj/item/weapon/ore/iron //the thing that the meteors will drop when it explodes
+ var/dropamt = 3 //amount of said thing
/obj/effect/meteor/small
name = "small meteor"
@@ -93,11 +107,11 @@
hits = 2
detonation_chance = 30
shieldsoundrange = 160
-
+ dropamt = 1
/obj/effect/meteor/Destroy()
walk(src,0) //this cancels the walk_towards() proc
- ..()
+ return ..()
/obj/effect/meteor/Bump(atom/A)
if (!done)
@@ -106,6 +120,8 @@
if (A)
A.ex_act(2)
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
+ make_debris()
+ meteor_effect()
if (istype(A, /obj/effect/energy_field))//If a normal/small meteor impacts an energy field, then it makes a widely audible impact sound and qdels
done = 1
@@ -136,15 +152,26 @@
spawn()
qdel(src)
-
-
-
/obj/effect/meteor/ex_act(severity)
if (severity < 4)
qdel(src)
return
+/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/pickaxe))
+ qdel(src)
+ return
+ ..()
+
+/obj/effect/meteor/proc/make_debris()
+ for(var/throws = dropamt, throws > 0, throws--)
+ var/obj/O = new meteordrop(get_turf(src))
+ O.throw_at(dest, 5, 10)
+
+/obj/effect/meteor/proc/meteor_effect()
+ return
+
/obj/effect/meteor/big
name = "big meteor"
hits = 5
@@ -152,6 +179,7 @@
power_step = 1
detonation_chance = 60
shieldsoundrange = 310//This can be set larger than the dimensions of the map, to allow it to remain louder at extreme distance
+ dropamt = 5
ex_act(severity)
return
@@ -195,6 +223,8 @@
shake_camera(M, 3, get_dist(M.loc, src.loc) > 20 ? 1 : 3)
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
explosion(src.loc, 0, 1, 2, 3, 0)
+ make_debris()
+ meteor_effect()
if (--src.hits == 0 && !done)
done = 1
@@ -206,12 +236,82 @@
spawn()
qdel(src)
+/obj/effect/meteor/dust
+ name = "space dust"
+ icon_state = "dust"
+ pass_flags = PASSTABLE | PASSGRILLE
+ hits = 1
+ meteordrop = /obj/item/weapon/ore/glass
+ dropamt = 1
-/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/pickaxe))
- qdel(src)
- return
+/obj/effect/meteor/flaming
+ name = "flaming meteor"
+ icon_state = "flaming"
+ hits = 3
+ meteordrop = /obj/item/weapon/ore/phoron
+
+/obj/effect/meteor/irradiated
+ name = "glowing meteor"
+ icon_state = "glowing"
+ meteordrop = /obj/item/weapon/ore/uranium
+
+/obj/effect/meteor/irradiated/meteor_effect()
+ new /obj/effect/decal/cleanable/greenglow(get_turf(src)) //todo: make this irradiate the place it lands
+
+/obj/effect/meteor/golden
+ name = "golden meteor"
+ icon_state = "sharp"
+ meteordrop = /obj/item/weapon/ore/gold
+
+/obj/effect/meteor/silver
+ name = "silver meteor"
+ icon_state = "glowing_blue"
+ meteordrop = /obj/item/weapon/ore/silver
+
+/obj/effect/meteor/diamond
+ name = "diamond meteor"
+ icon_state = "glowing_blue"
+ meteordrop = /obj/item/weapon/ore/diamond
+
+/obj/effect/meteor/emp
+ name = "conducting meteor"
+ icon_state = "glowing_blue"
+ meteordrop = /obj/item/weapon/ore/osmium
+ dropamt = 2
+
+/obj/effect/meteor/emp/meteor_effect()
+ empulse(src, rand(2, 4), rand(4, 10))
+
+/obj/effect/meteor/artifact
+ icon_state = "sharp"
+ meteordrop = /obj/machinery/artifact
+ dropamt = 1
+
+/obj/effect/meteor/supermatter
+ name = "supermatter shard"
+ icon = 'icons/obj/engine.dmi'
+ icon_state = "darkmatter"
+
+/obj/effect/meteor/supermatter/New()
..()
+ if(prob(5))
+ meteordrop = /obj/machinery/power/supermatter/shard
+ dropamt = 1
+
+/obj/effect/meteor/supermatter/meteor_effect()
+ explosion(src.loc, 1, 2, 3, 4, 0)
+ for(var/obj/machinery/power/apc/A in range(rand(12, 20), src))
+ A.energy_fail(round(10 * rand(8, 12)))
+
+/obj/effect/meteor/meaty
+ name = "meaty ore"
+ icon_state = "meateor"
+ meteordrop = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
+ dropamt = 10
+
+/obj/effect/meteor/meaty/meteor_effect()
+ gibs(loc)
+
//This function takes a turf to prevent race conditions, as the object calling it will probably be deleted in the same frame
/proc/meteor_shield_impact_sound(var/turf/T, var/range)
@@ -229,4 +329,3 @@
if(M.ear_deaf <= 0 || !M.ear_deaf)
M.playsound_local(T, 'sound/effects/meteorimpact.ogg', range, 1, usepressure = 0)
-
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 63832b809ce..71adc589574 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -12,45 +12,51 @@
var/obj/item/weapon/disk/nuclear/the_disk = null
var/active = 0
+/obj/item/weapon/pinpointer/attack_self()
+ if(!active)
+ active = 1
+ START_PROCESSING(SSfast_process, src)
+ usr << "You activate the pinpointer "
+ else
+ active = 0
+ STOP_PROCESSING(SSfast_process, src)
+ icon_state = "pinoff"
+ usr << "You deactivate the pinpointer "
- attack_self()
- if(!active)
- active = 1
- workdisk()
- usr << "You activate the pinpointer "
- else
- active = 0
- icon_state = "pinoff"
- usr << "You deactivate the pinpointer "
+/obj/item/weapon/pinpointer/process()
+ if (active)
+ workdisk()
+ else
+ STOP_PROCESSING(SSfast_process, src)
- proc/workdisk()
- if(!active) return
+/obj/item/weapon/pinpointer/proc/workdisk()
+ if(!active) return
+ if(!the_disk)
+ the_disk = locate()
if(!the_disk)
- the_disk = locate()
- if(!the_disk)
- icon_state = "pinonnull"
- return
- set_dir(get_dir(src,the_disk))
- switch(get_dist(src,the_disk))
- if(0)
- icon_state = "pinondirect"
- if(1 to 8)
- icon_state = "pinonclose"
- if(9 to 16)
- icon_state = "pinonmedium"
- if(16 to INFINITY)
- icon_state = "pinonfar"
- spawn(5) .()
+ icon_state = "pinonnull"
+ return
+ set_dir(get_dir(src,the_disk))
+ switch(get_dist(src,the_disk))
+ if(0)
+ icon_state = "pinondirect"
+ if(1 to 8)
+ icon_state = "pinonclose"
+ if(9 to 16)
+ icon_state = "pinonmedium"
+ if(16 to INFINITY)
+ icon_state = "pinonfar"
- examine(mob/user)
- ..(user)
- for(var/obj/machinery/nuclearbomb/bomb in world)
- if(bomb.timing)
- user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
+/obj/item/weapon/pinpointer/examine(mob/user)
+ ..(user)
+ for(var/obj/machinery/nuclearbomb/bomb in world)
+ if(bomb.timing)
+ user << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
/obj/item/weapon/pinpointer/Destroy()
active = 0
- ..()
+ STOP_PROCESSING(SSfast_process, src)
+ return ..()
/obj/item/weapon/pinpointer/advpinpointer
name = "Advanced Pinpointer"
@@ -60,58 +66,66 @@
var/turf/location = null
var/obj/target = null
- attack_self()
- if(!active)
- active = 1
- if(mode == 0)
- workdisk()
- if(mode == 1)
- worklocation()
- if(mode == 2)
- workobj()
- usr << "You activate the pinpointer "
- else
- active = 0
- icon_state = "pinoff"
- usr << "You deactivate the pinpointer "
+/obj/item/weapon/pinpointer/advpinpointer/attack_self()
+ if(!active)
+ active = 1
+ if(mode == 0)
+ workdisk()
+ if(mode == 1)
+ worklocation()
+ if(mode == 2)
+ workobj()
+ START_PROCESSING(SSfast_process, src)
+ usr << "You activate the pinpointer "
+ else
+ active = 0
+ icon_state = "pinoff"
+ usr << "You deactivate the pinpointer "
+/obj/item/weapon/pinpointer/advpinpointer/process()
+ switch(mode)
+ if (0)
+ workdisk()
+ if (1)
+ worklocation()
+ if (2)
+ workobj()
- proc/worklocation()
- if(!active)
- return
- if(!location)
- icon_state = "pinonnull"
- return
- set_dir(get_dir(src,location))
- switch(get_dist(src,location))
- if(0)
- icon_state = "pinondirect"
- if(1 to 8)
- icon_state = "pinonclose"
- if(9 to 16)
- icon_state = "pinonmedium"
- if(16 to INFINITY)
- icon_state = "pinonfar"
- spawn(5) .()
+/obj/item/weapon/pinpointer/advpinpointer/proc/worklocation()
+ if(!active)
+ STOP_PROCESSING(SSfast_process, src)
+ return
+ if(!location)
+ icon_state = "pinonnull"
+ return
+ set_dir(get_dir(src,location))
+ switch(get_dist(src,location))
+ if(0)
+ icon_state = "pinondirect"
+ if(1 to 8)
+ icon_state = "pinonclose"
+ if(9 to 16)
+ icon_state = "pinonmedium"
+ if(16 to INFINITY)
+ icon_state = "pinonfar"
-
- proc/workobj()
- if(!active)
- return
- if(!target)
- icon_state = "pinonnull"
- return
- set_dir(get_dir(src,target))
- switch(get_dist(src,target))
- if(0)
- icon_state = "pinondirect"
- if(1 to 8)
- icon_state = "pinonclose"
- if(9 to 16)
- icon_state = "pinonmedium"
- if(16 to INFINITY)
- icon_state = "pinonfar"
- spawn(5) .()
+/obj/item/weapon/pinpointer/advpinpointer/proc/workobj()
+ if(!active)
+ STOP_PROCESSING(SSfast_process, src)
+ return
+ if(!target)
+ icon_state = "pinonnull"
+ return
+ set_dir(get_dir(src,target))
+ switch(get_dist(src,target))
+ if(0)
+ icon_state = "pinondirect"
+ if(1 to 8)
+ icon_state = "pinonclose"
+ if(9 to 16)
+ icon_state = "pinonmedium"
+ if(16 to INFINITY)
+ icon_state = "pinonfar"
/obj/item/weapon/pinpointer/advpinpointer/verb/toggle_mode()
set category = "Object"
@@ -120,7 +134,7 @@
active = 0
icon_state = "pinoff"
- target=null
+ target = null
location = null
switch(alert("Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", "Location", "Disk Recovery", "Other Signature"))
@@ -187,6 +201,7 @@
/obj/item/weapon/pinpointer/nukeop/attack_self(mob/user as mob)
if(!active)
active = 1
+ START_PROCESSING(SSfast_process, src)
if(!mode)
workdisk()
user << "Authentication Disk Locator active. "
@@ -195,9 +210,15 @@
user << "Shuttle Locator active. "
else
active = 0
+ STOP_PROCESSING(SSfast_process, src)
icon_state = "pinoff"
user << "You deactivate the pinpointer. "
+/obj/item/weapon/pinpointer/nukeop/process()
+ if (mode)
+ workdisk()
+ else
+ worklocation()
/obj/item/weapon/pinpointer/nukeop/workdisk()
if(!active) return
@@ -229,9 +250,6 @@
if(16 to INFINITY)
icon_state = "pinonfar"
- spawn(5) .()
-
-
/obj/item/weapon/pinpointer/nukeop/proc/worklocation()
if(!active) return
if(!mode)
@@ -261,5 +279,3 @@
icon_state = "pinonmedium"
if(16 to INFINITY)
icon_state = "pinonfar"
-
- spawn(5) .()
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 72e5210b1fb..7a07c066678 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -24,14 +24,14 @@ datum/objective
if (process)
process_objectives -= src
- ..()
+ return ..()
proc/check_completion()
return completed
proc/find_target()
var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2))
possible_targets += possible_target
if(possible_targets.len > 0)
@@ -39,12 +39,12 @@ datum/objective
proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
target = possible_target
break
- proc/process()
+ process()
return
@@ -618,17 +618,16 @@ datum/objective/capture
/datum/objective/absorb
proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6)
target_amount = rand (lowbound,highbound)
- if (ticker)
- var/n_p = 1 //autowin
- if (ticker.current_state == GAME_STATE_SETTING_UP)
- for(var/mob/new_player/P in player_list)
- if(P.client && P.ready && P.mind!=owner)
- n_p ++
- else if (ticker.current_state == GAME_STATE_PLAYING)
- for(var/mob/living/carbon/human/P in player_list)
- if(P.client && !(P.mind.changeling) && P.mind!=owner)
- n_p ++
- target_amount = min(target_amount, n_p)
+ var/n_p = 1 //autowin
+ if (SSticker.current_state == GAME_STATE_SETTING_UP)
+ for(var/mob/new_player/P in player_list)
+ if(P.client && P.ready && P.mind!=owner)
+ n_p ++
+ else if (SSticker.current_state == GAME_STATE_PLAYING)
+ for(var/mob/living/carbon/human/P in player_list)
+ if(P.client && !(P.mind.changeling) && P.mind!=owner)
+ n_p ++
+ target_amount = min(target_amount, n_p)
explanation_text = "Absorb [target_amount] compatible genomes."
return target_amount
@@ -650,7 +649,7 @@ datum/objective/heist/kidnap
var/list/possible_targets = list()
var/list/priority_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (!possible_target.special_role))
possible_targets += possible_target
for(var/role in roles)
diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm
index 387520d100d..9b112eb8a4f 100644
--- a/code/game/gamemodes/vampire/vampire_powers.dm
+++ b/code/game/gamemodes/vampire/vampire_powers.dm
@@ -276,17 +276,19 @@
return
for (var/mob/living/simple_animal/hostile/scarybat/bat in spawned)
- bat.friends += src
+ LAZYADD(bat.friends, src)
if (vampire.thralls.len)
- bat.friends += vampire.thralls
+ LAZYADD(bat.friends, vampire.thralls)
log_and_message_admins("summoned bats.")
vampire.use_blood(60)
verbs -= /mob/living/carbon/human/proc/vampire_bats
- spawn (1200)
- verbs += /mob/living/carbon/human/proc/vampire_bats
+ addtimer(CALLBACK(src, .proc/vampire_post_bats), 1200)
+
+/mob/living/carbon/human/proc/vampire_post_bats()
+ verbs += /mob/living/carbon/human/proc/vampire_bats
// Chiropteran Screech
/mob/living/carbon/human/proc/vampire_screech()
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 681d84f4a70..2d43693cb84 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -71,7 +71,7 @@
/proc/get_all_access_datums()
if(!priv_all_access_datums)
priv_all_access_datums = init_subtypes(/datum/access)
- priv_all_access_datums = dd_sortedObjectList(priv_all_access_datums)
+ sortTim(priv_all_access_datums, /proc/cmp_access, FALSE)
return priv_all_access_datums
diff --git a/code/game/jobs/access_datum.dm b/code/game/jobs/access_datum.dm
index 28bbdec8f8f..04474a56d40 100644
--- a/code/game/jobs/access_datum.dm
+++ b/code/game/jobs/access_datum.dm
@@ -4,9 +4,6 @@
var/region = ACCESS_REGION_NONE
var/access_type = ACCESS_TYPE_STATION
-/datum/access/dd_SortValue()
- return "[access_type][desc]"
-
/*****************
* Station access *
*****************/
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index 15b72290326..36634a74d08 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -171,8 +171,8 @@
department = "Cargo"
department_flag = CIVILIAN
faction = "Station"
- total_positions = 3
- spawn_positions = 3
+ total_positions = 4
+ spawn_positions = 4
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd"
economic_modifier = 5
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index a42db58995b..3aa419ed8c5 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -147,11 +147,10 @@
H << "Welp, out of time, buddy. You're stuck. Next time choose faster."
accepted = 1
- if(ticker)
- ticker.Bible_icon_state = B.icon_state
- ticker.Bible_item_state = B.item_state
- ticker.Bible_name = B.name
- ticker.Bible_deity_name = B.deity_name
+ SSticker.Bible_icon_state = B.icon_state
+ SSticker.Bible_item_state = B.item_state
+ SSticker.Bible_name = B.name
+ SSticker.Bible_deity_name = B.deity_name
feedback_set_details("religion_deity","[new_deity]")
feedback_set_details("religion_book","[new_book_style]")
return 1
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index da3fae270eb..32736ab04c0 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -57,7 +57,7 @@
var/species_modifier = (H.species ? economic_species_modifier[H.species.type] : 2)
if(!species_modifier)
species_modifier = economic_species_modifier[/datum/species/human]
-
+
var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * species_modifier
var/datum/money_account/M = create_account(H.real_name, money_amount, null)
if(H.mind)
@@ -113,3 +113,56 @@
/datum/job/proc/fetch_age_restriction()
if (config.age_restrictions[lowertext(title)])
minimal_player_age = config.age_restrictions[lowertext(title)]
+
+/datum/job/proc/late_equip(var/mob/living/carbon/human/H)
+ if(!H)
+ return 0
+
+ var/loyalty = 1
+ if(H.client)
+ switch(H.client.prefs.nanotrasen_relation)
+ if(COMPANY_LOYAL) loyalty = 3
+ if(COMPANY_SUPPORTATIVE)loyalty = 2
+ if(COMPANY_NEUTRAL) loyalty = 1
+ if(COMPANY_SKEPTICAL) loyalty = -2
+ if(COMPANY_OPPOSED) loyalty = -3
+
+ //give them an account in the station database
+ var/species_modifier = 0
+ if(economic_species_modifier[H.species.type])
+ switch(economic_species_modifier[H.species.type])
+ if(/datum/species/human) species_modifier = 0
+ if(/datum/species/skrell) species_modifier = 0
+ if(/datum/species/tajaran) species_modifier = -2
+ if(/datum/species/unathi) species_modifier = -2
+ if(/datum/species/diona) species_modifier = -4
+ if(/datum/species/machine) species_modifier = -4
+ if(/datum/species/bug) species_modifier = -6
+ else species_modifier = -3
+
+
+ var/wealth = (loyalty + economic_modifier + species_modifier)
+
+ switch(wealth)
+ if(-INFINITY to 2)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ if(3 to 6)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/hoodie(H), slot_wear_suit)
+ if(7 to 9)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/sl_suit(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/accessory/red(H), slot_tie)
+ if(10 to 14)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
+ if(15 to INFINITY)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/sl_suit(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/accessory/red(H), slot_tie)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/accessory/locket(H), slot_tie)
+
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 50e77f68be9..71b6ca13012 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -135,38 +135,6 @@
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
return 1
-
-
-/datum/job/geneticist
- title = "Geneticist"
- flag = GENETICIST
- department = "Medical"
- department_flag = MEDSCI
- faction = "Station"
- total_positions = 0
- spawn_positions = 0
- supervisors = "the chief medical officer and research director"
- selection_color = "#ffeef0"
- economic_modifier = 7
- access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
- minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
-
-
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_medsci(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/gen(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
- return 1
-
/datum/job/psychiatrist
title = "Psychiatrist"
flag = PSYCHIATRIST
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 5cdbeaf95ee..d83fd5407ae 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -133,3 +133,33 @@
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/suit/storage/toggle/labcoat(H), slot_wear_suit)
return 1
+
+/datum/job/geneticist
+ title = "Geneticist"
+ flag = GENETICIST
+ department = "Science"
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 2
+ spawn_positions = 2
+ supervisors = "the research director"
+ selection_color = "#ffeeff"
+ economic_modifier = 7
+ access = list(access_genetics, access_tox, access_tox_storage, access_morgue, access_research)
+ minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
+
+
+ equip(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel/gen(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
+ return 1
\ No newline at end of file
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 576dd761297..cd1955fd45d 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -98,11 +98,10 @@
department = "Security"
department_flag = ENGSEC
faction = "Station"
- total_positions = 2
- spawn_positions = 2
+ total_positions = 1
+ spawn_positions = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
- alt_titles = list("Forensic Technician")
economic_modifier = 5
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
@@ -125,20 +124,57 @@
else
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(H), slot_l_store)
- if(H.backbag == 1)//Why cant some of these things spawn in his office?
+ if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand)
else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
- if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician")
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit, slot_r_hand)
+
+
+/datum/job/forensics
+ title = "Forensic Technician"
+ flag = FORENSICS
+ department_flag = ENGSEC
+ faction = "Station"
+ total_positions = 1
+ spawn_positions = 1
+ supervisors = "the head of security"
+ selection_color = "#ffeeee"
+ economic_modifier = 5
+ access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
+ minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
+ alt_titles = list("Crime Scene Investigator")
+ minimal_player_age = 3
+ equip(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/duffel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/det/slob(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
+ if(H.species.name == "Tajaran")
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black/tajara(H), slot_gloves)
+ if(H.species.name == "Unathi")
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black/unathi(H), slot_gloves)
else
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_trench(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/det(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ if(H.mind.role_alt_title && H.mind.role_alt_title == "Crime Scene Investigator")
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/det_suit(H), slot_wear_suit)
+ else
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
+
return 1
-
-
/datum/job/officer
title = "Security Officer"
flag = OFFICER
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index 798ad177407..6d2a407296f 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -191,7 +191,7 @@ var/global/datum/controller/occupations/job_master
SetupOccupations()
//Holder for Triumvirate is stored in the ticker, this just processes it
- if(ticker && ticker.triai)
+ if(SSticker.triai)
for(var/datum/job/A in occupations)
if(A.title == "AI")
A.spawn_positions = 3
@@ -246,7 +246,7 @@ var/global/datum/controller/occupations/job_master
// Loop through all jobs
for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY
- if(!job || (job.title in ticker.mode.disabled_jobs) ) //11/2/16
+ if(!job || (job.title in SSticker.mode.disabled_jobs) ) //11/2/16
continue
if(jobban_isbanned(player, job.title))
@@ -309,56 +309,57 @@ var/global/datum/controller/occupations/job_master
return 1
- proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0)
- if(!H) return null
+ proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0,var/megavend = 0)
+ if(!H)
+ return null
var/datum/job/job = GetJob(rank)
var/list/spawn_in_storage = list()
if(job)
- //Equip custom gear loadout.
var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage.
var/list/custom_equip_leftovers = list()
- if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI")
-
- for(var/thing in H.client.prefs.gear)
- var/datum/gear/G = gear_datums[thing]
- if(G)
- var/permitted
- if(G.allowed_roles)
- for(var/job_name in G.allowed_roles)
- if(job.title == job_name)
- permitted = 1
- else
- permitted = 1
-
- if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
- permitted = 0
-
- if(!permitted)
- H << "Your current job or whitelist status does not permit you to spawn with [thing]! "
- continue
-
- if(G.slot && !(G.slot in custom_equip_slots))
- // This is a miserable way to fix the loadout overwrite bug, but the alternative requires
- // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z
- var/metadata = H.client.prefs.gear[G.display_name]
- if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
- custom_equip_leftovers += thing
- else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
- H << "Equipping you with \the [thing]! "
- custom_equip_slots.Add(G.slot)
- else
- custom_equip_leftovers.Add(thing)
- else
- spawn_in_storage += thing
//Equip job items.
job.equip(H)
- job.setup_account(H)
- job.equip_backpack(H)
- job.equip_survival(H)
job.apply_fingerprints(H)
+ if(!megavend)//Equip custom gear loadout.
+ job.equip_backpack(H)
+ job.equip_survival(H)
+ job.setup_account(H)
+ if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI")
+
+ for(var/thing in H.client.prefs.gear)
+ var/datum/gear/G = gear_datums[thing]
+ if(G)
+ var/permitted
+ if(G.allowed_roles)
+ for(var/job_name in G.allowed_roles)
+ if(job.title == job_name)
+ permitted = 1
+ else
+ permitted = 1
+
+ if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
+ permitted = 0
+
+ if(!permitted)
+ H << "Your current job or whitelist status does not permit you to spawn with [thing]! "
+ continue
+
+ if(G.slot && !(G.slot in custom_equip_slots))
+ // This is a miserable way to fix the loadout overwrite bug, but the alternative requires
+ // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z
+ var/metadata = H.client.prefs.gear[G.display_name]
+ if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
+ custom_equip_leftovers += thing
+ else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
+ H << "Equipping you with \the [thing]! "
+ custom_equip_slots.Add(G.slot)
+ else
+ custom_equip_leftovers.Add(thing)
+ else
+ spawn_in_storage += thing
// Randomize nutrition. (Between 50-100% of max.)
H.nutrition = (rand(50, 100) * 0.01) * H.max_nutrition
@@ -422,7 +423,7 @@ var/global/datum/controller/occupations/job_master
if("AI")
return H
if("Captain")
- var/sound/announce_sound = (ticker.current_state <= GAME_STATE_SETTING_UP)? null : sound('sound/misc/boatswain.ogg', volume=20)
+ var/sound/announce_sound = (SSticker.current_state <= GAME_STATE_SETTING_UP)? null : sound('sound/misc/boatswain.ogg', volume=20)
captain_announcement.Announce("All hands, Captain [H.real_name] on deck!", new_sound=announce_sound)
//Deferred item spawning.
@@ -441,7 +442,7 @@ var/global/datum/controller/occupations/job_master
else
H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug. "
- if(istype(H)) //give humans wheelchairs, if they need them.
+ if(istype(H) && !megavend) //give humans wheelchairs, if they need them.
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
if(!l_foot || !r_foot)
@@ -465,6 +466,122 @@ var/global/datum/controller/occupations/job_master
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. "
+ //Gives glasses to the vision impaired
+ if(H.disabilities & NEARSIGHTED && !megavend)
+ var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses)
+ if(equipped != 1)
+ var/obj/item/clothing/glasses/G = H.glasses
+ G.prescription = 1
+
+ BITSET(H.hud_updateflag, ID_HUD)
+ BITSET(H.hud_updateflag, IMPLOYAL_HUD)
+ BITSET(H.hud_updateflag, SPECIALROLE_HUD)
+ return H
+
+ proc/EquipPersonal(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0,var/spawning_at)
+ if(!H)
+ return null
+
+ switch(rank)
+ if("Cyborg")
+ return EquipRank(H, rank, 1)
+ if("AI")
+ return EquipRank(H, rank, 1)
+ if(spawning_at != "Arrivals Shuttle")
+ return EquipRank(H, rank, 1)
+
+ var/datum/job/job = GetJob(rank)
+ var/list/spawn_in_storage = list()
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/handle_player_despawn, H), 15 MINUTES)
+
+ if(job)
+
+ //Equip custom gear loadout.
+ var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage.
+ var/list/custom_equip_leftovers = list()
+ if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI")
+
+ for(var/thing in H.client.prefs.gear)
+ var/datum/gear/G = gear_datums[thing]
+ if(G)
+ var/permitted
+ if(G.allowed_roles)
+ for(var/job_name in G.allowed_roles)
+ if(job.title == job_name)
+ permitted = 1
+ else
+ permitted = 1
+
+ if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted]))
+ permitted = 0
+
+ if(!permitted)
+ H << "Your current job or whitelist status does not permit you to spawn with [thing]! "
+ continue
+
+ if(G.slot && !(G.slot in custom_equip_slots))
+ // This is a miserable way to fix the loadout overwrite bug, but the alternative requires
+ // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z
+ var/metadata = H.client.prefs.gear[G.display_name]
+ if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head)
+ custom_equip_leftovers += thing
+ else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
+ H << "Equipping you with \the [thing]! "
+ custom_equip_slots.Add(G.slot)
+ else
+ custom_equip_leftovers.Add(thing)
+ else
+ spawn_in_storage += thing
+ //Equip job items.
+ job.late_equip(H)
+ job.equip_backpack(H)
+ job.equip_survival(H)
+ job.setup_account(H)
+ job.apply_fingerprints(H)
+
+ //If some custom items could not be equipped before, try again now.
+ for(var/thing in custom_equip_leftovers)
+ var/datum/gear/G = gear_datums[thing]
+ if(G.slot in custom_equip_slots)
+ spawn_in_storage += thing
+ else
+ var/metadata = H.client.prefs.gear[G.display_name]
+ if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
+ H << "Equipping you with \the [thing]! "
+ custom_equip_slots.Add(G.slot)
+ else
+ spawn_in_storage += thing
+ else
+ H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator."
+
+ H.job = rank
+
+ if(spawn_in_storage && spawn_in_storage.len)
+ var/obj/item/weapon/storage/B
+ for(var/obj/item/weapon/storage/S in H.contents)
+ B = S
+ break
+
+ if(!isnull(B))
+ for(var/thing in spawn_in_storage)
+ H << "Placing \the [thing] in your [B.name]! "
+ var/datum/gear/G = gear_datums[thing]
+ var/metadata = H.client.prefs.gear[G.display_name]
+ G.spawn_item(B, metadata)
+ else
+ H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug. "
+
+ if(istype(H)) //give humans wheelchairs, if they need them.
+ var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
+ var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
+ if(!l_foot || !r_foot)
+ var/obj/structure/bed/chair/wheelchair/W = new /obj/structure/bed/chair/wheelchair(H.loc)
+ H.buckled = W
+ H.update_canmove()
+ W.set_dir(H.dir)
+ W.buckled_mob = H
+ W.add_fingerprint(H)
+
//Gives glasses to the vision impaired
if(H.disabilities & NEARSIGHTED)
var/equipped = H.equip_to_slot_or_del(new /obj/item/clothing/glasses/regular(H), slot_glasses)
@@ -601,7 +718,66 @@ var/global/datum/controller/occupations/job_master
else
H << "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead."
H.loc = pick(latejoin)
- . = "has arrived on the station"
+ . = "is inbound from the NTCC Odin"
else
H.loc = pick(latejoin)
- . = "has arrived on the station"
+ . = "is inbound from the NTCC Odin"
+
+/proc/handle_player_despawn(var/mob/living/carbon/human/H)
+ if(istype(get_area(H), /area/centcom/spawning))
+ if(!H.client)
+ despawn_mob(H)
+ else
+ var/datum/spawnpoint/spawnpos = spawntypes["Cryogenic Storage"]
+
+ if(spawnpos && istype(spawnpos))
+ H << "You come to the sudden realization that you never left the Aurora at all! You were in cryo the whole time! "
+ H.loc = pick(spawnpos.turfs)
+ global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], [spawnpos.msg].", "Cryogenic Oversight")
+ else
+ despawn_mob(H) //somehow they can't spawn at cryo, so this is the only recourse of action.
+
+/proc/despawn_mob(var/mob/living/carbon/human/H)
+ //Update any existing objectives involving this mob.
+ for(var/datum/objective/O in all_objectives)
+ // We don't want revs to get objectives that aren't for heads of staff. Letting
+ // them win or lose based on cryo is silly so we remove the objective.
+ if(O.target == H.mind)
+ if(O.owner && O.owner.current)
+ O.owner.current << "You get the feeling your target is no longer within your reach... "
+ qdel(O)
+
+ //Handle job slot/tater cleanup.
+ if (H.mind)
+ var/job = H.mind.assigned_role
+
+ job_master.FreeRole(job)
+
+ if(H.mind.objectives.len)
+ qdel(H.mind.objectives)
+ H.mind.special_role = null
+
+ // Delete them from datacore.
+
+ if(PDA_Manifest.len)
+ PDA_Manifest.Cut()
+ for(var/datum/data/record/R in data_core.medical)
+ if ((R.fields["name"] == H.real_name))
+ qdel(R)
+ for(var/datum/data/record/T in data_core.security)
+ if ((T.fields["name"] == H.real_name))
+ qdel(T)
+ for(var/datum/data/record/G in data_core.general)
+ if ((G.fields["name"] == H.real_name))
+ qdel(G)
+
+ log_and_message_admins("[key_name(H)] ([H.mind.role_alt_title]) entered cryostorage.")
+
+ global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], has entered long-term storage.", "NTCC Odin Cryogenic Oversight")
+ H.visible_message("[H.name] makes their way to the Odin's cryostorage, and departs. ", 3)
+
+ //This should guarantee that ghosts don't spawn.
+ H.ckey = null
+
+ // Delete the mob.
+ qdel(H)
diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm
index 7383e1c7bb8..1ad2c4fccdf 100644
--- a/code/game/jobs/jobs.dm
+++ b/code/game/jobs/jobs.dm
@@ -13,6 +13,7 @@ var/const/AI =(1<<8)
var/const/CYBORG =(1<<9)
var/const/INTERN_SEC =(1<<10)
var/const/INTERN_ENG =(1<<11)
+var/const/FORENSICS =(1<<12)
var/const/MEDSCI =(1<<1)
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm
index ac736ddfe29..53d0cbf6848 100644
--- a/code/game/machinery/Beacon.dm
+++ b/code/game/machinery/Beacon.dm
@@ -23,7 +23,7 @@
Destroy()
if(Beacon)
qdel(Beacon)
- ..()
+ return ..()
// update the invisibility and icon
hide(var/intact)
diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm
index 98e6e7999da..e85c813c0c0 100644
--- a/code/game/machinery/CableLayer.dm
+++ b/code/game/machinery/CableLayer.dm
@@ -9,10 +9,10 @@
var/max_cable = 100
var/on = 0
-/obj/machinery/cablelayer/New()
+/obj/machinery/cablelayer/Initialize()
+ . = ..()
cable = new(src)
cable.amount = 100
- ..()
/obj/machinery/cablelayer/Move(new_turf,M_Dir)
..()
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index de7dd161c44..505466d7908 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -13,15 +13,13 @@
var/obj/machinery/computer/operating/computer = null
-/obj/machinery/optable/New()
- ..()
+/obj/machinery/optable/Initialize()
+ . = ..()
for(dir in list(NORTH,EAST,SOUTH,WEST))
computer = locate(/obj/machinery/computer/operating, get_step(src, dir))
if (computer)
computer.table = src
break
-// spawn(100) //Wont the MC just call this process() before and at the 10 second mark anyway?
-// process()
/obj/machinery/optable/ex_act(severity)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index d255f9f2a98..f5a72b84713 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -20,7 +20,8 @@
..()
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
-/obj/machinery/sleeper/initialize()
+/obj/machinery/sleeper/Initialize()
+ . = ..()
update_icon()
/obj/machinery/sleeper/process()
diff --git a/code/game/machinery/abstract/abstract.dm b/code/game/machinery/abstract/abstract.dm
index 675113713d3..9b864835b40 100644
--- a/code/game/machinery/abstract/abstract.dm
+++ b/code/game/machinery/abstract/abstract.dm
@@ -11,7 +11,6 @@
desc = "No matter how hard you look at it, you have no idea what it is. (please inform coders if you see this)"
simulated = FALSE
anchored = 1
- var/should_process = FALSE
mouse_opacity = 0
/obj/machinery/abstract/attack_ai(mob/user as mob)
@@ -40,8 +39,3 @@
/obj/machinery/abstract/operable(additional_flags = 0)
return TRUE
-
-/obj/machinery/abstract/get_process_type()
- . = ..()
- if (!should_process)
- . &= ~M_PROCESSES
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 8f29f56ead1..412b197cb0e 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -30,7 +30,8 @@
/obj/machinery/bodyscanner/Destroy()
// So the GC can qdel this.
- src.connected.connected = null
+ if (connected)
+ connected.connected = null
return ..()
/obj/machinery/bodyscanner/relaymove(mob/user as mob)
@@ -240,7 +241,8 @@
anchored = 1
/obj/machinery/body_scanconsole/Destroy()
- src.connected.connected = null
+ if (connected)
+ connected.connected = null
return ..()
/obj/machinery/body_scanconsole/power_change()
@@ -265,13 +267,10 @@
return collapse_desc
-/obj/machinery/body_scanconsole/New()
- ..()
- spawn(5)
- src.connected = locate(/obj/machinery/bodyscanner, get_step(src, WEST))
- src.connected.connected = src
- return
- return
+/obj/machinery/body_scanconsole/Initialize()
+ . = ..()
+ src.connected = locate(/obj/machinery/bodyscanner, get_step(src, WEST))
+ src.connected.connected = src
/obj/machinery/body_scanconsole/attack_ai(user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index ecdea629406..31721f2e2cc 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -106,8 +106,8 @@
/obj/machinery/alarm/cold
target_temperature = T0C + 5
-/obj/machinery/alarm/server/New()
- ..()
+/obj/machinery/alarm/server/Initialize()
+ . = ..()
TLV["oxygen"] = list(-1.0, -1.0,-1.0,-1.0) // Partial pressure, kpa
TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
TLV["phoron"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa
@@ -119,15 +119,15 @@
//While temperature stabilises.
//Kitchen freezer
-/obj/machinery/alarm/freezer/New()
- ..()
+/obj/machinery/alarm/freezer/Initialize()
+ . = ..()
TLV["oxygen"] = list(16, 17, 135, 140) // Partial pressure, kpa
TLV["pressure"] = list(ONE_ATMOSPHERE*0.50,ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20)
TLV["temperature"] = list(0, 0, 273, T0C+40) // No lower limits. Alarm above 0c. Major alarm at harmful heat
//Refridgerated area, cold but above-freezing
-/obj/machinery/alarm/cold/New()
- ..()
+/obj/machinery/alarm/cold/Initialize()
+ . = ..()
TLV["pressure"] = list(ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */
TLV["temperature"] = list(247, 273, 288, T0C+40) // Shouldn't go below 0
@@ -137,13 +137,13 @@
wires = null
return ..()
-/obj/machinery/alarm/New(var/loc, var/dir, var/building = 0)
- ..()
+/obj/machinery/alarm/LateInitialize()
+ apply_mode()
+
+/obj/machinery/alarm/Initialize(mapload, var/dir, var/building = 0)
+ . = ..()
if(building)
- if(loc)
- src.loc = loc
-
if(dir)
src.set_dir(dir)
@@ -156,6 +156,12 @@
first_run()
+ set_frequency(frequency)
+ if (!master_is_operating())
+ elect_master()
+
+ return INITIALIZE_HINT_LATELOAD
+
/obj/machinery/alarm/proc/first_run()
alarm_area = get_area(src)
area_uid = alarm_area.uid
@@ -180,12 +186,6 @@
TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */
TLV["temperature"] = list(T0C-26, T0C, T0C+40, T0C+66) // K
-
-/obj/machinery/alarm/initialize()
- set_frequency(frequency)
- if (!master_is_operating())
- elect_master()
-
/obj/machinery/alarm/process()
if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2)
return
@@ -363,46 +363,6 @@
set_light(l_range = L_WALLMOUNT_RANGE, l_power = L_WALLMOUNT_POWER, l_color = new_color)
-/obj/machinery/alarm/receive_signal(datum/signal/signal)
- if(stat & (NOPOWER|BROKEN))
- return
- if (alarm_area.master_air_alarm != src)
- if (master_is_operating())
- return
- elect_master()
- if (alarm_area.master_air_alarm != src)
- return
- if(!signal || signal.encryption)
- return
- var/id_tag = signal.data["tag"]
- if (!id_tag)
- return
- if (signal.data["area"] != area_uid)
- return
- if (signal.data["sigtype"] != "status")
- return
-
- var/dev_type = signal.data["device"]
- if(!(id_tag in alarm_area.air_scrub_names) && !(id_tag in alarm_area.air_vent_names))
- register_env_machine(id_tag, dev_type)
- if(dev_type == "AScr")
- alarm_area.air_scrub_info[id_tag] = signal.data
- else if(dev_type == "AVP")
- alarm_area.air_vent_info[id_tag] = signal.data
-
-/obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type)
- var/new_name
- if (device_type=="AVP")
- new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]"
- alarm_area.air_vent_names[m_id] = new_name
- else if (device_type=="AScr")
- new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]"
- alarm_area.air_scrub_names[m_id] = new_name
- else
- return
- spawn (10)
- send_signal(m_id, list("init" = new_name) )
-
/obj/machinery/alarm/proc/refresh_all()
for(var/id_tag in alarm_area.air_vent_names)
var/list/I = alarm_area.air_vent_info[id_tag]
@@ -413,12 +373,12 @@
var/list/I = alarm_area.air_scrub_info[id_tag]
if (I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
continue
- send_signal(id_tag, list("status") )
+ send_signal(id_tag, list("status"))
/obj/machinery/alarm/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_TO_AIRALARM)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM)
/obj/machinery/alarm/proc/send_signal(var/target, var/list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise
if(!radio_connection)
@@ -481,7 +441,7 @@
update_icon()
/obj/machinery/alarm/proc/post_alert(alert_level)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(alarm_frequency)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency)
if(!frequency)
return
@@ -864,7 +824,7 @@
return
else if(istype(W, /obj/item/weapon/wrench))
- user << "You remove the fire alarm assembly from the wall!"
+ user << "You remove the air alarm assembly from the wall!"
new /obj/item/frame/air_alarm(get_turf(user))
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
qdel(src)
@@ -873,8 +833,7 @@
/obj/machinery/alarm/power_change()
..()
- spawn(rand(0,15))
- update_icon()
+ queue_icon_update()
/obj/machinery/alarm/examine(mob/user)
..(user)
diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm
index 8788ddff63d..f4a80a25efb 100644
--- a/code/game/machinery/atmo_control.dm
+++ b/code/game/machinery/atmo_control.dm
@@ -61,17 +61,18 @@
/obj/machinery/air_sensor/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/air_sensor/initialize()
+/obj/machinery/air_sensor/Initialize()
+ . = ..()
set_frequency(frequency)
obj/machinery/air_sensor/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src,frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src,frequency)
+ return ..()
/obj/machinery/computer/general_air_control
icon = 'icons/obj/computer.dmi'
@@ -88,9 +89,9 @@ obj/machinery/air_sensor/Destroy()
circuit = /obj/item/weapon/circuitboard/air_management
obj/machinery/computer/general_air_control/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src, frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, frequency)
+ return ..()
/obj/machinery/computer/general_air_control/attack_hand(mob/user)
if(..(user))
@@ -150,11 +151,12 @@ obj/machinery/computer/general_air_control/Destroy()
return output
/obj/machinery/computer/general_air_control/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
-/obj/machinery/computer/general_air_control/initialize()
+/obj/machinery/computer/general_air_control/Initialize()
+ . = ..()
set_frequency(frequency)
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index 68062fc9683..1bbc923923a 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -13,11 +13,10 @@
//Simple variable to prevent me from doing attack_hand in both this and the child computer
var/zone = "This computer is working on a wireless range, the range is currently limited to 25 meters."
- New()
- ..()
- //So the scrubbers have time to spawn
- spawn(10)
- scanscrubbers()
+ Initialize()
+ . = ..()
+
+ scanscrubbers()
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index ba089d2585d..ccba5d9a523 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -133,7 +133,7 @@ update_flag
*/
if (src.destroyed)
- src.overlays = 0
+ cut_overlays()
src.icon_state = text("[]-1", src.canister_color)
return
@@ -143,20 +143,20 @@ update_flag
if(check_change()) //Returns 1 if no change needed to icons.
return
- src.overlays = 0
+ cut_overlays()
if(update_flag & 1)
- overlays += "can-open"
+ add_overlay("can-open")
if(update_flag & 2)
- overlays += "can-connector"
+ add_overlay("can-connector")
if(update_flag & 4)
- overlays += "can-o0"
+ add_overlay("can-o0")
if(update_flag & 8)
- overlays += "can-o1"
+ add_overlay("can-o1")
else if(update_flag & 16)
- overlays += "can-o2"
+ add_overlay("can-o2")
else if(update_flag & 32)
- overlays += "can-o3"
+ add_overlay("can-o3")
return
/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -386,36 +386,32 @@ update_flag
return 1
-/obj/machinery/portable_atmospherics/canister/phoron/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/phoron/Initialize()
+ . = ..()
src.air_contents.adjust_gas("phoron", MolesForPressure())
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/oxygen/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/oxygen/Initialize()
+ . = ..()
src.air_contents.adjust_gas("oxygen", MolesForPressure())
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/oxygen/prechilled/Initialize()
+ . = ..()
src.air_contents.temperature = 80
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/sleeping_agent/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/sleeping_agent/Initialize()
+ . = ..()
air_contents.adjust_gas("sleeping_agent", MolesForPressure())
src.update_icon()
- return 1
//Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0
-/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/Initialize()
+ . = ..()
air_contents.gas["sleeping_agent"] = 9*4000
spawn(10)
var/turf/simulated/location = src.loc
@@ -424,52 +420,41 @@ update_flag
sleep(10)
location.assume_air(air_contents)
air_contents = new
- return 1
-/obj/machinery/portable_atmospherics/canister/nitrogen/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/nitrogen/Initialize()
+ . = ..()
src.air_contents.adjust_gas("nitrogen", MolesForPressure())
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/nitrogen/prechilled/Initialize()
+ . = ..()
src.air_contents.temperature = 80
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide/Initialize()
+ . = ..()
src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure())
src.update_icon()
- return 1
-
-/obj/machinery/portable_atmospherics/canister/air/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/air/Initialize()
+ . = ..()
var/list/air_mix = StandardAirMix()
src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"])
src.update_icon()
- return 1
-
-
// Special types used for engine setup admin verb, they contain double amount of that of normal canister.
-/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup/Initialize()
+ . = ..()
src.air_contents.adjust_gas("nitrogen", MolesForPressure())
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide/engine_setup/Initialize()
+ . = ..()
src.air_contents.adjust_gas("carbon_dioxide", MolesForPressure())
src.update_icon()
- return 1
-/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/New()
- ..()
+/obj/machinery/portable_atmospherics/canister/phoron/engine_setup/Initialize()
+ . = ..()
src.air_contents.adjust_gas("phoron", MolesForPressure())
src.update_icon()
- return 1
diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm
index e2a0aed826a..8d46f89e3a0 100644
--- a/code/game/machinery/atmoalter/meter.dm
+++ b/code/game/machinery/atmoalter/meter.dm
@@ -11,12 +11,9 @@
use_power = 1
idle_power_usage = 15
-/obj/machinery/meter/New()
- ..()
- src.target = locate(/obj/machinery/atmospherics/pipe) in loc
- return 1
-/obj/machinery/meter/initialize()
+/obj/machinery/meter/Initialize()
+ . = ..()
if (!target)
src.target = locate(/obj/machinery/atmospherics/pipe) in loc
@@ -50,7 +47,7 @@
icon_state = "meter4"
if(frequency)
- var/datum/radio_frequency/radio_connection = radio_controller.return_frequency(frequency)
+ var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency)
if(!radio_connection) return
@@ -108,13 +105,9 @@
// TURF METER - REPORTS A TILE'S AIR CONTENTS
-/obj/machinery/meter/turf/New()
- ..()
+/obj/machinery/meter/turf/Initialize()
+ . = ..()
src.target = loc
- return 1
-
-
-/obj/machinery/meter/turf/initialize()
if (!target)
src.target = loc
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index 6081e40089c..8fd169e7359 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -12,26 +12,21 @@
var/start_pressure = ONE_ATMOSPHERE
var/maximum_pressure = 90 * ONE_ATMOSPHERE
-/obj/machinery/portable_atmospherics/New()
- ..()
-
- air_contents.volume = volume
- air_contents.temperature = T20C
-
- return 1
-
/obj/machinery/portable_atmospherics/Destroy()
qdel(air_contents)
qdel(holding)
- ..()
+ return ..()
-/obj/machinery/portable_atmospherics/initialize()
+/obj/machinery/portable_atmospherics/Initialize()
. = ..()
- spawn()
- var/obj/machinery/atmospherics/portables_connector/port = locate() in loc
- if(port)
- connect(port)
- update_icon()
+
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+
+ var/obj/machinery/atmospherics/portables_connector/port = locate() in loc
+ if(port)
+ connect(port)
+ update_icon()
/obj/machinery/portable_atmospherics/process()
if(!connected_port) //only react when pipe_network will ont it do it for you
@@ -43,7 +38,7 @@
/obj/machinery/portable_atmospherics/Destroy()
qdel(air_contents)
- ..()
+ return ..()
/obj/machinery/portable_atmospherics/proc/StandardAirMix()
return list(
diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm
index 90ce07d6eaa..95266dcf664 100644
--- a/code/game/machinery/atmoalter/pump.dm
+++ b/code/game/machinery/atmoalter/pump.dm
@@ -22,15 +22,15 @@
/obj/machinery/portable_atmospherics/powered/pump/filled
start_pressure = 90 * ONE_ATMOSPHERE
-/obj/machinery/portable_atmospherics/powered/pump/New()
- ..()
+/obj/machinery/portable_atmospherics/powered/pump/Initialize()
+ . = ..()
cell = new/obj/item/weapon/cell/apc(src)
var/list/air_mix = StandardAirMix()
src.air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"])
/obj/machinery/portable_atmospherics/powered/pump/update_icon()
- src.overlays = 0
+ cut_overlays()
if(on && cell && cell.charge)
icon_state = "psiphon:1"
@@ -38,10 +38,10 @@
icon_state = "psiphon:0"
if(holding)
- overlays += "siphon-open"
+ add_overlay("siphon-open")
if(connected_port)
- overlays += "siphon-connector"
+ add_overlay("siphon-connector")
return
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index 35cbbc8d21c..4a19f52b769 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -20,8 +20,8 @@
var/list/scrubbing_gas = list("phoron", "carbon_dioxide", "sleeping_agent")
-/obj/machinery/portable_atmospherics/powered/scrubber/New()
- ..()
+/obj/machinery/portable_atmospherics/powered/scrubber/Initialize()
+ . = ..()
cell = new/obj/item/weapon/cell/apc(src)
/obj/machinery/portable_atmospherics/powered/scrubber/emp_act(severity)
@@ -36,7 +36,7 @@
..(severity)
/obj/machinery/portable_atmospherics/powered/scrubber/update_icon()
- src.overlays = 0
+ cut_overlays()
if(on && cell && cell.charge)
icon_state = "pscrubber:1"
@@ -44,10 +44,10 @@
icon_state = "pscrubber:0"
if(holding)
- overlays += "scrubber-open"
+ add_overlay("scrubber-open")
if(connected_port)
- overlays += "scrubber-connector"
+ add_overlay("scrubber-connector")
return
@@ -157,9 +157,9 @@
var/global/gid = 1
var/id = 0
-/obj/machinery/portable_atmospherics/powered/scrubber/huge/New()
- ..()
- cell = null
+/obj/machinery/portable_atmospherics/powered/scrubber/huge/Initialize()
+ . = ..()
+ QDEL_NULL(cell)
id = gid
gid++
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index e4f4a013f6a..cf049bd23f7 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -24,9 +24,8 @@
var/datum/wires/autolathe/wires = null
-/obj/machinery/autolathe/New()
-
- ..()
+/obj/machinery/autolathe/Initialize()
+ . = ..()
wires = new(src)
//Create parts for lathe.
component_parts = list()
diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm
index e28209268bb..03199f4b286 100644
--- a/code/game/machinery/autolathe_datums.dm
+++ b/code/game/machinery/autolathe_datums.dm
@@ -6,12 +6,16 @@
//Create global autolathe recipe list if it hasn't been made already.
autolathe_recipes = list()
autolathe_categories = list()
- for(var/R in typesof(/datum/autolathe/recipe)-/datum/autolathe/recipe)
+ for(var/R in subtypesof(/datum/autolathe/recipe))
var/datum/autolathe/recipe/recipe = new R
autolathe_recipes += recipe
autolathe_categories |= recipe.category
var/obj/item/I = new recipe.path
+ // Since this runs before SSatoms runs, we've got to force initialization manually.
+ if (!I.initialized)
+ SSatoms.InitAtom(I, list(TRUE))
+
if(I.matter && !recipe.resources) //This can be overidden in the datums.
recipe.resources = list()
for(var/material in I.matter)
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index b1f76e21e6b..5fcb4e66686 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -16,8 +16,8 @@
var/capacity = 50
-/obj/machinery/biogenerator/New()
- ..()
+/obj/machinery/biogenerator/Initialize()
+ . = ..()
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
R.my_atom = src
@@ -73,6 +73,9 @@
if(i >= capacity)
user << "You fill \the [src] to its capacity. "
break
+
+ CHECK_TICK
+
if(i < capacity)
user << "You empty \the [O] into \the [src]. "
@@ -154,6 +157,7 @@
points += 1
else points += I.reagents.get_reagent_amount("nutriment") * 10 * eat_eff
qdel(I)
+ CHECK_TICK
if(S)
processing = 1
update_icon()
diff --git a/code/game/machinery/bluespacerelay.dm b/code/game/machinery/bluespacerelay.dm
index 4f7ab82207c..d07d12d865f 100644
--- a/code/game/machinery/bluespacerelay.dm
+++ b/code/game/machinery/bluespacerelay.dm
@@ -25,8 +25,8 @@
else
icon_state = "[initial(icon_state)]_off"
-/obj/machinery/bluespacerelay/New()
- ..()
+/obj/machinery/bluespacerelay/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/bluespacerelay(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
@@ -34,6 +34,7 @@
component_parts += new /obj/item/weapon/stock_parts/subspace/filter(src)
component_parts += new /obj/item/weapon/stock_parts/subspace/crystal(src)
component_parts += new /obj/item/stack/cable_coil(src, 30)
+
/obj/machinery/bluespacerelay/proc/update_power()
if(stat & (BROKEN|NOPOWER|EMPED))
@@ -49,4 +50,4 @@
if(default_part_replacement(user, O))
return
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm
index 1b892c3911c..7709c309493 100644
--- a/code/game/machinery/bots/bots.dm
+++ b/code/game/machinery/bots/bots.dm
@@ -110,22 +110,23 @@
/obj/machinery/bot/emp_act(severity)
var/was_on = on
stat |= EMPED
- var/obj/effect/overlay/pulse2 = getFromPool(/obj/effect/overlay, src.loc )
+ var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(src.loc)
pulse2.icon = 'icons/effects/effects.dmi'
pulse2.icon_state = "empdisable"
pulse2.name = "emp sparks"
pulse2.anchored = 1
pulse2.set_dir(pick(cardinal))
- spawn(10)
- qdel(pulse2)
+ QDEL_IN(pulse2, 10)
+
if (on)
turn_off()
- spawn(severity*300)
- stat &= ~EMPED
- if (was_on)
- turn_on()
+ addtimer(CALLBACK(src, .proc/post_emp, was_on), severity * 300)
+/obj/machinery/bot/proc/post_emp(was_on)
+ stat &= ~EMPED
+ if (was_on)
+ turn_on()
/obj/machinery/bot/attack_ai(mob/user as mob)
src.attack_hand(user)
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index 822770afe96..4d474e27972 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -55,34 +55,32 @@
var/bloodiness = 0 // count of bloodiness
-/obj/machinery/bot/mulebot/New()
- ..()
+/obj/machinery/bot/mulebot/Initialize()
+ . = ..()
wires = new(src)
botcard = new(src)
botcard.access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
cell = new(src)
cell.charge = 2000
cell.maxcharge = 2000
+ if(SSradio)
+ SSradio.add_object(src, control_freq, filter = RADIO_MULEBOT)
+ SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
- spawn(5) // must wait for map loading to finish
- if(radio_controller)
- radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT)
- radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
-
- var/count = 0
- for(var/obj/machinery/bot/mulebot/other in world)
- count++
- if(!suffix)
- suffix = "#[count]"
- name = "Mulebot ([suffix])"
+ var/count = 0
+ for(var/obj/machinery/bot/mulebot/other in world)
+ count++
+ if(!suffix)
+ suffix = "#[count]"
+ name = "Mulebot ([suffix])"
/obj/machinery/bot/mulebot/Destroy()
unload(0)
qdel(wires)
wires = null
- if(radio_controller)
- radio_controller.remove_object(src,beacon_freq)
- radio_controller.remove_object(src,control_freq)
+ if(SSradio)
+ SSradio.remove_object(src,beacon_freq)
+ SSradio.remove_object(src,control_freq)
return ..()
// attack by item
@@ -821,7 +819,7 @@
if(freq == control_freq && !wires.RemoteTX())
return
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(freq)
if(!frequency) return
@@ -870,8 +868,8 @@
var/turf/Tsec = get_turf(src)
new /obj/item/device/assembly/prox_sensor(Tsec)
- getFromPool(/obj/item/stack/rods, Tsec)
- getFromPool(/obj/item/stack/rods, Tsec)
+ new /obj/item/stack/rods(Tsec)
+ new /obj/item/stack/rods(Tsec)
new /obj/item/stack/cable_coil/cut(Tsec)
if (cell)
cell.loc = Tsec
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 99df45a1491..beccbdae8ac 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -13,8 +13,8 @@
var/_wifi_id
var/datum/wifi/sender/wifi_sender
-/obj/machinery/button/initialize()
- ..()
+/obj/machinery/button/Initialize()
+ . = ..()
update_icon()
if(_wifi_id && !wifi_sender)
wifi_sender = new/datum/wifi/sender/button(_wifi_id, src)
@@ -114,17 +114,18 @@
/obj/machinery/button/mass_driver
name = "mass driver button"
-/obj/machinery/button/mass_driver/initialize()
+/obj/machinery/button/mass_driver/Initialize()
+ . = ..()
if(_wifi_id)
wifi_sender = new/datum/wifi/sender/mass_driver(_wifi_id, src)
- ..()
/obj/machinery/button/mass_driver/activate(mob/living/user)
if(active || !istype(wifi_sender))
return
active = 1
- use_power(5)
+ if(use_power)
+ use_power(active_power_usage)
update_icon()
wifi_sender.activate()
active = 0
@@ -159,10 +160,10 @@
else
icon_state = "doorctrl2"
-/obj/machinery/button/toggle/door/initialize()
+/obj/machinery/button/toggle/door/Initialize()
if(_wifi_id)
wifi_sender = new/datum/wifi/sender/door(_wifi_id, src)
- ..()
+ . = ..()
/obj/machinery/button/toggle/door/activate(mob/living/user)
if(operating || !istype(wifi_sender))
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 2327d816e23..b0291595683 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -35,10 +35,11 @@
var/affected_by_emp_until = 0
-/obj/machinery/camera/New()
+/obj/machinery/camera/Initialize()
wires = new(src)
assembly = new(src)
assembly.state = 4
+ SSmachinery.all_cameras += src
/* // Use this to look for cameras that have the same c_tag.
for(var/obj/machinery/camera/C in cameranet.cameras)
@@ -53,9 +54,10 @@
error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]")
ASSERT(src.network)
ASSERT(src.network.len > 0)
- ..()
+ return ..()
/obj/machinery/camera/Destroy()
+ SSmachinery.all_cameras -= src
deactivate(null, 0) //kick anyone viewing out
if(assembly)
qdel(assembly)
@@ -86,7 +88,6 @@
kick_viewers()
update_icon()
update_coverage()
- processing_objects |= src
/obj/machinery/camera/bullet_act(var/obj/item/projectile/P)
take_damage(P.get_structure_damage())
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index b93c976779b..df0a30fd86f 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -75,8 +75,8 @@ var/global/list/engineering_networks = list(
// EMP
-/obj/machinery/camera/emp_proof/New()
- ..()
+/obj/machinery/camera/emp_proof/Initialize()
+ . = ..()
upgradeEmpProof()
// X-RAY
@@ -93,14 +93,14 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/xray/research
network = list(NETWORK_RESEARCH)
-/obj/machinery/camera/xray/New()
- ..()
+/obj/machinery/camera/xray/Initialize()
+ . = ..()
upgradeXRay()
// MOTION
-/obj/machinery/camera/motion/New()
- ..()
+/obj/machinery/camera/motion/Initialize()
+ . = ..()
upgradeMotion()
/obj/machinery/camera/motion/engineering_outpost
@@ -115,8 +115,8 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/all/command
network = list(NETWORK_COMMAND)
-/obj/machinery/camera/all/New()
- ..()
+/obj/machinery/camera/all/Initialize()
+ . = ..()
upgradeEmpProof()
upgradeXRay()
upgradeMotion()
@@ -126,20 +126,19 @@ var/global/list/engineering_networks = list(
var/number = 0 //camera number in area
//This camera type automatically sets it's name to whatever the area that it's in is called.
-/obj/machinery/camera/autoname/New()
- ..()
- spawn(10)
- number = 1
- var/area/A = get_area(src)
- if(A)
- for(var/obj/machinery/camera/autoname/C in world)
- if(C == src) continue
- var/area/CA = get_area(C)
- if(CA.type == A.type)
- if(C.number)
- number = max(number, C.number+1)
- c_tag = "[A.name] #[number]"
- invalidateCameraCache()
+/obj/machinery/camera/autoname/Initialize()
+ . = ..()
+ number = 1
+ var/area/A = get_area(src)
+ if(A)
+ for(var/obj/machinery/camera/autoname/C in world)
+ if(C == src) continue
+ var/area/CA = get_area(C)
+ if(CA.type == A.type)
+ if(C.number)
+ number = max(number, C.number+1)
+ c_tag = "[A.name] #[number]"
+ invalidateCameraCache()
// CHECKS
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index cce88f74cd0..b52afdbd3cc 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -199,21 +199,11 @@
ai_camera_list()
/proc/camera_sort(list/L)
- var/obj/machinery/camera/a
- var/obj/machinery/camera/b
-
- for (var/i = L.len, i > 0, i--)
- for (var/j = 1 to i - 1)
- a = L[j]
- b = L[j + 1]
- if (a.c_tag_order != b.c_tag_order)
- if (a.c_tag_order > b.c_tag_order)
- L.Swap(j, j + 1)
- else
- if (sorttext(a.c_tag, b.c_tag) < 0)
- L.Swap(j, j + 1)
- return L
-
+ if (!L)
+ return
+ var/list/target = L.Copy()
+ // sortTim sorts in-place, but returns a ref to the list anyways.
+ return sortTim(target, /proc/cmp_camera, FALSE)
mob/living/proc/near_camera()
if (!isturf(loc))
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 58a0965b843..4b2621ae84e 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -22,12 +22,12 @@
if(chargelevel != newlevel)
- overlays.Cut()
- overlays += "ccharger-o[newlevel]"
+ cut_overlays()
+ add_overlay("ccharger-o[newlevel]")
chargelevel = newlevel
else
- overlays.Cut()
+ cut_overlays()
/obj/machinery/cell_charger/examine(mob/user)
if(!..(user, 5))
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 24001431ead..399287e5cdd 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -43,8 +43,8 @@
var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk
var/biomass = CLONE_BIOMASS * 3
-/obj/machinery/clonepod/New()
- ..()
+/obj/machinery/clonepod/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/clonepod(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index f59502a31ba..fa7f1ae1b36 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -11,8 +11,8 @@
var/mob/living/carbon/human/victim = null
var/obj/machinery/optable/table = null
-/obj/machinery/computer/operating/New()
- ..()
+/obj/machinery/computer/operating/Initialize()
+ . = ..()
for(dir in list(NORTH,EAST,SOUTH,WEST))
table = locate(/obj/machinery/optable, get_step(src, dir))
if (table)
diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm
index 3d45813923d..2319288dab3 100644
--- a/code/game/machinery/computer/RCON_Console.dm
+++ b/code/game/machinery/computer/RCON_Console.dm
@@ -22,7 +22,7 @@
/obj/machinery/computer/rcon/Destroy()
qdel(rcon)
rcon = null
- ..()
+ return ..()
// Proc: attack_hand()
// Parameters: 1 (user - Person which clicked this computer)
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 7241561d012..ba75ebc3ccc 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -190,7 +190,7 @@
/obj/structure/AIcore/deactivated/Destroy()
if(src in empty_playable_ai_cores)
empty_playable_ai_cores -= src
- ..()
+ return ..()
/obj/structure/AIcore/deactivated/proc/load_ai(var/mob/living/silicon/ai/transfer, var/obj/item/weapon/aicard/card, var/mob/user)
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index cd78a90dcc7..13d96e76872 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -30,15 +30,16 @@
/obj/item/toy/cultsword = 1
)
-/obj/machinery/computer/arcade/New()
- ..()
+/obj/machinery/computer/arcade/Initialize()
+ . = ..()
// If it's a generic arcade machine, pick a random arcade
// circuit board for it and make the new machine
if(!circuit)
var/choice = pick(typesof(/obj/item/weapon/circuitboard/arcade) - /obj/item/weapon/circuitboard/arcade)
var/obj/item/weapon/circuitboard/CB = new choice()
new CB.build_path(loc, CB)
- qdel(src)
+
+ return INITIALIZE_HINT_QDEL
/obj/machinery/computer/arcade/proc/prizevend()
if(!contents.len)
@@ -277,4 +278,4 @@
name = "Outbomb Cuban Pete"
src.updateUsrDialog()
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index f2e62715d83..e1c4d32a223 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -12,13 +12,13 @@ var/global/list/minor_air_alarms = list()
icon_screen = "alert:0"
light_color = LIGHT_COLOR_CYAN
-/obj/machinery/computer/atmos_alert/initialize()
- ..()
+/obj/machinery/computer/atmos_alert/Initialize()
+ . = ..()
atmosphere_alarm.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
/obj/machinery/computer/atmos_alert/Destroy()
atmosphere_alarm.unregister_alarm(src)
- ..()
+ return ..()
/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
ui_interact(user)
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index ebe6d69e1c7..3d122ef28e6 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -15,9 +15,6 @@
var/list/monitored_alarm_ids = null
var/datum/nano_module/atmos_control/atmos_control
-/obj/machinery/computer/atmoscontrol/New()
- ..()
-
/obj/machinery/computer/atmoscontrol/laptop
name = "Atmospherics Laptop"
desc = "A cheap laptop."
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 30684a17c4b..b80db0d04e3 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -12,10 +12,10 @@
var/cache_id = 0
circuit = /obj/item/weapon/circuitboard/security
-/obj/machinery/computer/security/New()
+/obj/machinery/computer/security/Initialize()
if(!network)
network = station_networks.Copy()
- ..()
+ . = ..()
if(network.len)
current_network = network[1]
@@ -250,10 +250,10 @@
circuit = /obj/item/weapon/circuitboard/security/engineering
light_color = "#FAC54B"
-/obj/machinery/computer/security/engineering/New()
+/obj/machinery/computer/security/engineering/Initialize()
if(!network)
network = engineering_networks.Copy()
- ..()
+ . = ..()
/obj/machinery/computer/security/nuclear
name = "head mounted camera monitor"
@@ -263,6 +263,6 @@
circuit = null
is_holographic = FALSE // I mean, it is, but the holo effect looks terrible with the current merc shuttle floor.
-/obj/machinery/computer/security/nuclear/New()
- ..()
+/obj/machinery/computer/security/nuclear/Initialize()
+ . = ..()
req_access = list(150)
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index c385eb93103..3bfb9d38f27 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -16,8 +16,8 @@
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
-/obj/machinery/computer/cloning/initialize()
- ..()
+/obj/machinery/computer/cloning/Initialize()
+ . = ..()
set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/cryo(src, list(/proc/is_operable)))
updatemodules()
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index e9a8dae3e68..d4121a7d7a3 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -422,12 +422,12 @@
dat += " \[ [(src.aistate != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]"
return dat
-/proc/enable_prison_shuttle(var/mob/user)
+/*/proc/enable_prison_shuttle(var/mob/user)
for(var/obj/machinery/computer/prison_shuttle/PS in world)
- PS.allowedtocall = !(PS.allowedtocall)
+ PS.allowedtocall = !(PS.allowedtocall)*/
/proc/call_shuttle_proc(var/mob/user)
- if ((!( ticker ) || !emergency_shuttle.location()))
+ if ((!(ROUND_IS_STARTED) || !emergency_shuttle.location()))
return
if(!universe.OnShuttleCall(usr))
@@ -454,7 +454,7 @@
user << "The emergency shuttle is already on its way."
return
- if(ticker.mode.name == "blob")
+ if(SSticker.mode.name == "blob")
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
return
@@ -466,7 +466,7 @@
return
/proc/init_shift_change(var/mob/user, var/force = 0)
- if ((!( ticker ) || !emergency_shuttle.location()))
+ if ((!(ROUND_IS_STARTED) || !emergency_shuttle.location()))
return
if(emergency_shuttle.going_to_centcom())
@@ -491,11 +491,11 @@
user << "The shuttle is refueling. Please wait another [round((54000-world.time)/60)] minutes before trying again."
return
- if(ticker.mode.auto_recall_shuttle)
+ if(SSticker.mode.auto_recall_shuttle)
//New version pretends to call the shuttle but cause the shuttle to return after a random duration.
emergency_shuttle.auto_recall = 1
- if(ticker.mode.name == "blob" || ticker.mode.name == "epidemic")
+ if(SSticker.mode.name == "blob" || SSticker.mode.name == "epidemic")
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
return
@@ -512,9 +512,9 @@
return
/proc/cancel_call_proc(var/mob/user)
- if (!( ticker ) || !emergency_shuttle.can_recall())
+ if (!(ROUND_IS_STARTED) || !emergency_shuttle.can_recall())
return
- if((ticker.mode.name == "blob")||(ticker.mode.name == "Meteor"))
+ if((SSticker.mode.name == "blob")||(SSticker.mode.name == "Meteor"))
return
if(!emergency_shuttle.going_to_centcom()) //check that shuttle isn't already heading to centcomm
@@ -532,7 +532,7 @@
/obj/machinery/computer/communications/proc/post_status(var/command, var/data1, var/data2)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
if(!frequency) return
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 775b3aa937f..79439c401bb 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -16,11 +16,9 @@
var/overlay_layer
var/is_holographic = TRUE
-/obj/machinery/computer/New()
+/obj/machinery/computer/Initialize()
+ . = ..()
overlay_layer = layer
- ..()
-
-/obj/machinery/computer/initialize()
power_change()
update_icon()
@@ -56,7 +54,7 @@
..()
/obj/machinery/computer/update_icon()
- overlays.Cut()
+ cut_overlays()
if(stat & NOPOWER)
set_light(0)
return
@@ -64,11 +62,17 @@
set_light(light_range_on, light_power_on)
if(stat & BROKEN)
- overlays += image(icon,"[icon_state]_broken", overlay_layer)
+ if (overlay_layer != layer)
+ add_overlay(image(icon,"[icon_state]_broken", overlay_layer))
+ else
+ add_overlay("[icon_state]_broken")
else if (is_holographic)
holographic_overlay(src, src.icon, icon_screen)
else
- overlays += image(icon, icon_screen, overlay_layer)
+ if (overlay_layer != layer)
+ add_overlay(image(icon, icon_screen, overlay_layer))
+ else
+ add_overlay(icon_screen)
/obj/machinery/computer/power_change()
..()
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 94eeb8428c7..ed323a9a6b1 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -17,7 +17,7 @@
/obj/machinery/computer/crew/Destroy()
qdel(crew_monitor)
crew_monitor = null
- ..()
+ return ..()
/obj/machinery/computer/crew/attack_ai(mob/user)
ui_interact(user)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 19c63736c68..af4983258ee 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -558,7 +558,7 @@
/obj/machinery/computer/med_data/laptop
name = "Medical Laptop"
desc = "A cheap laptop."
- icon_state = "laptop"
+ icon_state = "medlaptop0"
icon_screen = "medlaptop"
is_holographic = FALSE
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index b8f1638c4bd..2bb9dcf126e 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -65,7 +65,7 @@
MK.loc = src.loc
// Will help make emagging the console not so easy to get away with.
MK.info += "£%@%(*$%&(£&?*(%&£/{} "
- spawn(100*length(src.linkedServer.decryptkey)) UnmagConsole()
+ addtimer(CALLBACK(src, .proc/UnmagConsole), 100 * length(linkedServer.decryptkey))
message = rebootmsg
update_icon()
return 1
@@ -79,12 +79,12 @@
icon_screen = initial(icon_screen)
..()
-/obj/machinery/computer/message_monitor/initialize()
+/obj/machinery/computer/message_monitor/Initialize()
+ . = ..()
//Is the server isn't linked to a server, and there's a server available, default it to the first one in the list.
if(!linkedServer)
if(message_servers && message_servers.len > 0)
linkedServer = message_servers[1]
- return
/obj/machinery/computer/message_monitor/attack_hand(var/mob/living/user as mob)
if(stat & (NOPOWER|BROKEN))
@@ -517,14 +517,16 @@
name = "Monitor Decryption Key"
var/obj/machinery/message_server/server = null
-/obj/item/weapon/paper/monitorkey/New()
+/obj/item/weapon/paper/monitorkey/Initialize()
..()
- spawn(10)
- if(message_servers)
- for(var/obj/machinery/message_server/server in message_servers)
- if(!isnull(server))
- if(!isnull(server.decryptkey))
- info = "Daily Key Reset The new message monitor key is '[server.decryptkey]'. Please keep this a secret and away from the clown. If necessary, change the password to a more secure one."
- info_links = info
- icon_state = "paper_words"
- break
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/item/weapon/paper/monitorkey/LateInitialize()
+ if(message_servers)
+ for(var/obj/machinery/message_server/server in message_servers)
+ if(!isnull(server))
+ if(!isnull(server.decryptkey))
+ info = "Daily Key Reset The new message monitor key is '[server.decryptkey]'. Please keep this a secret and away from the clown. If necessary, change the password to a more secure one."
+ info_links = info
+ icon_state = "paper_words"
+ break
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 3e2cda84af5..977d5d1f4b7 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -12,17 +12,12 @@
var/time = 30.0
var/title = "Mass Driver Controls"
-
-/obj/machinery/computer/pod/New()
- ..()
- spawn( 5 )
- for(var/obj/machinery/mass_driver/M in world)
- if(M.id == id)
- connected = M
- else
- return
- return
-
+/obj/machinery/computer/pod/Initialize()
+ . = ..()
+ for(var/obj/machinery/mass_driver/M in world)
+ if(M.id == id)
+ connected = M
+ return
/obj/machinery/computer/pod/proc/alarm()
if(stat & (NOPOWER|BROKEN))
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index b4d2b6fc477..8ad18ad985c 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -143,7 +143,7 @@ var/prison_shuttle_timeleft = 0
proc/post_signal(var/command)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1311)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(1311)
if(!frequency) return
var/datum/signal/status_signal = new
status_signal.source = src
diff --git a/code/game/machinery/computer/sentencing.dm b/code/game/machinery/computer/sentencing.dm
index 09e125eb8ea..3ff81c8eeb2 100644
--- a/code/game/machinery/computer/sentencing.dm
+++ b/code/game/machinery/computer/sentencing.dm
@@ -302,7 +302,7 @@
. += "There was an error loading the incident, please Try Again "
return .
- if( !istype( corp_regs ))
+ if( !istype( SSlaw ))
. += "There was an error loading corporate regulations, please Try Again "
return .
@@ -363,7 +363,7 @@
. += "Button "
. += " "
- for( var/datum/law/L in corp_regs.low_severity )
+ for( var/datum/law/L in SSlaw.low_severity )
. += ""
. += "[L.name] "
. += "[L.desc] "
@@ -393,7 +393,7 @@
. += "Button "
. += " "
- for( var/datum/law/L in corp_regs.med_severity )
+ for( var/datum/law/L in SSlaw.med_severity )
. += ""
. += "[L.name] "
. += "[L.desc] "
@@ -422,7 +422,7 @@
. += "Button "
. += " "
- for( var/datum/law/L in corp_regs.high_severity )
+ for( var/datum/law/L in SSlaw.high_severity )
. += ""
. += "[L.name] "
. += "[L.desc] "
diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm
index e40b0751752..215f3f327fd 100644
--- a/code/game/machinery/computer/shuttle.dm
+++ b/code/game/machinery/computer/shuttle.dm
@@ -11,7 +11,7 @@
attackby(var/obj/item/weapon/card/W as obj, var/mob/user as mob)
if(stat & (BROKEN|NOPOWER)) return
- if ((!( istype(W, /obj/item/weapon/card) ) || !( ticker ) || emergency_shuttle.location() || !( user ))) return
+ if ((!( istype(W, /obj/item/weapon/card) ) || !(ROUND_IS_STARTED) || emergency_shuttle.location() || !( user ))) return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 7a0a92b1d2e..f60ab34fcb0 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -3,7 +3,7 @@
/obj/machinery/computer/skills//TODO:SANITY
name = "employment records console"
desc = "Used to view, edit and maintain employment records."
- icon_state = "laptop"
+ icon_state = "medlaptop0"
icon_screen = "medlaptop"
light_color = "#00b000"
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index c5039b0d68d..45840470686 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -18,10 +18,10 @@
/obj/machinery/computer/station_alert/all
monitor_type = /datum/nano_module/alarm_monitor/all
-/obj/machinery/computer/station_alert/initialize()
+/obj/machinery/computer/station_alert/Initialize()
alarm_monitor = new monitor_type(src)
alarm_monitor.register_alarm(src, /obj/machinery/computer/station_alert/update_icon)
- ..()
+ . = ..()
if(monitor_type)
register_monitor(new monitor_type(src))
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
index 552b2302660..f73aea65a5c 100644
--- a/code/game/machinery/computer/supply.dm
+++ b/code/game/machinery/computer/supply.dm
@@ -36,11 +36,11 @@
if(temp)
dat = temp
else
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
if (shuttle)
dat += {"Supply shuttle
Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
- Supply points: [supply_controller.points]
+ Supply points: [SScargo.points]
\nRequest items
View approved orders
View requests
@@ -62,18 +62,18 @@
//all_supply_groups
//Request what?
last_viewed_group = "categories"
- temp = "Supply points: [supply_controller.points] "
+ temp = "Supply points: [SScargo.points] "
temp += "Main Menu "
temp += "Select a category "
for(var/supply_group_name in all_supply_groups )
temp += "[supply_group_name] "
else
last_viewed_group = href_list["order"]
- temp = "Supply points: [supply_controller.points] "
+ temp = "Supply points: [SScargo.points] "
temp += "Back to all categories "
temp += "Request from: [last_viewed_group] "
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
+ for(var/supply_name in SScargo.supply_packs )
+ var/datum/supply_packs/N = SScargo.supply_packs[supply_name]
if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
@@ -84,7 +84,7 @@
return
//Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
+ var/datum/supply_packs/P = SScargo.supply_packs[href_list["doorder"]]
if(!istype(P)) return
var/timeout = world.time + 600
@@ -101,11 +101,11 @@
else if(issilicon(usr))
idname = usr.real_name
- supply_controller.ordernum++
+ SScargo.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
reqform.name = "Requisition Form - [P.name]"
reqform.info += "[station_name] Supply Requisition Form "
- reqform.info += "INDEX: #[supply_controller.ordernum] "
+ reqform.info += "INDEX: #[SScargo.ordernum] "
reqform.info += "REQUESTED BY: [idname] "
reqform.info += "RANK: [idrank] "
reqform.info += "REASON: [reason] "
@@ -121,24 +121,24 @@
//make our supply_order datum
var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_controller.ordernum
+ O.ordernum = SScargo.ordernum
O.object = P
O.orderedby = idname
- supply_controller.requestlist += O
+ SScargo.requestlist += O
temp = "Thanks for your request. The cargo team will process it as soon as possible. "
temp += "Back Main Menu "
else if (href_list["vieworders"])
temp = "Current approved orders: "
- for(var/S in supply_controller.shoppinglist)
+ for(var/S in SScargo.shoppinglist)
var/datum/supply_order/SO = S
temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""] "
temp += "OK "
else if (href_list["viewrequests"])
temp = "Current requests: "
- for(var/S in supply_controller.requestlist)
+ for(var/S in SScargo.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] "
temp += "OK "
@@ -163,7 +163,7 @@
if (temp)
dat = temp
else
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
if (shuttle)
dat += "Supply shuttle "
dat += "\nLocation: "
@@ -198,7 +198,7 @@
dat += " \n "
- dat += {" \nSupply points: [supply_controller.points] \n
+ dat += {" \nSupply points: [SScargo.points] \n
\nOrder items \n
\nView requests \n
\nView orders \n
@@ -216,10 +216,10 @@
return 1
/obj/machinery/computer/supplycomp/Topic(href, href_list)
- if(!supply_controller)
- world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow."
+ if(!SScargo)
+ world.log << "## ERROR: Eek. The SScargo controller datum is missing somehow."
return
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
if (!shuttle)
world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow."
return
@@ -239,7 +239,7 @@
temp = "Initiating launch sequence. \[Force Launch \]OK "
else
shuttle.launch(src)
- temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.OK "
+ temp = "The supply shuttle has been called and will arrive in approximately [round(SScargo.movetime/600,1)] minutes.OK "
post_signal("supply")
if (href_list["force_send"])
@@ -254,25 +254,25 @@
//all_supply_groups
//Request what?
last_viewed_group = "categories"
- temp = "Supply points: [supply_controller.points] "
+ temp = "Supply points: [SScargo.points] "
temp += "Main Menu "
temp += "Select a category "
for(var/supply_group_name in all_supply_groups )
temp += "[supply_group_name] "
else
last_viewed_group = href_list["order"]
- temp = "Supply points: [supply_controller.points] "
+ temp = "Supply points: [SScargo.points] "
temp += "Back to all categories "
temp += "Request from: [last_viewed_group] "
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
+ for(var/supply_name in SScargo.supply_packs )
+ var/datum/supply_packs/N = SScargo.supply_packs[supply_name]
if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
- /*temp = "Supply points: [supply_controller.points] Request what? "
+ /*temp = "Supply points: [SScargo.points] Request what? "
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
+ for(var/supply_name in SScargo.supply_packs )
+ var/datum/supply_packs/N = SScargo.supply_packs[supply_name]
if(N.hidden && !hacked) continue
if(N.contraband && !can_order_contraband) continue
temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
@@ -285,7 +285,7 @@
return
//Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
+ var/datum/supply_packs/P = SScargo.supply_packs[href_list["doorder"]]
if(!istype(P)) return
var/timeout = world.time + 600
@@ -302,11 +302,11 @@
else if(issilicon(usr))
idname = usr.real_name
- supply_controller.ordernum++
+ SScargo.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
reqform.name = "Requisition Form - [P.name]"
reqform.info += "[station_name] Supply Requisition Form "
- reqform.info += "INDEX: #[supply_controller.ordernum] "
+ reqform.info += "INDEX: #[SScargo.ordernum] "
reqform.info += "REQUESTED BY: [idname] "
reqform.info += "RANK: [idrank] "
reqform.info += "REASON: [reason] "
@@ -322,10 +322,10 @@
//make our supply_order datum
var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_controller.ordernum
+ O.ordernum = SScargo.ordernum
O.object = P
O.orderedby = idname
- supply_controller.requestlist += O
+ SScargo.requestlist += O
temp = "Order request placed. "
temp += "Back | Main Menu | Authorize Order "
@@ -336,15 +336,15 @@
var/datum/supply_order/O
var/datum/supply_packs/P
temp = "Invalid Request"
- for(var/i=1, i<=supply_controller.requestlist.len, i++)
- var/datum/supply_order/SO = supply_controller.requestlist[i]
+ for(var/i=1, i<=SScargo.requestlist.len, i++)
+ var/datum/supply_order/SO = SScargo.requestlist[i]
if(SO.ordernum == ordernum)
O = SO
P = O.object
- if(supply_controller.points >= P.cost)
- supply_controller.requestlist.Cut(i,i+1)
- supply_controller.points -= P.cost
- supply_controller.shoppinglist += O
+ if(SScargo.points >= P.cost)
+ SScargo.requestlist.Cut(i,i+1)
+ SScargo.points -= P.cost
+ SScargo.shoppinglist += O
temp = "Thanks for your order. "
temp += "Back Main Menu "
else
@@ -354,7 +354,7 @@
else if (href_list["vieworders"])
temp = "Current approved orders: "
- for(var/S in supply_controller.shoppinglist)
+ for(var/S in SScargo.shoppinglist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] "// (Cancel) "
temp += "OK "
@@ -372,7 +372,7 @@
*/
else if (href_list["viewrequests"])
temp = "Current requests: "
- for(var/S in supply_controller.requestlist)
+ for(var/S in SScargo.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove "
@@ -382,16 +382,16 @@
else if (href_list["rreq"])
var/ordernum = text2num(href_list["rreq"])
temp = "Invalid Request. "
- for(var/i=1, i<=supply_controller.requestlist.len, i++)
- var/datum/supply_order/SO = supply_controller.requestlist[i]
+ for(var/i=1, i<=SScargo.requestlist.len, i++)
+ var/datum/supply_order/SO = SScargo.requestlist[i]
if(SO.ordernum == ordernum)
- supply_controller.requestlist.Cut(i,i+1)
+ SScargo.requestlist.Cut(i,i+1)
temp = "Request removed. "
break
temp += "Back Main Menu "
else if (href_list["clearreq"])
- supply_controller.requestlist.Cut()
+ SScargo.requestlist.Cut()
temp = "List cleared. "
temp += "OK "
@@ -404,7 +404,7 @@
/obj/machinery/computer/supplycomp/proc/post_signal(var/command)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
if(!frequency) return
diff --git a/code/game/machinery/crusher_piston.dm b/code/game/machinery/crusher_piston.dm
new file mode 100644
index 00000000000..5020bd9fdbf
--- /dev/null
+++ b/code/game/machinery/crusher_piston.dm
@@ -0,0 +1,508 @@
+#define PISTON_MOVE_DAMAGE 30
+#define PISTON_MOVE_DIVISOR 8
+
+/obj/machinery/crusher_base
+ name = "trash compactor"
+ desc = "A colossal piston used for crushing garbage."
+ icon = 'icons/obj/machines/crusherbase.dmi'
+ icon_state = "standalone"
+ anchored = 1
+ density = 1
+ //Just 300 Watts here. Power is drawn by the piston when it moves
+ use_power = 1
+ idle_power_usage = 300
+
+ var/obj/machinery/crusher_piston/pstn //Piston
+
+ var/action = "idle" //Action the piston should perform
+ // idle -> Do nothing
+ // extend -> Extend the piston
+ // retract -> Retract the piston
+
+ var/status = "idle"//The status the piston is in
+ // idle -> The piston is idle, doing nothing
+ // pre_start -> The piston is pre-starting
+ // stage1 -> The piston is at stage 1
+ // stage2 -> The piston is at stage 2
+ // stage3 -> The piston is at stage 3
+
+ var/blocked = 0 //If the piston has been blocked by something - Piston is stuck and preassure valve needs to be opened
+ var/valve_open = 0 //If the de-preassure valve is open - Pison cant be extended
+ var/num_progress = 0 //Numerical Progress value
+
+ var/asmtype = "standalone" //If the base is a stand alone base or part of a combined crusher
+ // standalone -> Standalone base
+ // leftcap -> Left piece of a combined crusher
+ // middle -> Middle piece of a combined crusher
+ // rightcap -> Right piece of a combined crusher
+
+ var/action_start_time = null //The time when the action has been started
+ var/time_stage_pre = 150 //The time it takes for the stage to complete
+ var/time_stage_1 = 100 //The time it takes for the stage to complete
+ var/time_stage_2 = 100 //The time it takes for the stage to complete
+ var/time_stage_3 = 100 //The time it takes for the stage to complete
+ var/time_stage_full = 100 //The time to wait when the piston is full extended
+
+ var/list/items_to_move = list() //The list of tiems that should be moved by the piston
+ var/list/items_to_crush = list() //The list of items that should be destroyed by the piston
+
+ var/initial = 1 // initial run of the piston process
+
+ var/process_lock = 0 //If the call to process is locked because it is still running
+
+/obj/machinery/crusher_base/Initialize()
+ . = ..()
+
+ //Create parts for crusher.
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/crusher(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
+ RefreshParts()
+
+ action_start_time = world.time
+
+ //Spawn the stage 1 pistons south of it with a density of 0
+ log_debug("Spawning Crusher Piston Stage")
+ pstn = new(get_step(src, SOUTH))
+ pstn.crs_base = src
+
+ queue_icon_update()
+ // Change the icons of the neighboring bases
+ change_neighbor_base_icons()
+
+/obj/machinery/crusher_base/Destroy()
+ QDEL_NULL(pstn)
+ return ..()
+
+/obj/machinery/crusher_base/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(default_deconstruction_screwdriver(user, O))
+ return
+ //TODO: Add a chance to catch their hand in the mechanic if they do something while the crusher is in operation
+ if(default_deconstruction_crowbar(user, O))
+ return
+ if(default_part_replacement(user, O))
+ return
+
+ //Stuff you can do if the maint hatch is open
+ if(panel_open)
+ if(iswrench(O))
+ user << "You start [valve_open ? "closing" : "opening"] the pressure relief valve of [src]. "
+ if(do_after(user,50))
+ valve_open = !valve_open
+ user << "You [valve_open ? "open" : "close"] the pressure relief valve of [src]. "
+ if(valve_open)
+ blocked = 0
+ action = "retract"
+ return
+ ..()
+
+/obj/machinery/crusher_base/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C)
+ if(!istype(C))
+ return 0
+ if(num_progress != 0) //Piston needs to be retracted before you are able to deconstruct it
+ user << "You can not deconstruct [src] while the piston is extended. "
+ return 0
+ return ..()
+
+/obj/machinery/crusher_base/proc/change_neighbor_base_icons()
+ var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST))
+ var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST))
+ if (left)
+ left.queue_icon_update()
+
+ if (right)
+ right.queue_icon_update()
+
+/obj/machinery/crusher_base/update_icon()
+ cut_overlays()
+ var/obj/machinery/crusher_base/left = locate(/obj/machinery/crusher_base, get_step(src, WEST))
+ var/obj/machinery/crusher_base/right = locate(/obj/machinery/crusher_base, get_step(src, EAST))
+
+ if (left && right)
+ asmtype = "middle"
+ icon_state = asmtype
+ else if (left)
+ asmtype = "rightcap"
+ icon_state = asmtype
+ else if (right)
+ asmtype = "leftcap"
+ icon_state = asmtype
+ else
+ asmtype = "standalone"
+ icon_state = asmtype
+
+ if(powered(EQUIP))
+ if (blocked == 1)
+ holographic_overlay(src, icon, "[asmtype]-overlay-red")
+ else if(action != "idle")
+ holographic_overlay(src, icon, "[asmtype]-overlay-orange")
+ else
+ holographic_overlay(src, icon, "[asmtype]-overlay-green")
+ if(panel_open)
+ add_overlay("[asmtype]-hatch")
+
+/obj/machinery/crusher_base/power_change()
+ ..()
+ queue_icon_update()
+
+/obj/machinery/crusher_base/process()
+ set waitfor = FALSE
+ if (process_lock)
+ log_debug("crusher_piston process() has been called while it was still locked. Aborting")
+ return
+ process_lock = 1
+ var/timediff = world.time - action_start_time
+
+ //Check what action should be performed
+ if(action == "idle")
+ action_start_time = world.time
+ initial = 1
+ else if(action == "extend" && powered(EQUIP))
+ //If we are idle, flash the warning lights and then put us into pre_start once we are done
+ if(status == "idle")
+ if(initial)
+ playsound(loc, 'sound/machines/airalarm.ogg', 50, 1) //Plays a beep
+ initial = 0
+ //TODO: Flash the lights
+ if(timediff > time_stage_pre)
+ initial = 1
+ status = "pre_start" // Bring us into pre start
+ action_start_time = world.time
+
+
+ //We are now ready to expand the first piston
+ else if(status == "pre_start")
+ if(valve_check())
+ //Call extend on all the stage 1 pistons
+ if(initial)
+ initial = 0
+ num_progress = 33
+ if(!pstn.extend_0_1())
+ num_progress = 0
+ status = "idle"
+ action = "idle"
+ initial = 1
+ visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.")
+ log_debug("Cant extend piston 0-1 - Continue idling")
+ if(timediff > time_stage_1)
+ status = "stage1"
+ action_start_time = world.time
+ initial = 1
+
+ //Extend the second piston
+ else if(status == "stage1")
+ if(valve_check())
+ //Call extend on all the stage 2 pistons
+ if(initial)
+ initial = 0
+ num_progress = 66
+ if(!pstn.extend_1_2())
+ num_progress = 33
+ action = "idle"
+ blocked = 1
+ visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.")
+ log_debug("cant extend piston 1-2 - Blocked")
+ if(timediff > time_stage_2)
+ status = "stage2"
+ action_start_time = world.time
+ initial = 1
+
+ //Extend the thrid piston
+ else if(status == "stage2")
+ if(valve_check())
+ //Call extend on all the stage 2 pistons
+ if(initial)
+ initial = 0
+ num_progress = 100
+ if(!pstn.extend_2_3())
+ num_progress = 66
+ action = "idle"
+ blocked = 1
+ visible_message("The hydraulic pump in [src] spins faster and shuts down a few moments later.","You hear a pump spinning faster and then shutting down.")
+ log_debug("cant extend piston 2-3 - Blocked")
+ if(timediff > time_stage_3)
+ status = "stage3"
+ action_start_time = world.time
+ initial = 1
+
+ //Wait a moment, then reverse the direction
+ else if(status == "stage3")
+ if(initial)
+ initial = 0
+ if(timediff > time_stage_full)
+ action = "retract"
+ action_start_time = world.time
+ initial = 1
+
+ //Update the icon
+ update_icon()
+
+ //Retract the pistons
+ else if(action == "retract" && blocked == 0 && powered(EQUIP)) //Only retract if unblocked
+ update_icon()
+ num_progress = 0
+
+ //Retract the 3rd stage pistons
+ if(status == "stage3")
+ if(initial)
+ initial = 0
+ pstn.retract_3_0()
+ if(timediff > time_stage_3) //Once the time is up, reset the icon state
+ pstn.icon_state = initial(pstn.icon_state)
+ status = "idle"
+ action = "idle"
+ action_start_time = world.time
+ initial = 1
+ update_icon()
+ else if(status == "stage2")
+ if(initial)
+ initial = 0
+ pstn.retract_2_0()
+ if(timediff > time_stage_2) //Once the time is up, reset the icon state
+ pstn.icon_state = initial(pstn.icon_state)
+ status = "idle"
+ action = "idle"
+ action_start_time = world.time
+ initial = 1
+ update_icon()
+ else if(status == "stage1")
+ if(initial)
+ initial = 0
+ pstn.retract_1_0()
+ if(timediff > time_stage_1) //Once the time is up, reset the icon state
+ pstn.icon_state = initial(pstn.icon_state)
+ status = "idle"
+ action = "idle"
+ action_start_time = world.time
+ initial = 1
+ update_icon()
+ else //This shouldnt really happen, but its there just in case
+ pstn.icon_state = initial(pstn.icon_state)
+ status = "idle"
+ action = "idle"
+ action_start_time = world.time
+ initial = 1
+ update_icon()
+
+ //Move all the items in the move list
+ for(var/atom/movable/AM in items_to_move)
+ if(!AM.simulated)
+ items_to_move -= AM
+ continue
+ if(istype(AM,/obj/machinery/crusher_piston))
+ items_to_move -= AM
+ continue
+ items_to_move -= AM
+ //If a item could not be moved. Add it to the crush list
+ if(!AM.piston_move())
+ items_to_crush += AM
+ CHECK_TICK
+
+ //Destroy all the items in the crush list
+ for(var/atom/movable/AM in items_to_crush)
+ items_to_crush -= AM
+ AM.crush_act()
+ CHECK_TICK
+
+ process_lock = 0
+
+
+/obj/machinery/crusher_base/proc/crush_start()
+ action = "extend"
+
+
+/obj/machinery/crusher_base/proc/crush_abort()
+ //Abort the crush
+ //Retract all the pistons, ...
+ action = "retract"
+ //TODO-Crusher: Add more stages to the piston so retracting will not cause a visual bug
+
+/obj/machinery/crusher_base/proc/get_num_progress()
+ return num_progress
+
+/obj/machinery/crusher_base/proc/get_action()
+ return action
+
+/obj/machinery/crusher_base/proc/get_status()
+ return status
+
+/obj/machinery/crusher_base/proc/is_blocked()
+ return blocked
+
+/obj/machinery/crusher_base/proc/valve_check() //Check if the depreasurization valve is open
+ if(valve_open == 1)
+ visible_message("The hydraulic pump in [src] briefly spins up and then shuts down.","You hear a pump spinning up briefly and then shutting down.")
+ action = "idle"
+ return 0
+ return 1
+
+//Piston Stage 1
+/obj/machinery/crusher_piston
+ name = "trash compactor piston"
+ desc = "A colossal piston used for crushing garbage."
+ icon = 'icons/obj/machines/crusherpiston.dmi' //Placeholder TODO: Get a proper icon
+ icon_state = "piston_0"
+ density = 0
+ anchored = 1
+ pixel_y = -64
+ var/stage = 0 //The stage of the piston
+ var/obj/machinery/crusher_base/crs_base //Crusher Base the piston is linked to
+ var/obj/effect/piston_blocker/pb1
+ var/obj/effect/piston_blocker/pb2
+ var/obj/effect/piston_blocker/pb3
+
+ var/static/list/immovable_items
+
+/obj/machinery/crusher_piston/Initialize()
+ . = ..()
+
+ // Setup the immovable items typecache.
+ // (We only want to do this once as this is a huge list.)
+ if (!LAZYLEN(immovable_items))
+ immovable_items = typecacheof(list(
+ /obj/machinery,
+ /obj/structure,
+ /obj/item/modular_computer/telescreen,
+ /obj/item/modular_computer/console
+ )) - /obj/machinery/crusher_piston
+
+/obj/machinery/crusher_piston/Destroy()
+ QDEL_NULL(pb1)
+ QDEL_NULL(pb2)
+ QDEL_NULL(pb3)
+ return ..()
+
+/obj/machinery/crusher_piston/proc/extend_0_1()
+ use_power(5 KILOWATTS)
+ var/turf/T = get_turf(src)
+ if(!can_extend_into(T))
+ log_debug("cant extend 0-1 - Abort")
+ return 0
+ icon_state="piston_0_1"
+ stage = 1
+ pb1 = new(loc)
+ for(var/atom/movable/AM in get_turf(loc))
+ crs_base.items_to_move += AM
+ return 1
+
+/obj/machinery/crusher_piston/proc/extend_1_2()
+ use_power(5 KILOWATTS)
+ var/turf/T = get_turf(pb1)
+ var/turf/extension_turf = get_step(T,SOUTH)
+ if(!can_extend_into(extension_turf))
+ log_debug("cant extend 1-2 - Abort")
+ return 0
+ icon_state="piston_1_2"
+ stage = 2
+ pb2 = new(get_step(T,SOUTH))
+ for(var/atom/movable/AM in extension_turf)
+ crs_base.items_to_move += AM
+ return 1
+
+/obj/machinery/crusher_piston/proc/extend_2_3()
+ use_power(5 KILOWATTS)
+ var/turf/T = get_turf(pb2)
+ var/turf/extension_turf = get_step(T,SOUTH)
+ if(!can_extend_into(extension_turf))
+ log_debug("cant extend 2-3 - Abort")
+ return 0
+ icon_state="piston_2_3"
+ stage = 3
+ pb3 = new(get_step(T,SOUTH))
+ for(var/atom/movable/AM in extension_turf)
+ crs_base.items_to_move += AM
+ return 1
+
+/obj/machinery/crusher_piston/proc/retract_3_0()
+ icon_state="piston_3_0"
+ stage = 0
+ QDEL_NULL(pb1)
+ QDEL_NULL(pb2)
+ QDEL_NULL(pb3)
+/obj/machinery/crusher_piston/proc/retract_2_0()
+ icon_state="piston_2_0"
+ stage = 0
+ QDEL_NULL(pb1)
+ QDEL_NULL(pb2)
+ QDEL_NULL(pb3)
+/obj/machinery/crusher_piston/proc/retract_1_0()
+ icon_state="piston_1_0"
+ stage = 0
+ QDEL_NULL(pb1)
+ QDEL_NULL(pb2)
+ QDEL_NULL(pb3)
+
+/obj/machinery/crusher_piston/proc/can_extend_into(var/turf/extension_turf)
+ //Check if atom is of a specific Type
+ if (istype(extension_turf,/turf/simulated/wall))
+ return 0
+ for(var/atom/A in extension_turf)
+ if (is_type_in_typecache(A, immovable_items))
+ return 0
+ return 1
+
+/obj/effect/piston_blocker
+ name = "trash compactor piston"
+ desc = "A colossal piston used for crushing garbage."
+ density = 1
+ anchored = 1
+
+//
+// The piston_move proc for various objects
+//
+// Return 1 if it could successfully be moved
+// Return 0 if it could not be moved
+/atom/movable/proc/piston_move()
+ var/turf/T = get_turf(src)
+
+ var/list/valid_turfs = list()
+ for(var/dir_to_test in cardinal)
+ var/turf/new_turf = get_step(T, dir_to_test)
+ if(!new_turf.contains_dense_objects())
+ valid_turfs += new_turf
+
+ while(valid_turfs.len)
+ T = pick(valid_turfs)
+ valid_turfs -= T
+
+ if(src.forceMove(T))
+ return 1
+ // We failed to move our target
+ return 0
+
+/mob/living/piston_move()
+ for(var/i = 1, i <= PISTON_MOVE_DIVISOR, i++)
+ adjustBruteLoss(round(PISTON_MOVE_DAMAGE / PISTON_MOVE_DIVISOR))
+ AdjustStunned(5)
+ AdjustWeakened(5)
+ return ..()
+
+/mob/living/carbon/piston_move()
+ if(!(species && (species.flags & NO_PAIN)))
+ emote("scream")
+ return ..()
+
+//Dont call the parent and return 1 to prevent effects from getting moved
+/obj/effect/piston_move()
+ return 1
+
+//
+// The crush act proc
+//
+/atom/movable/proc/crush_act()
+ ex_act(1)
+ if (!QDELETED(src))
+ qdel(src)//Just as a failsafe
+
+
+#undef PISTON_MOVE_DAMAGE
+#undef PISTON_MOVE_DIVISOR
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 62ec0bbca9c..20d96c02e49 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -31,7 +31,7 @@
T.contents += contents
if(beaker)
beaker.loc = get_step(loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube
- ..()
+ return ..()
/obj/machinery/atmospherics/unary/cryo_cell/initialize()
if(node) return
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index d611ffd5cfc..7ff4b196657 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -52,7 +52,7 @@
var/dat
- if (!( ticker ))
+ if (!(ROUND_IS_STARTED))
return
dat += "[storage_name] "
@@ -213,10 +213,10 @@
if(occupant)
occupant.forceMove(loc)
occupant.resting = 1
- ..()
+ return ..()
-/obj/machinery/cryopod/initialize()
- ..()
+/obj/machinery/cryopod/Initialize()
+ . = ..()
find_control_computer()
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 275ebce38d2..2f01bcb7ba4 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -235,20 +235,16 @@ for reference:
return 0
proc/explode()
-
visible_message("[src] blows apart! ")
- var/turf/Tsec = get_turf(src)
/* var/obj/item/stack/rods/ =*/
- getFromPool(/obj/item/stack/rods, Tsec)
+ new /obj/item/stack/rods(get_turf(src))
spark(src, 3, alldirs)
explosion(src.loc,-1,-1,0)
- if(src)
- qdel(src)
+ qdel(src)
-
/obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user)
if (src.emagged == 0)
src.emagged = 1
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index b51d72ccd8e..1977e3399d7 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -194,6 +194,7 @@
return
icon_state = "launcherbtt"
+ active = 0
update_icon()
return
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index cae51cb744b..6d523f85750 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -75,6 +75,15 @@
assembly_type = /obj/structure/door_assembly/door_assembly_com
hatch_colour = "#446892"
+/obj/machinery/door/airlock/sac
+ name = "Airlock"
+ icon = 'icons/obj/doors/DoorSAC.dmi'
+ assembly_type = null
+ aiControlDisabled = 1
+ hackProof = 1
+ electrified_until = -1
+ open_sound_powered = 'sound/machines/airlock_creaking.ogg'
+
/obj/machinery/door/airlock/security
name = "Airlock"
icon = 'icons/obj/doors/Doorsec.dmi'
@@ -137,6 +146,9 @@
opacity = 0
hatch_colour = "#606061"
+/obj/machinery/door/airlock/centcom/attackby()
+ return
+
/obj/machinery/door/airlock/vault
name = "Vault"
icon = 'icons/obj/doors/vault.dmi'
@@ -380,21 +392,6 @@
//-------------------------
-/obj/machinery/door/airlock/process()
- // Deliberate no call to parent.
- if(main_power_lost_until > 0 && world.time >= main_power_lost_until)
- regainMainPower()
-
- if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until)
- regainBackupPower()
-
- else if(electrified_until > 0 && world.time >= electrified_until)
- electrify(0)
-
- ..()
-
-
-
/*
About the new airlock wires panel:
* An airlock wire dialog can be accessed by the normal way or by using wirecutters or a multitool on the door while the wire-panel is open. This would show the following wires, which you can either wirecut/mend or send a multitool pulse through. There are 9 wires.
@@ -470,10 +467,13 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/loseMainPower()
main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
+ if (main_power_lost_until > 0)
+ addtimer(CALLBACK(src, .proc/regainMainPower), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
// If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running
if(backup_power_lost_until == -1 && !backupPowerCablesCut())
backup_power_lost_until = world.time + SecondsToTicks(10)
+ addtimer(CALLBACK(src, .proc/regainBackupPower), 10 SECONDS, TIMER_UNIQUE | TIMER_NO_HASH_WAIT)
// Disable electricity if required
if(electrified_until && isAllPowerLoss())
@@ -481,6 +481,8 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/loseBackupPower()
backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
+ if (backup_power_lost_until > 0)
+ addtimer(CALLBACK(src, .proc/regainBackupPower), 60 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
// Disable electricity if required
if(electrified_until && isAllPowerLoss())
@@ -517,6 +519,8 @@ About the new airlock wires panel:
shockedby += text("\[[time_stamp()]\] - EMP)")
message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]."
src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
+ if (electrified_until > 0)
+ addtimer(CALLBACK(src, .proc/electrify, 0), duration SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT)
if(feedback && message)
usr << message
@@ -566,9 +570,9 @@ About the new airlock wires panel:
// Only set_light() if there's a change, no need to waste processor cycles with lighting updates.
/obj/machinery/door/airlock/update_icon()
- if (!isnull(gcDestroyed))
+ if (QDELING(src))
return
- if(overlays) overlays.Cut()
+ cut_overlays()
if(density)
if(locked && lights && src.arePowerSystemsOn())
icon_state = "door_locked"
@@ -581,52 +585,51 @@ About the new airlock wires panel:
set_light(0)
has_set_boltlight = FALSE
if(p_open || welded)
- overlays = list()
if(p_open)
- overlays += image(icon, "panel_open")
+ add_overlay("panel_open")
if (!(stat & NOPOWER))
if(stat & BROKEN)
- overlays += image(icon, "sparks_broken")
+ add_overlay("sparks_broken")
else if (health < maxhealth * 3/4)
- overlays += image(icon, "sparks_damaged")
+ add_overlay("sparks_damaged")
if(welded)
- overlays += image(icon, "welded")
+ add_overlay("welded")
else if (health < maxhealth * 3/4 && !(stat & NOPOWER))
- overlays += image(icon, "sparks_damaged")
+ add_overlay("sparks_damaged")
if (hatch_image)
if (hatchstate)
hatch_image.icon_state = "[hatchstyle]_open"
else
hatch_image.icon_state = hatchstyle
- overlays += hatch_image
+ add_overlay(hatch_image)
else
icon_state = "door_open"
if((stat & BROKEN) && !(stat & NOPOWER))
- overlays += image(icon, "sparks_open")
+ add_overlay("sparks_open")
if (has_set_boltlight)
set_light(0)
has_set_boltlight = FALSE
+ update_oo()
return
/obj/machinery/door/airlock/do_animate(animation)
switch(animation)
if("opening")
- if(overlays) overlays.Cut()
+ cut_overlays()
if(p_open)
- spawn(2) // The only work around that works. Downside is that the door will be gone for a millisecond.
- flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking
- update_icon()
+ flick("o_door_opening", src)
+ update_icon()
else
flick("door_opening", src)//[stat ? "_stat":]
update_icon()
if("closing")
- if(overlays) overlays.Cut()
+ if(overlays)
+ cut_overlays()
if(p_open)
- spawn(2)
- flick("o_door_closing", src)
- update_icon()
+ flick("o_door_closing", src)
+ update_icon()
else
flick("door_closing", src)
update_icon()
@@ -642,7 +645,6 @@ About the new airlock wires panel:
if (src.arePowerSystemsOn())
flick("door_deny", src)
playsound(src.loc, 'sound/machines/hydraulic_short.ogg', 50, 0)
- return
/obj/machinery/door/airlock/attack_ai(mob/user as mob)
ui_interact(user)
@@ -911,9 +913,9 @@ About the new airlock wires panel:
user << "The airlock's bolts prevent it from being forced. "
else
if(density)
- spawn(0) open(1)
+ open(1)
else
- spawn(0) close(1)
+ close(1)
else if(istype(C, /obj/item/weapon/material/twohanded/fireaxe) && !arePowerSystemsOn())
if(locked)
@@ -923,13 +925,13 @@ About the new airlock wires panel:
var/obj/item/weapon/material/twohanded/fireaxe/F = C
if(F.wielded)
- spawn(0) open(1)
+ open(1)
else
user << "You need to be wielding \the [C] to do that. "
else
var/obj/item/weapon/material/twohanded/fireaxe/F = C
if(F.wielded)
- spawn(0) close(1)
+ close(1)
else
user << "You need to be wielding \the [C] to do that. "
@@ -939,9 +941,9 @@ About the new airlock wires panel:
else if( !welded && !operating )
if(density)
- spawn(0) open(1)
+ open(1)
else
- spawn(0) close(1)
+ close(1)
else
..()
return
@@ -1121,8 +1123,8 @@ About the new airlock wires panel:
return 0
return ..(M)
-/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null)
- ..()
+/obj/machinery/door/airlock/Initialize(mapload, obj/structure/door_assembly/assembly = null)
+ . = ..()
//if assembly is given, create the new door from the assembly
if (assembly && istype(assembly))
@@ -1150,7 +1152,7 @@ About the new airlock wires panel:
set_dir(assembly.dir)
//wires
- var/turf/T = get_turf(newloc)
+ var/turf/T = get_turf(src)
if(T && (T.z in config.admin_levels))
secured_wires = 1
if (secured_wires)
@@ -1158,13 +1160,11 @@ About the new airlock wires panel:
else
wires = new/datum/wires/airlock(src)
-/obj/machinery/door/airlock/initialize()
- if(src.closeOtherId != null)
+ if(mapload && src.closeOtherId != null)
for (var/obj/machinery/door/airlock/A in world)
if(A.closeOtherId == src.closeOtherId && A != src)
src.closeOther = A
break
- ..()
/obj/machinery/door/airlock/Destroy()
qdel(wires)
diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
index bb4b29b88a6..5b481729468 100644
--- a/code/game/machinery/doors/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -21,10 +21,10 @@ obj/machinery/door/airlock/receive_signal(datum/signal/signal)
if(id_tag != signal.data["tag"] || !signal.data["command"]) return
cur_command = signal.data["command"]
- spawn()
- execute_current_command()
+ execute_current_command()
obj/machinery/door/airlock/proc/execute_current_command()
+ set waitfor = FALSE
if(operating)
return //emagged or busy doing something else
@@ -123,14 +123,13 @@ obj/machinery/door/airlock/Bumped(atom/AM)
return
obj/machinery/door/airlock/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
if(new_frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK)
-
-obj/machinery/door/airlock/initialize()
- ..()
+obj/machinery/door/airlock/Initialize()
+ . = ..()
if(frequency)
set_frequency(frequency)
@@ -140,16 +139,13 @@ obj/machinery/door/airlock/initialize()
update_icon()
-obj/machinery/door/airlock/New()
- ..()
-
- if(radio_controller)
+ if(SSradio)
set_frequency(frequency)
obj/machinery/door/airlock/Destroy()
- if(frequency && radio_controller)
- radio_controller.remove_object(src,frequency)
- ..()
+ if(frequency && SSradio)
+ SSradio.remove_object(src,frequency)
+ return ..()
obj/machinery/airlock_sensor
icon = 'icons/obj/airlock_machines.dmi'
@@ -209,22 +205,20 @@ obj/machinery/airlock_sensor/process()
update_icon()
obj/machinery/airlock_sensor/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK)
-obj/machinery/airlock_sensor/initialize()
+obj/machinery/airlock_sensor/Initialize()
+ . = ..()
set_frequency(frequency)
-
-obj/machinery/airlock_sensor/New()
- ..()
- if(radio_controller)
+ if(SSradio)
set_frequency(frequency)
obj/machinery/airlock_sensor/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src,frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src,frequency)
+ return ..()
obj/machinery/airlock_sensor/airlock_interior
command = "cycle_interior"
@@ -278,25 +272,20 @@ obj/machinery/access_button/attack_hand(mob/user)
obj/machinery/access_button/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK)
+obj/machinery/access_button/Initialize()
+ . = ..()
-obj/machinery/access_button/initialize()
- set_frequency(frequency)
-
-
-obj/machinery/access_button/New()
- ..()
-
- if(radio_controller)
+ if(SSradio)
set_frequency(frequency)
obj/machinery/access_button/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src, frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, frequency)
+ return ..()
obj/machinery/access_button/airlock_interior
frequency = 1379
@@ -305,3 +294,11 @@ obj/machinery/access_button/airlock_interior
obj/machinery/access_button/airlock_exterior
frequency = 1379
command = "cycle_exterior"
+
+obj/machinery/door/airlock/proc/command(var/new_command)
+ cur_command = new_command
+
+ //if there's no power, recieve the signal but just don't do anything. This allows airlocks to continue to work normally once power is restored
+ if(arePowerSystemsOn())
+ spawn()
+ execute_current_command()
\ No newline at end of file
diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm
index 8b6ddb58344..01741acfe0f 100644
--- a/code/game/machinery/doors/alarmlock.dm
+++ b/code/game/machinery/doors/alarmlock.dm
@@ -9,19 +9,16 @@
var/air_frequency = 1437
autoclose = 0
-/obj/machinery/door/airlock/alarmlock/New()
- ..()
- air_connection = new
-
/obj/machinery/door/airlock/alarmlock/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src,air_frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src,air_frequency)
+ return ..()
-/obj/machinery/door/airlock/alarmlock/initialize()
- ..()
- radio_controller.remove_object(src, air_frequency)
- air_connection = radio_controller.add_object(src, air_frequency, RADIO_TO_AIRALARM)
+/obj/machinery/door/airlock/alarmlock/Initialize()
+ . = ..()
+ air_connection = new
+ SSradio.remove_object(src, air_frequency)
+ air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM)
open()
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index 22c7da36546..5e34e661de8 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -31,8 +31,8 @@
var/_wifi_id
var/datum/wifi/receiver/button/door/wifi_receiver
-/obj/machinery/door/blast/initialize()
- ..()
+/obj/machinery/door/blast/Initialize()
+ . = ..()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
@@ -188,3 +188,8 @@ obj/machinery/door/blast/regular/open
icon_state_closed = "shutter1"
icon_state_closing = "shutterc1"
icon_state = "shutter1"
+
+/obj/machinery/door/blast/shutters/open
+ icon_state = "shutter0"
+ density = 0
+ opacity = 0
\ No newline at end of file
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 586804665a1..e279b011141 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -37,27 +37,24 @@
var/datum/browser/menu = new( null, "brig_timer", "Brig Timer", 400, 300 )
-/obj/machinery/door_timer/New()
- ..()
+/obj/machinery/door_timer/Initialize()
+ . = ..()
- spawn(20)
- for(var/obj/machinery/door/window/brigdoor/M in machines)
- if (M.id == src.id)
- targets += M
+ for(var/obj/machinery/door/window/brigdoor/M in machines)
+ if (M.id == src.id)
+ targets += M
- for(var/obj/machinery/flasher/F in machines)
- if(F.id == src.id)
- targets += F
+ for(var/obj/machinery/flasher/F in machines)
+ if(F.id == src.id)
+ targets += F
- for(var/obj/structure/closet/secure_closet/brig/C in world)
- if(C.id == src.id)
- targets += C
+ for(var/obj/structure/closet/secure_closet/brig/C in world)
+ if(C.id == src.id)
+ targets += C
- if(targets.len==0)
- stat |= BROKEN
- update_icon()
- return
- return
+ if(targets.len==0)
+ stat |= BROKEN
+ update_icon()
//Main door timer loop, if it's timing and time is >0 reduce time by 1.
@@ -386,9 +383,8 @@
// Adds an icon in case the screen is broken/off, stolen from status_display.dm
/obj/machinery/door_timer/proc/set_picture(var/state)
picture_state = state
- overlays.Cut()
- overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
-
+ cut_overlays()
+ add_overlay(picture_state)
//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display
// Stolen from status_display
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index b4118abd48a..84c37d7f40c 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -31,7 +31,6 @@
var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened.
var/open_duration = 150//How long it stays open
-
var/hashatch = 0//If 1, this door has hatches, and certain small creatures can move through them without opening the door
var/hatchstate = 0//0: closed, 1: open
var/hatchstyle = "1x1"
@@ -60,7 +59,7 @@
playsound(src.loc, hitsound_light, 8, 1, -1)
user.do_attack_animation(src)
-/obj/machinery/door/New()
+/obj/machinery/door/Initialize()
. = ..()
if(density)
layer = closed_layer
@@ -87,24 +86,22 @@
return
/obj/machinery/door/proc/setup_hatch()
+ hatch_image = image('icons/obj/doors/hatches.dmi', src, hatchstyle, closed_layer+0.1)
+ hatch_image.color = hatch_colour
+ hatch_image.pixel_x = hatch_offset_x
+ hatch_image.pixel_y = hatch_offset_y
+ hatch_image.dir = dir
- if (overlays != null)
- hatch_image = image('icons/obj/doors/hatches.dmi', src, hatchstyle, closed_layer+0.1)
- hatch_image.color = hatch_colour
- hatch_image.pixel_x = hatch_offset_x
- hatch_image.pixel_y = hatch_offset_y
-
- overlays += hatch_image
- update_icon()
- else
- spawn(10)
- setup_hatch()
+ add_overlay(hatch_image)
+ update_icon()
/obj/machinery/door/proc/open_hatch(var/atom/mover = null)
if (!hatchstate)
hatchstate = 1
update_icon()
playsound(src.loc, hatch_open_sound, 40, 1, -1)
+
+
close_hatch_in(29)
if (istype(mover, /mob/living))
@@ -120,28 +117,22 @@
/obj/machinery/door/Destroy()
density = 0
update_nearby_tiles()
- ..()
- return
+
+ return ..()
/obj/machinery/door/proc/close_door_in(var/time = 5 SECONDS)
- spawn(time)
- src.close()
+ addtimer(CALLBACK(src, .proc/close), time, TIMER_UNIQUE | TIMER_OVERRIDE)
-/obj/machinery/door/proc/close_hatch_in(var/time = 5 SECONDS)
- spawn(time)
- close_hatch()
-
-/obj/machinery/door/proc/auto_close()
- if (!QDELETED(src) && can_close(FALSE) && autoclose)
- close()
+/obj/machinery/door/proc/close_hatch_in(var/time = 3 SECONDS)
+ addtimer(CALLBACK(src, .proc/close_hatch), time, TIMER_UNIQUE | TIMER_OVERRIDE)
/obj/machinery/door/proc/can_open()
- if(!density || operating || !ticker)
+ if(!density || operating || !ROUND_IS_STARTED)
return 0
return 1
/obj/machinery/door/proc/can_close()
- if(density || operating || !ticker)
+ if(density || operating || !ROUND_IS_STARTED)
return 0
return 1
@@ -228,7 +219,7 @@
switch (Proj.damage_type)
if(BRUTE)
new /obj/item/stack/material/steel(src.loc, 2)
- getFromPool(/obj/item/stack/rods, src.loc, 3)
+ new /obj/item/stack/rods(src.loc, 3)
if(BURN)
new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes!
qdel(src)
@@ -238,7 +229,6 @@
take_damage(min(damage, 100))
-
/obj/machinery/door/hitby(AM as mob|obj, var/speed=5)
..()
@@ -400,8 +390,7 @@
/obj/machinery/door/emp_act(severity)
if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) )
- spawn(0)
- open()
+ open()
..()
@@ -496,14 +485,16 @@
/obj/machinery/door/proc/next_close_time()
return (normalspeed ? open_duration : 5)
+/obj/machinery/door/proc/autoclose()
+ if (!QDELETED(src) && can_close(FALSE) && autoclose)
+ close()
+
/obj/machinery/door/proc/close(var/forced = 0)
if(!can_close(forced))
if (autoclose)
- for (var/atom/movable/AM in get_turf(src))
- if (AM.density && AM != src)
- spawn(60)
- src.auto_close()
- return
+ for (var/atom/movable/M in get_turf(src))
+ if (M.density && M != src)
+ addtimer(CALLBACK(src, .proc/autoclose), 60)
operating = 1
do_animate("closing")
@@ -533,14 +524,11 @@
return ..(M)
/obj/machinery/door/update_nearby_tiles(need_rebuild)
- if(!air_master)
- return 0
-
for(var/turf/T in locs)
if (istype(T, /turf/simulated))
var/turf/simulated/turf = T
update_heat_protection(turf)
- air_master.mark_for_update(turf)
+ SSair.mark_for_update(turf)
return 1
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index a7fce5f1d87..ab9dbcd7e23 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -50,12 +50,11 @@
"cold"
)
-/obj/machinery/door/firedoor/New()
+/obj/machinery/door/firedoor/Initialize()
. = ..()
for(var/obj/machinery/door/firedoor/F in loc)
if(F != src)
- spawn(1)
- qdel(src)
+ QDEL_IN(src, 1)
return .
var/area/A = get_area(src)
ASSERT(istype(A))
@@ -69,6 +68,9 @@
A.all_doors.Add(src)
areas_added += A
+ if (!density)
+ cut_overlay(hatch_image) // Parent call adds this, but we don't want it just yet.
+
/obj/machinery/door/firedoor/Destroy()
for(var/area/A in areas_added)
A.all_doors.Remove(src)
@@ -183,21 +185,25 @@
// Accountability!
users_to_open |= user.name
needs_to_close = !issilicon(user)
- spawn()
- open()
+
+ open()
else
- spawn()
- close()
+ close()
if(needs_to_close)
- spawn(50)
- alarmed = 0
- for(var/area/A in areas_added) //Just in case a fire alarm is turned off while the firedoor is going through an autoclose cycle
- if(A.fire || A.air_doors_activated)
- alarmed = 1
- if(alarmed)
- nextstate = FIREDOOR_CLOSED
- close()
+ addtimer(CALLBACK(src, .proc/do_close), 50)
+
+/obj/machinery/door/firedoor/proc/do_close()
+ var/alarmed = FALSE
+ for (var/thing in areas_added)
+ var/area/A = thing
+ if (A.fire || A.air_doors_activated)
+ alarmed = TRUE
+ break
+
+ if (alarmed)
+ nextstate = FIREDOOR_CLOSED
+ close()
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
add_fingerprint(user)
@@ -279,11 +285,9 @@
"You force \the [ blocked ? "welded" : "" ] [src] [density ? "open" : "closed"] with \the [C]!",\
"You hear metal strain and groan, and a door [density ? "opening" : "closing"].")
if(density)
- spawn(0)
- open(1)
+ open(1, user)
else
- spawn(0)
- close()
+ open(0, user)
return
return ..()
@@ -298,6 +302,7 @@
lockdown=0
// Pressure alerts
pdiff = getOPressureDifferential(src.loc)
+ pdiff = QUANTIZE(pdiff) // Hello, sanity.
if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF)
lockdown = 1
if(!pdiff_alert)
@@ -316,7 +321,7 @@
continue // Bad data.
var/celsius = convert_k2c(tileinfo[1])
- var/alerts=0
+ var/alerts = 0
// Temperatures
if(celsius >= FIREDOOR_MAX_TEMP)
@@ -347,12 +352,12 @@
return
/obj/machinery/door/firedoor/close()
- overlays.Cut()
+ cut_overlays()
latetoggle()
return ..()
-/obj/machinery/door/firedoor/open(var/forced = 0)
- overlays.Cut()
+/obj/machinery/door/firedoor/open(forced = 0, user = usr)
+ cut_overlays()
if(hatch_open)
hatch_open = 0
visible_message("The maintenance panel of \the [src] closes.")
@@ -364,8 +369,7 @@
else
use_power(360)
else
- log_admin("[usr]([usr.ckey]) has forced open an emergency shutter.",key_name(usr))
- message_admins("[usr]([usr.ckey]) has forced open an emergency shutter.")
+ log_and_message_admins("has forced open an emergency shutter.", user, loc)
latetoggle()
return ..()
@@ -375,49 +379,52 @@
flick("door_opening", src)
if("closing")
flick("door_closing", src)
- return
-
/obj/machinery/door/firedoor/update_icon()
- overlays.Cut()
+ cut_overlays()
set_light(0)
var/do_set_light = 0
if(density)
icon_state = "door_closed"
if(hatch_open)
- overlays += "hatch"
+ add_overlay("hatch")
if(blocked)
- overlays += "welded"
+ add_overlay("welded")
if(pdiff_alert)
- overlays += "palert"
+ add_overlay("palert")
do_set_light = 1
if(dir_alerts)
- for(var/d=1;d<=4;d++)
+ for (var/d = 1; d <= 4; d++)
var/cdir = cardinal[d]
- for(var/i=1;i<=ALERT_STATES.len;i++)
- if(dir_alerts[d] & (1<<(i-1)))
- overlays += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir)
- do_set_light = 1
+ if (!dir_alerts[d])
+ continue
+ if (dir_alerts[d] & FIREDOOR_ALERT_COLD)
+ add_overlay("alert_cold_[cdir]")
+ if (dir_alerts[d] & FIREDOOR_ALERT_HOT)
+ add_overlay("alert_hot_[cdir]")
+
+ do_set_light = TRUE
+
if (hashatch)
- hatch_image.color = hatch_colour//This line is unnecessary, but is here for configuring colours ingame. Should be removed when finished
if (hatchstate)
hatch_image.icon_state = "[hatchstyle]_open"
else
hatch_image.icon_state = hatchstyle
- overlays += hatch_image
+ add_overlay(hatch_image)
else
icon_state = "door_open"
if(blocked)
- overlays += "welded_open"
+ add_overlay("welded_open")
if(do_set_light)
- set_light(1.5, 0.5, COLOR_SUN)
+ set_light(2, 0.5, COLOR_SUN)
//These are playing merry hell on ZAS. Sorry fellas :(
-/obj/machinery/door/firedoor/border_only
-/*
+/*/obj/machinery/door/firedoor/border_only
+
+
icon = 'icons/obj/doors/edge_Doorfire.dmi'
glass = 1 //There is a glass window so you can see through the door
//This is needed due to BYOND limitations in controlling visibility
@@ -443,15 +450,15 @@
update_nearby_tiles(need_rebuild)
- if(!air_master) return 0
+ if(!SSair) return 0
var/turf/simulated/source = loc
var/turf/simulated/destination = get_step(source,dir)
update_heat_protection(loc)
- if(istype(source)) air_master.tiles_to_update += source
- if(istype(destination)) air_master.tiles_to_update += destination
+ if(istype(source)) SSair.tiles_to_update += source
+ if(istype(destination)) SSair.tiles_to_update += destination
return 1
*/
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index bd95273759a..21c62bc05fa 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -4,8 +4,8 @@
hatch_offset_x = 16
hatch_colour = "#d2d2d2"
-/obj/machinery/door/airlock/multi_tile/New()
- ..()
+/obj/machinery/door/airlock/multi_tile/Initialize()
+ . = ..()
SetBounds()
/obj/machinery/door/airlock/multi_tile/Move()
@@ -42,7 +42,7 @@
hatch_image.pixel_y = hatch_offset_x
hatch_image.transform = turn(hatch_image.transform, 90)
- overlays += hatch_image
+ add_overlay(hatch_image)
else
spawn(10)//If overlays aren't initialised, wait a second and try again
setup_hatch()
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 8999a9756c5..1e9d22e0ebe 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -16,13 +16,12 @@
explosion_resistance = 5
air_properties_vary_with_direction = 1
-/obj/machinery/door/window/New()
- ..()
+/obj/machinery/door/window/Initialize()
+ . = ..()
update_nearby_tiles()
if (src.req_access && src.req_access.len)
src.icon_state = "[src.icon_state]"
src.base_state = src.icon_state
- return
/obj/machinery/door/window/proc/shatter(var/display_message = 1)
new /obj/item/weapon/material/shard(src.loc)
@@ -54,36 +53,31 @@
/obj/machinery/door/window/Destroy()
density = 0
update_nearby_tiles()
- ..()
+ return ..()
/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj)
- if (!( ismob(AM) ))
+ if (istype(AM, /obj))
var/mob/living/bot/bot = AM
if(istype(bot))
if(density && src.check_access(bot.botcard))
open()
- sleep(50)
- close()
+ addtimer(CALLBACK(src, .proc/close), 50)
else if(istype(AM, /obj/mecha))
var/obj/mecha/mecha = AM
if(density)
if(mecha.occupant && src.allowed(mecha.occupant))
open()
- sleep(50)
- close()
+ addtimer(CALLBACK(src, .proc/close), 50)
return
- if (!( ticker ))
+ if (!( ROUND_IS_STARTED ))
return
if (src.operating)
return
if (src.density && (!issmall(AM) || ishuman(AM)) && src.allowed(AM))
open()
- if(src.check_access(null))
- sleep(50)
- else //secure doors close faster
- sleep(20)
- close()
- return
+ //secure doors close faster
+ var/time = check_access(null) ? 50 : 20
+ addtimer(CALLBACK(src, .proc/close), time)
/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover) && mover.checkpass(PASSGLASS))
@@ -105,7 +99,7 @@
/obj/machinery/door/window/open()
if (src.operating == 1) //doors can still open when emag-disabled
return 0
- if (!ticker)
+ if (!ROUND_IS_STARTED)
return 0
if(!src.operating) //in case of emag
src.operating = 1
@@ -116,7 +110,6 @@
explosion_resistance = 0
src.density = 0
-// src.sd_SetOpacity(0) //TODO: why is this here? Opaque windoors? ~Carn
update_nearby_tiles()
if(operating == 1) //emag again
@@ -133,8 +126,6 @@
src.density = 1
explosion_resistance = initial(explosion_resistance)
-// if(src.visible)
-// SetOpacity(1) //TODO: why is this here? Opaque windoors? ~Carn
update_nearby_tiles()
sleep(10)
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 6661468f59e..f762a575739 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -11,7 +11,7 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array/Destroy()
doppler_arrays -= src
- ..()
+ return ..()
/obj/machinery/doppler_array/proc/sense_explosion(var/x0,var/y0,var/z0,var/devastation_range,var/heavy_impact_range,var/light_impact_range,var/took)
if(stat & NOPOWER) return
@@ -48,4 +48,4 @@ var/list/doppler_arrays = list()
if( !(stat & NOPOWER) )
icon_state = initial(icon_state)
else
- icon_state = "[initial(icon_state)]-off"
\ No newline at end of file
+ icon_state = "[initial(icon_state)]-off"
diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm
index 35f58176b1a..1ba5d8f0f29 100644
--- a/code/game/machinery/embedded_controller/airlock_controllers.dm
+++ b/code/game/machinery/embedded_controller/airlock_controllers.dm
@@ -12,8 +12,8 @@
var/tag_shuttle_mech_sensor
var/tag_secure = 0
-/obj/machinery/embedded_controller/radio/airlock/initialize()
- ..()
+/obj/machinery/embedded_controller/radio/airlock/Initialize()
+ . = ..()
program = new/datum/computer/file/embedded_program/airlock(src)
//Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm
index feb5dc510d0..3a5c57ad95f 100644
--- a/code/game/machinery/embedded_controller/airlock_docking_controller.dm
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm
@@ -5,8 +5,8 @@
var/datum/computer/file/embedded_program/docking/airlock/docking_program
tag_secure = 1
-/obj/machinery/embedded_controller/radio/airlock/docking_port/initialize()
- ..()
+/obj/machinery/embedded_controller/radio/airlock/docking_port/Initialize()
+ . = ..()
airlock_program = new/datum/computer/file/embedded_program/airlock/docking(src)
docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program)
program = docking_program
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
index 6535c9932a8..7dec59de8cd 100644
--- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm
@@ -9,8 +9,8 @@
var/datum/computer/file/embedded_program/docking/multi/docking_program
-/obj/machinery/embedded_controller/radio/docking_port_multi/initialize()
- ..()
+/obj/machinery/embedded_controller/radio/docking_port_multi/Initialize()
+ . = ..()
docking_program = new/datum/computer/file/embedded_program/docking/multi(src)
program = docking_program
@@ -55,8 +55,8 @@
var/datum/computer/file/embedded_program/airlock/multi_docking/airlock_program
tag_secure = 1
-/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/initialize()
- ..()
+/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Initialize()
+ . = ..()
airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src)
program = airlock_program
diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm
index a128e6c4e48..48fb7d14a0f 100644
--- a/code/game/machinery/embedded_controller/embedded_controller_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm
@@ -10,9 +10,9 @@
var/on = 1
obj/machinery/embedded_controller/radio/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src,frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src,frequency)
+ return ..()
/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line)
return 0
@@ -57,7 +57,8 @@ obj/machinery/embedded_controller/radio/Destroy()
var/datum/radio_frequency/radio_connection
unacidable = 1
-/obj/machinery/embedded_controller/radio/initialize()
+/obj/machinery/embedded_controller/radio/Initialize()
+ . = ..()
set_frequency(frequency)
/obj/machinery/embedded_controller/radio/update_icon()
@@ -78,6 +79,6 @@ obj/machinery/embedded_controller/radio/Destroy()
qdel(signal)
/obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, radio_filter)
\ No newline at end of file
+ radio_connection = SSradio.add_object(src, frequency, radio_filter)
diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm
index f579aca6f7a..a8be295ccd1 100644
--- a/code/game/machinery/embedded_controller/embedded_program_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_program_base.dm
@@ -17,7 +17,7 @@
/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
return
-/datum/computer/file/embedded_program/proc/process()
+/datum/computer/file/embedded_program/process()
return
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm
index 635be19024e..2dfd734424e 100644
--- a/code/game/machinery/embedded_controller/simple_docking_controller.dm
+++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm
@@ -4,8 +4,8 @@
var/tag_door
var/datum/computer/file/embedded_program/docking/simple/docking_program
-/obj/machinery/embedded_controller/radio/simple_docking_controller/initialize()
- ..()
+/obj/machinery/embedded_controller/radio/simple_docking_controller/Initialize()
+ . = ..()
docking_program = new/datum/computer/file/embedded_program/docking/simple(src)
program = docking_program
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 5ee94574a88..bdbe66c63e5 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -21,7 +21,7 @@
var/seclevel
/obj/machinery/firealarm/update_icon()
- overlays.Cut()
+ cut_overlays()
if(wiresexposed)
switch(buildstage)
@@ -60,7 +60,7 @@
previous_state = icon_state
set_light(l_range = L_WALLMOUNT_HI_RANGE, l_power = L_WALLMOUNT_HI_POWER, l_color = "#FF6633")
- src.overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]")
+ add_overlay("overlay_[seclevel]")
/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume)
if(src.detecting)
@@ -160,7 +160,6 @@
src.alarm()
src.time = 0
src.timing = 0
- processing_objects.Remove(src)
src.updateDialog()
last_process = world.timeofday
@@ -171,8 +170,7 @@
/obj/machinery/firealarm/power_change()
..()
- spawn(rand(0,15))
- update_icon()
+ queue_icon_update()
/obj/machinery/firealarm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
var/data[0]
@@ -228,12 +226,13 @@
//playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0)
return
-/obj/machinery/firealarm/New(loc, dir, building)
- ..()
-
- if(loc)
- src.loc = loc
+/obj/machinery/firealarm/proc/set_security_level(var/newlevel)
+ if(seclevel != newlevel)
+ seclevel = newlevel
+ update_icon()
+/obj/machinery/firealarm/Initialize(mapload, dir, building)
+ . = ..()
if(dir)
src.set_dir(dir)
@@ -244,12 +243,6 @@
pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0
-/obj/machinery/firealarm/proc/set_security_level(var/newlevel)
- if(seclevel != newlevel)
- seclevel = newlevel
- update_icon()
-
-/obj/machinery/firealarm/initialize()
if(z in config.contact_levels)
set_security_level(security_level? get_security_level() : "green")
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index ba8f037d168..de878480ed6 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -27,8 +27,8 @@
base_state = "pflash"
density = 1
-/obj/machinery/flasher/initialize()
- ..()
+/obj/machinery/flasher/Initialize()
+ . = ..()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
@@ -118,11 +118,11 @@
if (!src.anchored)
user.show_message(text("[src] can now be moved. "))
- src.overlays.Cut()
+ cut_overlays()
else if (src.anchored)
user.show_message(text("[src] is now secured. "))
- src.overlays += "[base_state]-s"
+ add_overlay("[base_state]-s")
/obj/machinery/button/flasher
name = "flasher button"
diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm
index bc2f84159c3..abb2cc6f8be 100644
--- a/code/game/machinery/floodlight.dm
+++ b/code/game/machinery/floodlight.dm
@@ -1,4 +1,3 @@
-//these are probably broken
/obj/machinery/floodlight
name = "Emergency Floodlight"
@@ -10,7 +9,7 @@
var/use = 200 // 200W light
var/unlocked = 0
var/open = 0
- var/brightness_on = 8 //can't remember what the maxed out value is
+ var/brightness_on = 12 //can't remember what the maxed out value is
light_color = LIGHT_COLOR_TUNGSTEN
light_wedge = LIGHT_WIDE
@@ -133,3 +132,19 @@
cell = W
user << "You insert the power cell."
update_icon()
+
+/obj/item/weapon/floodlight_diy
+ name = "Emergency Floodlight Kit"
+ desc = "A do-it-yourself kit for constructing the finest of emergency floodlights."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "inf_box"
+ item_state = "syringe_kit"
+
+/obj/item/weapon/floodlight_diy/attack_self(mob/user)
+ user << "You start piecing together the kit... "
+ if(do_after(user, 80))
+ var/obj/machinery/floodlight/R = new /obj/machinery/floodlight(user.loc)
+ user.visible_message("[user] assembles \a [R].\
+ ", "You assemble \a [R]. ")
+ R.add_fingerprint(user)
+ qdel(src)
diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm
index 7298b62abf9..f89200195dc 100644
--- a/code/game/machinery/floor_light.dm
+++ b/code/game/machinery/floor_light.dm
@@ -14,6 +14,7 @@ var/list/floor_light_cache = list()
matter = list(DEFAULT_WALL_MATERIAL = 2500, "glass" = 2750)
var/on
+ var/on_state = "on"
var/damaged
var/default_light_range = 4
var/default_light_power = 2
@@ -108,7 +109,7 @@ var/list/floor_light_cache = list()
if(isnull(damaged))
var/cache_key = "floorlight-[default_light_colour]"
if(!floor_light_cache[cache_key])
- var/image/I = image("on")
+ var/image/I = image("[on_state]")
I.color = default_light_colour
I.layer = layer+0.001
floor_light_cache[cache_key] = I
@@ -150,8 +151,20 @@ var/list/floor_light_cache = list()
var/area/A = get_area(src)
if(A)
on = 0
- ..()
+ return ..()
/obj/machinery/floor_light/cultify()
default_light_colour = "#FF0000"
- update_brightness()
\ No newline at end of file
+ update_brightness()
+
+/obj/machinery/floor_light/dance
+ name = "dance floor"
+ on_state = "light_on-dancefloor_A"
+ anchored = 1
+ on = TRUE
+ use_power = 2
+
+/obj/machinery/floor_light/dance/alternate
+ name = "dance floor"
+ on_state = "light_on-dancefloor_B"
+ anchored = 1
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index d7c037839d8..658cf85c007 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -205,7 +205,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/holopad/Destroy()
for (var/mob/living/silicon/ai/master in masters)
clear_holo(master)
- ..()
+ return ..()
/*
Holographic project of everything else.
diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm
index 69f12726342..7cdb742b77d 100644
--- a/code/game/machinery/holosign.dm
+++ b/code/game/machinery/holosign.dm
@@ -15,8 +15,8 @@
var/_wifi_id
var/datum/wifi/receiver/button/holosign/wifi_receiver
-/obj/machinery/holosign/initialize()
- ..()
+/obj/machinery/holosign/Initialize()
+ . = ..()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
@@ -72,4 +72,4 @@
M.toggle()
return
- return
\ No newline at end of file
+ return
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 4c4c40ec7c7..75b47f154c8 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -12,12 +12,8 @@
var/_wifi_id
var/datum/wifi/receiver/button/igniter/wifi_receiver
-/obj/machinery/igniter/New()
- ..()
- update_icon()
-
-/obj/machinery/igniter/initialize()
- ..()
+/obj/machinery/igniter/Initialize()
+ . = ..()
update_icon()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
@@ -76,8 +72,8 @@
var/_wifi_id
var/datum/wifi/receiver/button/sparker/wifi_receiver
-/obj/machinery/sparker/initialize()
- ..()
+/obj/machinery/sparker/Initialize()
+ . = ..()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index 7be4a5ac81b..00a18328ec6 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -41,7 +41,7 @@ datum/track/New(var/title_name, var/audio)
/obj/machinery/media/jukebox/Destroy()
StopPlaying()
- ..()
+ return ..()
/obj/machinery/media/jukebox/power_change()
if(!powered(power_channel) || !anchored)
@@ -54,7 +54,7 @@ datum/track/New(var/title_name, var/audio)
update_icon()
/obj/machinery/media/jukebox/update_icon()
- overlays.Cut()
+ cut_overlays()
if(stat & (NOPOWER|BROKEN) || !anchored)
if(stat & BROKEN)
icon_state = "[state_base]-broken"
@@ -64,9 +64,9 @@ datum/track/New(var/title_name, var/audio)
icon_state = state_base
if(playing)
if(emagged)
- overlays += "[state_base]-emagged"
+ add_overlay("[state_base]-emagged")
else
- overlays += "[state_base]-running"
+ add_overlay("[state_base]-running")
/obj/machinery/media/jukebox/Topic(href, href_list)
if(..() || !(Adjacent(usr) || istype(usr, /mob/living/silicon)))
diff --git a/code/game/machinery/kitchen/cooking_machines/_appliance.dm b/code/game/machinery/kitchen/cooking_machines/_appliance.dm
index 65fc78e2112..20dd9caab23 100644
--- a/code/game/machinery/kitchen/cooking_machines/_appliance.dm
+++ b/code/game/machinery/kitchen/cooking_machines/_appliance.dm
@@ -40,8 +40,8 @@
var/combine_first = 0//If 1, this appliance will do combinaiton cooking before checking recipes
-/obj/machinery/appliance/initialize()
- ..()
+/obj/machinery/appliance/Initialize()
+ . = ..()
if(output_options.len)
verbs += /obj/machinery/appliance/proc/choose_output
@@ -540,7 +540,7 @@
// Produce nasty smoke.
visible_message("\The [src] vomits a gout of rancid smoke! ")
- var/datum/effect/effect/system/smoke_spread/bad/smoke = getFromPool(/datum/effect/effect/system/smoke_spread/bad)
+ var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad
smoke.attach(src)
smoke.set_up(10, 0, get_turf(src), 300)
smoke.start()
@@ -685,4 +685,4 @@
max_oil = 0
oil = 0
combine_target = null
- //Container is not reset
\ No newline at end of file
+ //Container is not reset
diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker.dm b/code/game/machinery/kitchen/cooking_machines/_cooker.dm
index 18089e06572..345a3cb400b 100644
--- a/code/game/machinery/kitchen/cooking_machines/_cooker.dm
+++ b/code/game/machinery/kitchen/cooking_machines/_cooker.dm
@@ -12,7 +12,7 @@
cooking_power = 0
/obj/machinery/appliance/cooker/examine(var/mob/user)
- .=..()
+ . = ..()
if (.)//no need to duplicate adjacency check
if (!stat)
if (temperature < min_temp)
@@ -40,16 +40,18 @@
. = cooking_power / optimal_power
. *= 100
-/obj/machinery/appliance/cooker/New()
- ..()
+/obj/machinery/appliance/cooker/Initialize()
+ . = ..()
loss = (active_power_usage / resistance)*0.5
cooking_objs = list()
for (var/i = 0, i < max_contents, i++)
cooking_objs.Add(new /datum/cooking_item/(new container_type(src)))
cooking = 0
+ queue_icon_update()
+
/obj/machinery/appliance/cooker/update_icon()
- overlays.Cut()
+ cut_overlays()
var/image/light
if (use_power == 2 && !stat)
light = image(icon, "light_on")
@@ -57,15 +59,11 @@
light = image(icon, "light_off")
light.pixel_x = light_x
light.pixel_y = light_y
- overlays += light
-
-
-
+ add_overlay(light)
/obj/machinery/appliance/cooker/process()
if (!stat)
heat_up()
-
else
var/turf/T = get_turf(src)
if (temperature > T.temperature)
@@ -73,8 +71,8 @@
..()
/obj/machinery/appliance/cooker/power_change()
- .=..()
- update_icon()
+ . = ..()
+ queue_icon_update()
/obj/machinery/appliance/cooker/proc/update_cooking_power()
var/temp_scale = 0
@@ -112,22 +110,17 @@
equalize_temperature()
return -1
-
/obj/machinery/appliance/cooker/proc/equalize_temperature()
temperature -= loss//Temperature will fall somewhat slowly
update_cooking_power()
-
//Cookers do differently, they use containers
/obj/machinery/appliance/cooker/has_space(var/obj/item/I)
-
if (istype(I, /obj/item/weapon/reagent_containers/cooking_container))
//Containers can go into an empty slot
if (cooking_objs.len < max_contents)
return 1
-
else
-
//Any food items directly added need an empty container. A slot without a container cant hold food
for (var/datum/cooking_item/CI in cooking_objs)
if (CI.container.check_contents() == 0)
@@ -135,9 +128,8 @@
return 0
-
/obj/machinery/appliance/cooker/add_content(var/obj/item/I, var/mob/user)
var/datum/cooking_item/CI = ..()
if (CI && CI.combine_target)
user << "The [I] will be used to make a [selected_option]. Output selection is returned to default for future items."
- selected_option = null
\ No newline at end of file
+ selected_option = null
diff --git a/code/game/machinery/kitchen/cooking_machines/_mixer.dm b/code/game/machinery/kitchen/cooking_machines/_mixer.dm
index 2c23fe40701..d5fb8b406b2 100644
--- a/code/game/machinery/kitchen/cooking_machines/_mixer.dm
+++ b/code/game/machinery/kitchen/cooking_machines/_mixer.dm
@@ -20,8 +20,8 @@ fundamental differences
..()
user << span("notice", "It is currently set to make a [selected_option]")
-/obj/machinery/appliance/mixer/New()
- ..()
+/obj/machinery/appliance/mixer/Initialize()
+ . = ..()
cooking_objs.Add(new /datum/cooking_item/(new /obj/item/weapon/reagent_containers/cooking_container(src)))
cooking = 0
selected_option = pick(output_options)
@@ -134,4 +134,4 @@ fundamental differences
/obj/machinery/appliance/mixer/process()
if (!stat)
for (var/i in cooking_objs)
- do_cooking_tick(i)
\ No newline at end of file
+ do_cooking_tick(i)
diff --git a/code/game/machinery/kitchen/cooking_machines/fryer.dm b/code/game/machinery/kitchen/cooking_machines/fryer.dm
index d96ec32d35f..2fd00ef5a86 100644
--- a/code/game/machinery/kitchen/cooking_machines/fryer.dm
+++ b/code/game/machinery/kitchen/cooking_machines/fryer.dm
@@ -35,8 +35,8 @@
user << "Oil Level: [oil.total_volume]/[optimal_oil]"
-/obj/machinery/appliance/cooker/fryer/New()
- ..()
+/obj/machinery/appliance/cooker/fryer/Initialize()
+ . = ..()
oil = new/datum/reagents(optimal_oil * 1.25, src)
var/variance = rand()*0.15
//Fryer is always a little below full, but its usually negligible
diff --git a/code/game/machinery/kitchen/cooking_machines/oven.dm b/code/game/machinery/kitchen/cooking_machines/oven.dm
index 00a6fd13395..a168a3bd46c 100644
--- a/code/game/machinery/kitchen/cooking_machines/oven.dm
+++ b/code/game/machinery/kitchen/cooking_machines/oven.dm
@@ -2,9 +2,7 @@
name = "oven"
desc = "Cookies are ready, dear."
icon = 'icons/obj/cooking_machines.dmi'
- icon_state = "oven_off"
- on_icon = "oven_on"
- off_icon = "oven_off"
+ icon_state = "ovenopen"
cook_type = "baked"
appliancetype = OVEN
food_color = "#A34719"
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index 20c18e6e2f1..61e2f7c9405 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -22,21 +22,20 @@
/obj/machinery/gibber/autogibber
var/turf/input_plate
-/obj/machinery/gibber/autogibber/New()
- ..()
- spawn(5)
- for(var/i in cardinal)
- var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
- if(input_obj)
- if(isturf(input_obj.loc))
- input_plate = input_obj.loc
- gib_throw_dir = i
- qdel(input_obj)
- break
+/obj/machinery/gibber/autogibber/Initialize()
+ . = ..()
+ for(var/i in cardinal)
+ var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
+ if(input_obj)
+ if(isturf(input_obj.loc))
+ input_plate = input_obj.loc
+ gib_throw_dir = i
+ qdel(input_obj)
+ break
- if(!input_plate)
- log_misc("a [src] didn't find an input plate.")
- return
+ if(!input_plate)
+ log_misc("a [src] didn't find an input plate.")
+ return
/obj/machinery/gibber/autogibber/Bumped(var/atom/A)
if(!input_plate) return
@@ -50,22 +49,22 @@
M.gib()
-/obj/machinery/gibber/New()
- ..()
- src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+/obj/machinery/gibber/Initialize()
+ . = ..()
+ add_overlay("grjam")
/obj/machinery/gibber/update_icon()
- overlays.Cut()
+ cut_overlays()
if (dirty)
- src.overlays += image('icons/obj/kitchen.dmi', "grbloody")
+ add_overlay("grbloody")
if(stat & (NOPOWER|BROKEN))
return
if (!occupant)
- src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+ add_overlay("grjam")
else if (operating)
- src.overlays += image('icons/obj/kitchen.dmi', "gruse")
+ add_overlay("gruse")
else
- src.overlays += image('icons/obj/kitchen.dmi', "gridle")
+ add_overlay("gridle")
/obj/machinery/gibber/relaymove(mob/user as mob)
src.go_out()
@@ -226,7 +225,7 @@
src.operating = 0
src.occupant.gib()
- qdel(src.occupant)
+ occupant = null
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
operating = 0
diff --git a/code/game/machinery/kitchen/icecream.dm b/code/game/machinery/kitchen/icecream.dm
index 448b252fd49..5da6a2aecb5 100644
--- a/code/game/machinery/kitchen/icecream.dm
+++ b/code/game/machinery/kitchen/icecream.dm
@@ -51,8 +51,8 @@
else
return "vanilla"
-/obj/machinery/icecream_vat/initialize()
- ..()
+/obj/machinery/icecream_vat/Initialize()
+ . = ..()
create_reagents(100)
while(product_types.len < 6)
product_types.Add(5)
@@ -184,7 +184,7 @@
/obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour_name)
name = "[flavour_name] icecream"
- src.overlays += "icecream_[flavour_name]"
+ add_overlay("icecream_[flavour_name]")
desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream."
ice_creamed = 1
@@ -193,4 +193,4 @@
#undef FLAVOUR_STRAWBERRY
#undef FLAVOUR_BLUE
#undef CONE_WAFFLE
-#undef CONE_CHOC
\ No newline at end of file
+#undef CONE_CHOC
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index c9763016618..050b180babf 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -25,8 +25,8 @@
* Initialising
********************/
-/obj/machinery/microwave/New()
- ..()
+/obj/machinery/microwave/Initialize()
+ . = ..()
reagents = new/datum/reagents(100)
reagents.my_atom = src
if (!available_recipes)
@@ -433,4 +433,4 @@
if(mover.checkpass(PASSTABLE))
//Animals can run under them, lots of empty space
return 1
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index b1b2cf27f35..d1464aeec3a 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -26,8 +26,8 @@
/obj/machinery/smartfridge/secure
is_secure = 1
-/obj/machinery/smartfridge/New()
- ..()
+/obj/machinery/smartfridge/Initialize()
+ . = ..()
if(is_secure)
wires = new/datum/wires/smartfridge/secure(src)
else
@@ -180,9 +180,9 @@
if(istype(O, /obj/item/weapon/screwdriver))
panel_open = !panel_open
user.visible_message("[user] [panel_open ? "opens" : "closes"] the maintenance panel of \the [src].", "You [panel_open ? "open" : "close"] the maintenance panel of \the [src].")
- overlays.Cut()
+ cut_overlays()
if(panel_open)
- overlays += image(icon, icon_panel)
+ add_overlay(icon_panel)
nanomanager.update_uis(src)
return
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index ded7ebc9b98..29003ad54e9 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -12,21 +12,18 @@
var/otherarea = null
// luminosity = 1
-/obj/machinery/light_switch/New()
- ..()
- spawn(5)
- src.area = get_area(src)
+/obj/machinery/light_switch/Initialize()
+ . = ..()
+ src.area = get_area(src)
- if(otherarea)
- src.area = locate(text2path("/area/[otherarea]"))
-
- if(!name)
- name = "light switch ([area.name])"
-
- src.on = src.area.lightswitch
- updateicon()
+ if(otherarea)
+ src.area = locate(text2path("/area/[otherarea]"))
+ if(!name)
+ name = "light switch ([area.name])"
+ src.on = src.area.lightswitch
+ updateicon()
/obj/machinery/light_switch/proc/updateicon()
if(stat & NOPOWER)
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index f7e791a29dc..7eb2ec1e279 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -114,8 +114,8 @@ Class Procs:
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
var/printing = 0 // Is this machine currently printing anything?
-/obj/machinery/New(l, d=0)
- ..(l)
+/obj/machinery/Initialize(mapload, d=0)
+ . = ..()
if(d)
set_dir(d)
@@ -140,24 +140,18 @@ Class Procs:
return M_NO_PROCESS
-/obj/machinery/proc/get_process_type()
- . |= M_PROCESSES
- if (use_power || idle_power_usage || active_power_usage)
- . |= M_USES_POWER
-
/obj/machinery/emp_act(severity)
if(use_power && stat == 0)
use_power(7500/severity)
- var/obj/effect/overlay/pulse2 = getFromPool(/obj/effect/overlay, src.loc)
+ var/obj/effect/overlay/pulse2 = new(src.loc)
pulse2.icon = 'icons/effects/effects.dmi'
pulse2.icon_state = "empdisable"
pulse2.name = "emp sparks"
pulse2.anchored = 1
pulse2.set_dir(pick(cardinal))
- spawn(10)
- qdel(pulse2)
+ QDEL_IN(pulse2, 10)
..()
/obj/machinery/ex_act(severity)
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index ca044a5a481..2487c6fd8fa 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -36,8 +36,8 @@
center = T
spawn(10) // must wait for map loading to finish
- if(radio_controller)
- radio_controller.add_object(src, freq, RADIO_MAGNETS)
+ if(SSradio)
+ SSradio.add_object(src, freq, RADIO_MAGNETS)
spawn()
magnetic_process()
@@ -191,9 +191,9 @@
pulling = 0
/obj/machinery/magnetic_module/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src, freq)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, freq)
+ return ..()
/obj/machinery/magnetic_controller
name = "Magnetic Control Console"
@@ -230,8 +230,8 @@
spawn(45) // must wait for map loading to finish
- if(radio_controller)
- radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS)
+ if(SSradio)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS)
if(path) // check for default path
@@ -402,6 +402,6 @@
// there doesn't HAVE to be separators but it makes paths syntatically visible
/obj/machinery/magnetic_controller/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src, frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, frequency)
+ return ..()
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
index 7b2775d9547..7af9846da45 100644
--- a/code/game/machinery/mass_driver.dm
+++ b/code/game/machinery/mass_driver.dm
@@ -17,8 +17,8 @@
var/_wifi_id
var/datum/wifi/receiver/button/mass_driver/wifi_receiver
-/obj/machinery/mass_driver/initialize()
- ..()
+/obj/machinery/mass_driver/Initialize()
+ . = ..()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
@@ -51,3 +51,119 @@
return
drive()
..(severity)
+
+/obj/machinery/mass_driver/attackby(obj/item/W, mob/user)
+
+ if(istype(W, /obj/item/weapon/wrench))
+ if(!anchored)
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ user.visible_message("[user.name] secures [src] to the floor.", \
+ "You secure the external reinforcing bolts to the floor.", \
+ "You hear a ratchet")
+ src.anchored = 1
+ else
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ user.visible_message("[user.name] unsecures [src] from the floor.", \
+ "You unsecure the external reinforcing bolts from the floor.", \
+ "You hear a ratchet")
+ src.anchored = 0
+
+/obj/machinery/mass_driver/verb/rotate()
+ set name = "Rotate"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.set_dir(turn(src.dir, 90))
+ return 1
+
+/obj/item/weapon/mass_driver_diy
+ name = "Mass Driver Kit"
+ desc = "A do-it-yourself kit for constructing the finest of mass drivers."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "inf_box"
+ item_state = "syringe_kit"
+
+/obj/item/weapon/mass_driver_diy/attack_self(mob/user)
+ user << "You start piecing together the kit... "
+ if(do_after(user, 80))
+ var/master_id = "[user.name] - [pick("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")][rand(100,999)]"
+ var/obj/machinery/mass_driver/mining/R = new /obj/machinery/mass_driver/mining(user.loc)
+ R.id = master_id
+ R.power = 2.0
+ var/obj/item/weapon/mass_driver_button/B = new /obj/item/weapon/mass_driver_button(user.loc)
+ B.id = master_id
+ user.visible_message("[user] assembles \a [R].\
+ ", "You assemble \a [R]. ")
+ R.add_fingerprint(user)
+ qdel(src)
+
+/obj/item/weapon/mass_driver_button
+ name = "mass driver button"
+ desc = "An unscrewed mass driver button."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "launcherbtt"
+ var/id
+
+/obj/item/weapon/mass_driver_button/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
+ if (!adjacent)
+ return
+
+ //must place on a wall and user must not be inside a closet/mecha/whatever
+ var/turf/W = A
+ if (!iswall(W) || !isturf(user.loc))
+ user << "You can't place this here! "
+ return
+
+ var/placement_dir = get_dir(user, W)
+ if (!(placement_dir in cardinal))
+ user << "You must stand directly in front of the wall you wish to place that on. "
+ return
+
+ //just check if there is a poster on or adjacent to the wall
+ var/stuff_on_wall = 0
+ if (locate(/obj/machinery/button) in W)
+ stuff_on_wall = 1
+
+ //crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
+ for (var/dir in cardinal)
+ var/turf/T = get_step(W, dir)
+ if (locate(/obj/machinery/button) in T)
+ stuff_on_wall = 1
+ break
+
+ if (stuff_on_wall)
+ user << "There is already a button there! "
+ return
+
+ user << "You place down the button. "
+ var/obj/machinery/button/mass_driver/B = new /obj/machinery/button/remote/driver(user.loc)
+
+ switch (placement_dir)
+ if (NORTH)
+ B.pixel_x = 0
+ B.pixel_y = 32
+ if (SOUTH)
+ B.pixel_x = 0
+ B.pixel_y = -32
+ if (EAST)
+ B.pixel_x = 32
+ B.pixel_y = 0
+ if (WEST)
+ B.pixel_x = -32
+ B.pixel_y = 0
+
+ B.id = id
+ B.use_power = 0
+ B.add_fingerprint(user)
+ qdel(src)
+
+/obj/machinery/mass_driver/mining
+ name = "mining mass driver"
+ desc = "Shoots things really hard really fast."
+ icon = 'icons/obj/stationobjs.dmi'
+ icon_state = "mass_driver"
+ anchored = 0
+ use_power = 0
\ No newline at end of file
diff --git a/code/game/machinery/megavend.dm b/code/game/machinery/megavend.dm
new file mode 100644
index 00000000000..688d1af7119
--- /dev/null
+++ b/code/game/machinery/megavend.dm
@@ -0,0 +1,240 @@
+
+/obj/machinery/megavendor
+ name = "\improper NanoTrasen Auto-Locker"
+ desc = "This amazing machine is used to deploy the official equipment for your current employment."
+ icon = 'icons/obj/Cryogenic2.dmi'
+ icon_state = "clothes_scanner_0"
+ var/base_icon_state = "clothes_scanner_0"
+ var/occupied_icon_state = "clothes_scanner_1"
+ layer = 2.9
+ anchored = 1
+ density = 1
+ use_power = 0
+ var/isvending = 0
+ var/selectedrank
+ var/last_reply = 0
+ var/last_slogan = 0 //When did we last pitch?
+ var/slogan_delay = 6000 //How long until we can pitch again?
+
+ // Stuff relating vocalizations
+ var/list/slogan_list = list("Don't deploy just yet! Grab your gear!","Forgetting something?","Don't hop on in your skivvies, mate!","It's not Casual Friday, y'know?","Heaven's above, put some clothes on!")
+ var/shut_up = 0 //Stop spouting those godawful pitches!
+ var/allow_occupant_types = list(/mob/living/carbon/human)
+ var/mob/occupant = null
+ var/on_enter_occupant_message = "The Auto-Locker's doors clang shut loudly, encasing you in darkness."
+
+/obj/machinery/megavendor/proc/check_occupant_allowed(mob/M)
+ var/correct_type = 0
+ for(var/type in allow_occupant_types)
+ if(istype(M, type))
+ correct_type = 1
+ break
+
+ if(!correct_type) return 0
+
+ return 1
+
+/obj/machinery/megavendor/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob)
+
+ if(istype(G, /obj/item/weapon/grab))
+
+ if(occupant)
+ user << "\The [src] is in use. "
+ return
+
+ if(!ismob(G:affecting))
+ return
+
+ if(!check_occupant_allowed(G:affecting))
+ return
+
+ var/mob/M = G:affecting
+
+ visible_message("[user] starts putting [G:affecting:name] into \the [name].", 3)
+
+ if(do_after(user, 20))
+ if(!M || !G || !G:affecting) return
+
+ M.forceMove(src)
+
+ if(M.client)
+ M.client.perspective = EYE_PERSPECTIVE
+ M.client.eye = src
+
+ icon_state = occupied_icon_state
+
+ M << "[on_enter_occupant_message] "
+ set_occupant(M)
+
+ src.add_fingerprint(M)
+
+/obj/machinery/megavendor/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob)
+ if(!istype(user))
+ return
+ if(!check_occupant_allowed(O))
+ return
+ if(occupant)
+ user << "\The [src] is in use. "
+ return
+ var/mob/living/L = O
+
+ if(L == user)
+ visible_message("[user] starts climbing into \the [name].", 3)
+ else
+ visible_message("[user] starts putting [L] into \the [name].", 3)
+
+ if(do_after(user, 20))
+ if(!L) return
+
+ L.loc = src
+
+ if(L.client)
+ L.client.perspective = EYE_PERSPECTIVE
+ L.client.eye = src
+ else
+ user << "You stop [L == user ? "climbing into" : "putting [L] into"] \the [name]. "
+ return
+
+ icon_state = occupied_icon_state
+
+ L << "[on_enter_occupant_message] "
+ occupant = L
+
+ src.add_fingerprint(L)
+
+ return
+
+/obj/machinery/megavendor/verb/eject()
+ set name = "Eject Auto-Locker"
+ set category = "Object"
+ set src in oview(1)
+ if(usr.stat != 0)
+ return
+
+ if(isvending)
+ return
+
+ src.go_out()
+ add_fingerprint(usr)
+ return
+
+/obj/machinery/megavendor/verb/move_inside()
+ set name = "Enter Auto-Locker"
+ set category = "Object"
+ set src in oview(1)
+
+ if(usr.stat != 0 || !check_occupant_allowed(usr))
+ return
+
+ if(src.occupant)
+ usr << "\The [src] is in use. "
+ return
+
+ visible_message("[usr] starts climbing into \the [src].", 3)
+
+ if(do_after(usr, 20))
+
+ if(!usr || !usr.client)
+ return
+
+ if(src.occupant)
+ usr << "\The [src] is in use. "
+ return
+
+ usr.stop_pulling()
+ usr.client.perspective = EYE_PERSPECTIVE
+ usr.client.eye = src
+ usr.forceMove(src)
+ set_occupant(usr)
+
+ icon_state = occupied_icon_state
+
+ usr << "[on_enter_occupant_message] "
+
+ src.add_fingerprint(usr)
+
+ return
+
+/obj/machinery/megavendor/proc/set_occupant(var/occupant)
+ src.occupant = occupant
+ name = initial(name)
+ if(occupant)
+ name = "[name] ([occupant])"
+
+/obj/machinery/megavendor/proc/go_out()
+
+ if(!occupant)
+ return
+
+ ping("The [src] disgorges its contents with a ping. ")
+ icon_state = base_icon_state
+
+ //Eject any items that aren't meant to be in the pod.
+ var/list/items = src.contents
+ if(occupant) items -= occupant
+
+ for(var/obj/item/W in items)
+ W.forceMove(get_turf(src))
+
+ if(occupant.client)
+ occupant.client.eye = src.occupant.client.mob
+ occupant.client.perspective = MOB_PERSPECTIVE
+
+ occupant.forceMove(get_turf(src))
+ set_occupant(null)
+
+ name = initial(name)
+ icon_state = base_icon_state
+ isvending = 0
+ return
+
+/obj/machinery/megavendor/process()
+ if(((src.last_slogan + src.slogan_delay) <= world.time) && (src.slogan_list.len > 0) && (!src.shut_up) && prob(5))
+ var/slogan = pick(src.slogan_list)
+ src.ping(slogan)
+ src.last_slogan = world.time
+ if(occupant && !isvending)
+ isvending = 1
+ INVOKE_ASYNC(src, .proc/megavend, occupant)
+
+/obj/machinery/megavendor/proc/megavend(var/mob/living/carbon/human/H)
+ if(H.megavend)
+ src.speak("Scan error: Subject has already used a NT Auto-Locker within the past twelve hours!")
+ src.go_out()
+ return
+ src.speak("Analyzing...")
+ sleep(40)
+ src.speak("Record match. Name: [H.real_name]. Current occupation: [H.job].")
+ src.visible_message("The [src] rumbles to life, and begins to whir loudly. ")
+ playsound(src.loc, 'sound/items/poster_being_created.ogg', 50, 1)
+
+ var/obj/item/weapon/storage/box/gearbox = new(src)
+ gearbox.name = "\improper Personal possessions box"
+ gearbox.desc = "All of the personal effects of [H.real_name], packaged neatly by the Auto-Locker."
+ var/list/items = H.contents
+ for(var/obj/item/W in items)
+ if(istype(W,/obj/item/organ))
+ items -= W
+ continue
+ H.drop_from_inventory(W,gearbox)
+ items -= W
+ gearbox.contents += W
+ if(items.len == 0)
+ break
+
+ sleep(20)
+ job_master.EquipRank(H, H.job, 1, 1)
+ sleep(20)
+ src.speak("Welcome aboard, [H.real_name]. Have a nice shift.")
+ H.megavend = 1
+ src.go_out()
+ return
+
+/obj/machinery/megavendor/proc/speak(var/message)
+ if (!message)
+ return
+
+ ping("\The [src] beeps, \"[message]\" ")
+ if(occupant)
+ occupant << "\The [src] beeps, \"[message]\" "
+ return
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index 443a7049341..8183b0e95a3 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -23,8 +23,8 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
req_access = list(access_engine)
- New()
- ..()
+ Initialize()
+ . = ..()
set_codes()
@@ -33,14 +33,10 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
// add beacon to MULE bot beacon list
if(freq == 1400)
- if(!navbeacons)
- navbeacons = new()
- navbeacons += src
-
-
- spawn(5) // must wait for map loading to finish
- if(radio_controller)
- radio_controller.add_object(src, freq, RADIO_NAVBEACONS)
+ LAZYADD(navbeacons, src)
+
+ if(SSradio)
+ SSradio.add_object(src, freq, RADIO_NAVBEACONS)
// set the transponder codes assoc list from codes_txt
proc/set_codes()
@@ -87,14 +83,13 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
var/request = signal.data["findbeacon"]
if(request && ((request in codes) || request == "any" || request == location))
- spawn(1)
- post_signal()
+ addtimer(CALLBACK(src, .proc/post_signal), 1)
// return a signal giving location and transponder codes
proc/post_signal()
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(freq)
if(!frequency) return
@@ -252,6 +247,6 @@ Transponder Codes:"}
/obj/machinery/navbeacon/Destroy()
navbeacons.Remove(src)
- if(radio_controller)
- radio_controller.remove_object(src, freq)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, freq)
+ return ..()
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 88af4fb76ca..c761b2a4e0f 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -95,6 +95,8 @@
alert_readers(FC.announcement)
/datum/feed_network/proc/alert_readers(var/annoncement)
+ // get_receptions sleeps further down the line, spawn of elsewhere
+ set waitfor = FALSE
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
NEWSCASTER.newsAlert(annoncement)
NEWSCASTER.update_icon()
@@ -106,15 +108,14 @@
if (P.toff)
continue
receiving_pdas += P
+
+ var/datum/receptions/receptions = get_receptions(null, receiving_pdas) // datums are not atoms, thus we have to assume the newscast network always has reception
- spawn(0) // get_receptions sleeps further down the line, spawn of elsewhere
- var/datum/receptions/receptions = get_receptions(null, receiving_pdas) // datums are not atoms, thus we have to assume the newscast network always has reception
+ for(var/obj/item/device/pda/PDA in receiving_pdas)
+ if(!(receptions.receiver_reception[PDA] & TELECOMMS_RECEPTION_RECEIVER))
+ continue
- for(var/obj/item/device/pda/PDA in receiving_pdas)
- if(!(receptions.receiver_reception[PDA] & TELECOMMS_RECEPTION_RECEIVER))
- continue
-
- PDA.new_news(annoncement)
+ PDA.new_news(annoncement)
var/datum/feed_network/news_network = new /datum/feed_network //The global news-network, which is coincidentally a global list.
@@ -172,37 +173,36 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
name = "Security Newscaster"
securityCaster = 1
-/obj/machinery/newscaster/New() //Constructor, ho~
+/obj/machinery/newscaster/Initialize() //Constructor, ho~
+ . = ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
allCasters += src
src.paper_remaining = 15 // Will probably change this to something better
- for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number
- src.unit_no++
+ src.unit_no = allCasters.len + 1
src.update_icon() //for any custom ones on the map...
- ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
/obj/machinery/newscaster/Destroy()
allCasters -= src
- ..()
+ return ..()
/obj/machinery/newscaster/update_icon()
if(!ispowered || isbroken)
icon_state = "newscaster_off"
if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
- src.overlays.Cut()
- src.overlays += image(src.icon, "crack3")
+ cut_overlays()
+ add_overlay("crack3")
return
- src.overlays.Cut() //reset overlays
+ cut_overlays() //reset overlays
if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
icon_state = "newscaster_wanted"
return
if(alert) //new message alert overlay
- src.overlays += "newscaster_alert"
+ add_overlay("newscaster_alert")
if(hitstaken > 0) //Cosmetic damage overlay
- src.overlays += image(src.icon, "crack[hitstaken]")
+ add_overlay("crack[hitstaken]")
icon_state = "newscaster_normal"
return
@@ -215,10 +215,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.ispowered = 1
src.update_icon()
else
- spawn(rand(0, 15))
- src.ispowered = 0
- src.update_icon()
+ addtimer(CALLBACK(src, .proc/post_power_loss), rand(0, 15))
+/obj/machinery/newscaster/proc/post_power_loss()
+ ispowered = 0
+ update_icon()
/obj/machinery/newscaster/ex_act(severity)
switch(severity)
@@ -313,11 +314,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(6)
dat+="ERROR: Could not submit Feed story to Network. "
if(src.channel_name=="")
- dat+="•Invalid receiving channel name. "
+ dat+="�Invalid receiving channel name. "
if(src.scanned_user=="Unknown")
- dat+="•Channel author unverified. "
+ dat+="�Channel author unverified. "
if(src.msg == "" || src.msg == "\[REDACTED\]")
- dat+="•Invalid message body. "
+ dat+="�Invalid message body. "
dat+="Return "
if(7)
@@ -329,18 +330,18 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else
existing_authors += FC.author
if(src.scanned_user in existing_authors)
- dat+="•There already exists a Feed channel under your name. "
+ dat+="�There already exists a Feed channel under your name. "
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
- dat+="•Invalid channel name. "
+ dat+="�Invalid channel name. "
var/check = 0
for(var/datum/feed_channel/FC in news_network.network_channels)
if(FC.channel_name == src.channel_name)
check = 1
break
if(check)
- dat+="•Channel name already in use. "
+ dat+="�Channel name already in use. "
if(src.scanned_user=="Unknown")
- dat+="•Channel author unverified. "
+ dat+="�Channel author unverified. "
dat+="Return "
if(8)
var/total_num=length(news_network.network_channels)
@@ -454,11 +455,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(16)
dat+="ERROR: Wanted Issue rejected by Network. "
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
- dat+="•Invalid name for person wanted. "
+ dat+="�Invalid name for person wanted. "
if(src.scanned_user=="Unknown")
- dat+="•Issue author unverified. "
+ dat+="�Issue author unverified. "
if(src.msg == "" || src.msg == "\[REDACTED\]")
- dat+="•Invalid description. "
+ dat+="�Invalid description. "
dat+="Return "
if(17)
dat+="Wanted Issue successfully deleted from Circulation "
@@ -828,7 +829,7 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
switch(screen)
if(0) //Cover
dat+="The Griffon
"
- dat+="[company_name]-standard newspaper, for use on [company_name]© Space Facilities
"
+ dat+="[company_name]-standard newspaper, for use on [company_name]� Space Facilities
"
if(isemptylist(src.news_content))
if(src.important_message)
dat+="Contents:** Important Security Announcement** \[page [src.pages+2]\] "
@@ -996,12 +997,14 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
O.show_message("[src.name] beeps, \"[news_call]\" ",2)
src.alert = 1
src.update_icon()
- spawn(300)
- src.alert = 0
- src.update_icon()
+ addtimer(CALLBACK(src, .proc/clearAlert), 300)
playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1)
else
for(var/mob/O in hearers(world.view-1, T))
O.show_message("[src.name] beeps, \"Attention! Wanted issue distributed!\" ",2)
playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 75, 1)
return
+
+/obj/machinery/newscaster/proc/clearAlert()
+ src.alert = 0
+ src.update_icon()
diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm
index 55a7f5adfa0..b44a820cb67 100644
--- a/code/game/machinery/nuclear_bomb.dm
+++ b/code/game/machinery/nuclear_bomb.dm
@@ -24,8 +24,8 @@ var/bomb_set
var/previous_level = ""
var/datum/wires/nuclearbomb/wires = null
-/obj/machinery/nuclearbomb/New()
- ..()
+/obj/machinery/nuclearbomb/Initialize()
+ . = ..()
r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn.
wires = new/datum/wires/nuclearbomb(src)
@@ -49,12 +49,12 @@ var/bomb_set
if (src.auth)
if (panel_open == 0)
panel_open = 1
- overlays |= "panel_open"
+ add_overlay("panel_open")
user << "You unscrew the control panel of [src]."
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
else
panel_open = 0
- overlays -= "panel_open"
+ cut_overlay("panel_open")
user << "You screw the control panel of [src] back on."
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
else
@@ -62,7 +62,7 @@ var/bomb_set
user << "\The [src] emits a buzzing noise, the panel staying locked in."
if (panel_open == 1)
panel_open = 0
- overlays -= "panel_open"
+ cut_overlay("panel_open")
user << "You screw the control panel of \the [src] back on."
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
flick("lock", src)
@@ -345,8 +345,8 @@ var/bomb_set
src.safety = 1
update_icon()
playsound(src,'sound/machines/Alarm.ogg',100,0,5)
- if (ticker && ticker.mode)
- ticker.mode.explosion_in_progress = 1
+ if (SSticker.mode)
+ SSticker.mode.explosion_in_progress = 1
sleep(100)
var/off_station = 0
@@ -357,29 +357,27 @@ var/bomb_set
else
off_station = 2
- if(ticker)
- if(ticker.mode && ticker.mode.name == "Mercenary")
- var/obj/machinery/computer/shuttle_control/multi/syndicate/syndie_location = locate(/obj/machinery/computer/shuttle_control/multi/syndicate)
- if(syndie_location)
- ticker.mode:syndies_didnt_escape = (syndie_location.z > 1 ? 0 : 1) //muskets will make me change this, but it will do for now
- ticker.mode:nuke_off_station = off_station
- ticker.station_explosion_cinematic(off_station,null)
- if(ticker.mode)
- ticker.mode.explosion_in_progress = 0
- if(off_station == 1)
- world << "A nuclear device was set off, but the explosion was out of reach of the station! "
- else if(off_station == 2)
- world << "A nuclear device was set off, but the device was not on the station! "
- else
- world << "The station was destoyed by the nuclear blast! "
+ if(SSticker.mode && SSticker.mode.name == "Mercenary")
+ var/obj/machinery/computer/shuttle_control/multi/syndicate/syndie_location = locate(/obj/machinery/computer/shuttle_control/multi/syndicate)
+ if(syndie_location)
+ SSticker.mode:syndies_didnt_escape = (syndie_location.z > 1 ? 0 : 1) //muskets will make me change this, but it will do for now
+ SSticker.mode:nuke_off_station = off_station
+ SSticker.station_explosion_cinematic(off_station,null)
+ if(SSticker.mode)
+ SSticker.mode.explosion_in_progress = 0
+ if(off_station == 1)
+ world << "A nuclear device was set off, but the explosion was out of reach of the station! "
+ else if(off_station == 2)
+ world << "A nuclear device was set off, but the device was not on the station! "
+ else
+ world << "The station was destoyed by the nuclear blast! "
- ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
- //kinda shit but I couldn't get permission to do what I wanted to do.
+ SSticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
+ //kinda shit but I couldn't get permission to do what I wanted to do.
- if(!ticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
- universe_has_ended = 1
- return
- return
+ if(!SSticker.mode.check_finished())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
+ universe_has_ended = 1
+ return
/obj/machinery/nuclearbomb/update_icon()
if(lighthack)
@@ -402,8 +400,8 @@ var/bomb_set
item_state = "card-id"
w_class = 1.0
-/obj/item/weapon/disk/nuclear/New()
- ..()
+/obj/item/weapon/disk/nuclear/Initialize()
+ . = ..()
nuke_disks |= src
/obj/item/weapon/disk/nuclear/Destroy()
@@ -431,9 +429,12 @@ var/bomb_set
var/list/flash_tiles = list()
var/last_turf_state
-/obj/machinery/nuclearbomb/station/initialize()
+/obj/machinery/nuclearbomb/station/Initialize(mapload)
..()
verbs -= /obj/machinery/nuclearbomb/verb/toggle_deployable
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/nuclearbomb/station/LateInitialize()
for(var/turf/simulated/floor/T in trange(1, src))
T.set_flooring(get_flooring_data(/decl/flooring/reinforced/circuit/red))
flash_tiles += T
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index aed573d3387..8af7f26a6f8 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -75,8 +75,8 @@
lethal = 1
installation = /obj/item/weapon/gun/energy/laser
-/obj/machinery/porta_turret/New()
- ..()
+/obj/machinery/porta_turret/Initialize()
+ . = ..()
req_access.Cut()
req_one_access = list(access_security, access_heads)
@@ -85,8 +85,8 @@
setup()
-/obj/machinery/porta_turret/crescent/New()
- ..()
+/obj/machinery/porta_turret/crescent/Initialize()
+ . = ..()
req_one_access.Cut()
req_access = list(access_cent_specops)
@@ -542,7 +542,7 @@ var/list/turret_icons
set_raised_raising(raised, 1)
update_icon()
- var/atom/flick_holder = getFromPool(/atom/movable/porta_turret_cover, loc)
+ var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc)
flick_holder.layer = layer + 0.1
flick("popup", flick_holder)
sleep(10)
@@ -562,7 +562,7 @@ var/list/turret_icons
set_raised_raising(raised, 1)
update_icon()
- var/atom/flick_holder = getFromPool(/atom/movable/porta_turret_cover, loc)
+ var/atom/flick_holder = new /atom/movable/porta_turret_cover(loc)
flick_holder.layer = layer + 0.1
flick("popdown", flick_holder)
sleep(10)
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 14bc2418126..51d45ec8e14 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -21,8 +21,8 @@
var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder
var/wire_power_use = 500 // power used per point of burn damage repaired.
-/obj/machinery/recharge_station/New()
- ..()
+/obj/machinery/recharge_station/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/recharge_station(src)
@@ -171,20 +171,20 @@
desc += " It is capable of repairing burn damage."
/obj/machinery/recharge_station/proc/build_overlays()
- overlays.Cut()
+ cut_overlays()
switch(round(chargepercentage()))
if(1 to 20)
- overlays += image('icons/obj/objects.dmi', "statn_c0")
+ add_overlay("statn_c0")
if(21 to 40)
- overlays += image('icons/obj/objects.dmi', "statn_c20")
+ add_overlay("statn_c20")
if(41 to 60)
- overlays += image('icons/obj/objects.dmi', "statn_c40")
+ add_overlay("statn_c40")
if(61 to 80)
- overlays += image('icons/obj/objects.dmi', "statn_c60")
+ add_overlay("statn_c60")
if(81 to 98)
- overlays += image('icons/obj/objects.dmi', "statn_c80")
+ add_overlay("statn_c80")
if(99 to 110)
- overlays += image('icons/obj/objects.dmi', "statn_c100")
+ add_overlay("statn_c100")
/obj/machinery/recharge_station/update_icon()
..()
@@ -278,4 +278,4 @@
else
user << span("danger","Cancelled loading [C] into the charger. You and [C] must stay still!")
return
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index e6a3323af38..a65e8faf20f 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -51,7 +51,10 @@ var/list/obj/machinery/requests_console/allConsoles = list()
var/message = "";
var/recipient = ""; //the department which will be receiving the message
var/priority = -1 ; //Priority of the message being sent
- light_range = 0
+
+ light_color = LIGHT_COLOR_RED
+ light_power = 0.25 // It's a tiny light, it ain't going to be bright.
+
//Form intregration
var/SQLquery
var/paperstock = 10
@@ -71,9 +74,13 @@ var/list/obj/machinery/requests_console/allConsoles = list()
else
if(icon_state == "req_comp_off")
icon_state = "req_comp[newmessagepriority]"
+ if (newmessagepriority)
+ set_light(2)
+ else
+ set_light(0)
-/obj/machinery/requests_console/New()
- ..()
+/obj/machinery/requests_console/Initialize()
+ . = ..()
announcement.title = "[department] announcement"
announcement.newscast = 1
@@ -87,8 +94,6 @@ var/list/obj/machinery/requests_console/allConsoles = list()
if (departmentType & RC_INFO)
req_console_information |= department
- set_light(1)
-
/obj/machinery/requests_console/Destroy()
allConsoles -= src
var/lastDeptRC = 1
@@ -103,7 +108,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
req_console_supplies -= department
if (departmentType & RC_INFO)
req_console_information -= department
- ..()
+ return ..()
/obj/machinery/requests_console/attack_hand(user as mob)
if(..(user))
@@ -220,7 +225,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
if (Console.department == department)
Console.newmessagepriority = 0
Console.icon_state = "req_comp0"
- Console.set_light(1)
+ Console.set_light(0)
if(tempScreen == RCS_MAINMENU)
reset_message()
screen = tempScreen
diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm
index e9a2081fb2d..b94338bf5fe 100644
--- a/code/game/machinery/seed_extractor.dm
+++ b/code/game/machinery/seed_extractor.dm
@@ -16,10 +16,10 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
var/datum/seed/new_seed_type
if(istype(O, /obj/item/weapon/grown))
var/obj/item/weapon/grown/F = O
- new_seed_type = plant_controller.seeds[F.plantname]
+ new_seed_type = SSplants.seeds[F.plantname]
else
var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O
- new_seed_type = plant_controller.seeds[F.plantname]
+ new_seed_type = SSplants.seeds[F.plantname]
if(new_seed_type)
user << "You extract some seeds from [O]. "
@@ -40,4 +40,4 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
user << "You extract some seeds from the grass tile. "
new /obj/item/seeds/grassseed(loc)
- return
\ No newline at end of file
+ return
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index ad88ce7feae..8f1008418a5 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -11,16 +11,16 @@
var/heating_power = 40000
-/obj/machinery/space_heater/New()
- ..()
+/obj/machinery/space_heater/Initialize()
+ . = ..()
cell = new(src)
update_icon()
/obj/machinery/space_heater/update_icon()
- overlays.Cut()
+ cut_overlays()
icon_state = "sheater[on]"
if(panel_open)
- overlays += "sheater-open"
+ add_overlay("sheater-open")
/obj/machinery/space_heater/examine(mob/user)
..(user)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index dd862a77543..2ca4c9eabb3 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -17,6 +17,7 @@
density = 0
use_power = 1
idle_power_usage = 10
+ var/hears_arrivals = FALSE
var/mode = 1 // 0 = Blank
// 1 = Shuttle timer
// 2 = Arbitrary message(s)
@@ -28,7 +29,6 @@
var/message2 = "" // message line 2
var/index1 // display index for scrolling messages or 0 if non-scrolling
var/index2
- var/picture = null
var/frequency = 1435 // radio frequency
@@ -47,15 +47,18 @@
var/const/STATUS_DISPLAY_CUSTOM = 99
/obj/machinery/status_display/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src,frequency)
+ if(SSradio)
+ SSradio.remove_object(src,frequency)
return ..()
// register for radio system
-/obj/machinery/status_display/initialize()
- ..()
- if(radio_controller)
- radio_controller.add_object(src, frequency)
+/obj/machinery/status_display/Initialize()
+ . = ..()
+ if(SSradio)
+ if (hears_arrivals)
+ SSradio.add_object(src, frequency, RADIO_ARRIVALS)
+ else
+ SSradio.add_object(src, frequency)
// timed process
/obj/machinery/status_display/process()
@@ -153,10 +156,8 @@
/obj/machinery/status_display/proc/set_picture(state)
remove_display()
- if(!picture || picture_state != state)
- picture_state = state
- picture = image('icons/obj/status_display.dmi', icon_state=picture_state)
- overlays |= picture
+ picture_state = state
+ add_overlay(picture_state)
/obj/machinery/status_display/proc/update_display(line1, line2)
var/new_text = {"[line1] [line2]
"}
@@ -176,7 +177,7 @@
return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
/obj/machinery/status_display/proc/get_supply_shuttle_timer()
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
if (!shuttle)
return "Error"
@@ -187,9 +188,33 @@
return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
return ""
+/obj/machinery/status_display/proc/get_arrivals_shuttle_timer()
+ var/datum/shuttle/ferry/arrival/shuttle = SSarrivals.shuttle
+ if (!shuttle)
+ return "Error"
+
+ if(shuttle.has_arrive_time())
+ var/timeleft = round((shuttle.arrive_time - world.time) / 10,1)
+ if(timeleft < 0)
+ return ""
+ return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
+ return ""
+
+/obj/machinery/status_display/proc/get_arrivals_shuttle_timer2()
+ if (!SSarrivals)
+ return "Error"
+
+ if(SSarrivals.launch_time)
+ var/timeleft = round((SSarrivals.launch_time - world.time) / 10,1)
+ if(timeleft < 0)
+ return ""
+ return "[add_zero(num2text((timeleft / 60) % 60),2)]:[add_zero(num2text(timeleft % 60), 2)]"
+ else
+ return "Launch"
+ return ""
+
/obj/machinery/status_display/proc/remove_display()
- if(overlays.len)
- overlays.Cut()
+ cut_overlays()
if(maptext)
maptext = ""
@@ -217,4 +242,4 @@
#undef FOND_SIZE
#undef FONT_COLOR
#undef FONT_STYLE
-#undef SCROLL_SPEED
\ No newline at end of file
+#undef SCROLL_SPEED
diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm
index b8730e326ad..d3a1ba88a11 100644
--- a/code/game/machinery/status_display_ai.dm
+++ b/code/game/machinery/status_display_ai.dm
@@ -78,7 +78,7 @@ var/list/ai_status_emotions = list(
/obj/machinery/ai_status_display/proc/update()
switch (mode)
if (0) // Blank
- overlays.Cut()
+ cut_overlays()
if (1) // AI emoticon
var/datum/ai_emotion/ai_emotion = ai_status_emotions[emotion]
@@ -89,14 +89,12 @@ var/list/ai_status_emotions = list(
/obj/machinery/ai_status_display/proc/set_picture(var/state)
picture_state = state
- if(overlays.len)
- overlays.Cut()
- overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
+ cut_overlays()
+ add_overlay(picture_state)
/obj/machinery/ai_status_display/power_change()
..()
if(stat & NOPOWER)
- if(overlays.len)
- overlays.Cut()
+ cut_overlays()
else
update()
diff --git a/code/game/machinery/status_display_snowflakes.dm b/code/game/machinery/status_display_snowflakes.dm
new file mode 100644
index 00000000000..3f1cf07eec8
--- /dev/null
+++ b/code/game/machinery/status_display_snowflakes.dm
@@ -0,0 +1,70 @@
+/obj/machinery/status_display/supply_display
+ ignore_friendc = 1
+
+/obj/machinery/status_display/supply_display/update()
+ if(!..() && mode == STATUS_DISPLAY_CUSTOM)
+ message1 = "CARGO"
+ message2 = ""
+
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
+ if (!shuttle)
+ message2 = "Error"
+ else if(shuttle.has_arrive_time())
+ message2 = get_supply_shuttle_timer()
+ if(lentext(message2) > CHARS_PER_LINE)
+ message2 = "Error"
+ else if (shuttle.is_launching())
+ if (shuttle.at_station())
+ message2 = "Launch"
+ else
+ message2 = "ETA"
+ else
+ if(shuttle.at_station())
+ message2 = "Docked"
+ else
+ message1 = ""
+ update_display(message1, message2)
+ return 1
+ return 0
+
+/obj/machinery/status_display/supply_display/receive_signal(datum/signal/signal)
+ if(signal.data["command"] == "supply")
+ mode = STATUS_DISPLAY_CUSTOM
+ else
+ ..(signal)
+
+/obj/machinery/status_display/arrivals_display
+ ignore_friendc = 1
+ hears_arrivals = TRUE
+
+/obj/machinery/status_display/arrivals_display/update()
+ if(!..() && mode == STATUS_DISPLAY_CUSTOM)
+ message1 = "ARVLS"
+ message2 = ""
+
+ var/datum/shuttle/ferry/arrival/shuttle = SSarrivals.shuttle
+ if (!shuttle)
+ message2 = "Error"
+ else if(shuttle.has_arrive_time())
+ message2 = get_arrivals_shuttle_timer()
+ if(lentext(message2) > CHARS_PER_LINE)
+ message2 = "Error"
+ else if (shuttle.is_launching())
+ if (shuttle.at_station())
+ message2 = "Retrn"
+ else
+ message2 = "ETA"
+ else
+ if(shuttle.at_station())
+ message2 = "Docked"
+ else
+ message2 = get_arrivals_shuttle_timer2()
+ update_display(message1, message2)
+ return 1
+ return 0
+
+/obj/machinery/status_display/arrivals_display/receive_signal(datum/signal/signal)
+ if(signal.data["command"] == "arrivals")
+ mode = STATUS_DISPLAY_CUSTOM
+ else
+ ..(signal)
diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm
deleted file mode 100644
index 97e747c0dba..00000000000
--- a/code/game/machinery/supply_display.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/obj/machinery/status_display/supply_display
- ignore_friendc = 1
-
-/obj/machinery/status_display/supply_display/update()
- if(!..() && mode == STATUS_DISPLAY_CUSTOM)
- message1 = "CARGO"
- message2 = ""
-
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
- if (!shuttle)
- message2 = "Error"
- else if(shuttle.has_arrive_time())
- message2 = get_supply_shuttle_timer()
- if(lentext(message2) > CHARS_PER_LINE)
- message2 = "Error"
- else if (shuttle.is_launching())
- if (shuttle.at_station())
- message2 = "Launch"
- else
- message2 = "ETA"
- else
- if(shuttle.at_station())
- message2 = "Docked"
- else
- message1 = ""
- update_display(message1, message2)
- return 1
- return 0
-
-/obj/machinery/status_display/supply_display/receive_signal/(datum/signal/signal)
- if(signal.data["command"] == "supply")
- mode = STATUS_DISPLAY_CUSTOM
- else
- ..(signal)
diff --git a/code/game/machinery/supplybeacon.dm b/code/game/machinery/supplybeacon.dm
index 041507153ae..8764ffcbd03 100644
--- a/code/game/machinery/supplybeacon.dm
+++ b/code/game/machinery/supplybeacon.dm
@@ -97,7 +97,7 @@
/obj/machinery/power/supply_beacon/Destroy()
if(use_power)
deactivate()
- ..()
+ return ..()
/obj/machinery/power/supply_beacon/process()
if(expended)
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index be5b402ee1d..cb11b1d4770 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -152,7 +152,7 @@
/obj/machinery/power/singularity_beacon/Destroy()
if(active)
Deactivate()
- ..()
+ return ..()
//stealth direct power usage
/obj/machinery/power/singularity_beacon/process()
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index 1d1f3e56d1a..1b46e51e587 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -101,7 +101,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
// In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore.
if(message_delay)
message_delay = 0
- ..()
+ return ..()
/*
@@ -255,7 +255,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
else if(data == 3)
for(var/antag_freq in ANTAG_FREQS)
- var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(antag_freq)
+ var/datum/radio_frequency/antag_connection = SSradio.return_frequency(antag_freq)
for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"])
if(R.receive_range(antag_freq, level) > -1)
radios += R
@@ -360,30 +360,30 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
//var/blackbox_admin_msg = "[part_a][M.name] (Real name: [M.real_name])[part_blackbox_b][quotedmsg][part_c]"
//BR.messages_admin += blackbox_admin_msg
- if(istype(blackbox))
+ if(istype(SSfeedback))
switch(display_freq)
if(PUB_FREQ)
- blackbox.msg_common += blackbox_msg
+ SSfeedback.msg_common += blackbox_msg
if(SCI_FREQ)
- blackbox.msg_science += blackbox_msg
+ SSfeedback.msg_science += blackbox_msg
if(COMM_FREQ)
- blackbox.msg_command += blackbox_msg
+ SSfeedback.msg_command += blackbox_msg
if(MED_FREQ)
- blackbox.msg_medical += blackbox_msg
+ SSfeedback.msg_medical += blackbox_msg
if(ENG_FREQ)
- blackbox.msg_engineering += blackbox_msg
+ SSfeedback.msg_engineering += blackbox_msg
if(SEC_FREQ)
- blackbox.msg_security += blackbox_msg
+ SSfeedback.msg_security += blackbox_msg
if(DTH_FREQ)
- blackbox.msg_deathsquad += blackbox_msg
+ SSfeedback.msg_deathsquad += blackbox_msg
if(SYND_FREQ)
- blackbox.msg_syndicate += blackbox_msg
+ SSfeedback.msg_syndicate += blackbox_msg
if(SUP_FREQ)
- blackbox.msg_cargo += blackbox_msg
+ SSfeedback.msg_cargo += blackbox_msg
if(SRV_FREQ)
- blackbox.msg_service += blackbox_msg
+ SSfeedback.msg_service += blackbox_msg
else
- blackbox.messages += blackbox_msg
+ SSfeedback.messages += blackbox_msg
//End of research and feedback code.
@@ -432,7 +432,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
var/mob/living/carbon/human/H = new
M = H
- var/datum/radio_frequency/connection = radio_controller.return_frequency(frequency)
+ var/datum/radio_frequency/connection = SSradio.return_frequency(frequency)
var/display_freq = connection.frequency
@@ -464,7 +464,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
else if(data == 3)
for(var/freq in ANTAG_FREQS)
- var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(freq)
+ var/datum/radio_frequency/antag_connection = SSradio.return_frequency(freq)
for (var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"])
var/turf/position = get_turf(R)
if(position && position.z == level)
@@ -535,7 +535,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
part_b_extra = " (Intercepted) "
// Create a radio headset for the sole purpose of using its icon
- var/obj/item/device/radio/headset/radio = new
+ var/static/obj/item/device/radio/headset/radio = new
var/part_b = " \icon[radio]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE
var/part_blackbox_b = " \[[freq_text]\] " // Tweaked for security headsets -- TLE
@@ -547,27 +547,27 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
if(istype(blackbox))
switch(display_freq)
if(PUB_FREQ)
- blackbox.msg_common += blackbox_msg
+ SSfeedback.msg_common += blackbox_msg
if(SCI_FREQ)
- blackbox.msg_science += blackbox_msg
+ SSfeedback.msg_science += blackbox_msg
if(COMM_FREQ)
- blackbox.msg_command += blackbox_msg
+ SSfeedback.msg_command += blackbox_msg
if(MED_FREQ)
- blackbox.msg_medical += blackbox_msg
+ SSfeedback.msg_medical += blackbox_msg
if(ENG_FREQ)
- blackbox.msg_engineering += blackbox_msg
+ SSfeedback.msg_engineering += blackbox_msg
if(SEC_FREQ)
- blackbox.msg_security += blackbox_msg
+ SSfeedback.msg_security += blackbox_msg
if(DTH_FREQ)
- blackbox.msg_deathsquad += blackbox_msg
+ SSfeedback.msg_deathsquad += blackbox_msg
if(SYND_FREQ)
- blackbox.msg_syndicate += blackbox_msg
+ SSfeedback.msg_syndicate += blackbox_msg
if(SUP_FREQ)
- blackbox.msg_cargo += blackbox_msg
+ SSfeedback.msg_cargo += blackbox_msg
if(SRV_FREQ)
- blackbox.msg_service += blackbox_msg
+ SSfeedback.msg_service += blackbox_msg
else
- blackbox.messages += blackbox_msg
+ SSfeedback.messages += blackbox_msg
//End of research and feedback code.
@@ -639,3 +639,31 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
return signal
+/proc/telecomms_process_active()
+
+ // First, we want to generate a new radio signal
+ var/datum/signal/signal = new
+ signal.transmission_method = 2 // 2 would be a subspace transmission.
+
+ // --- Finally, tag the actual signal with the appropriate values ---
+ signal.data = list(
+ "slow" = 0, // how much to sleep() before broadcasting - simulates net lag
+ "message" = "TEST",
+ "compression" = rand(45, 50), // If the signal is compressed, compress our message too.
+ "traffic" = 0, // dictates the total traffic sum that the signal went through
+ "type" = 4, // determines what type of radio input it is: test broadcast
+ "reject" = 0,
+ "done" = 0,
+ "level" = 5 // The level it is being broadcasted at.
+ )
+ signal.frequency = PUB_FREQ// Common channel
+
+ //#### Sending the signal to all subspace receivers ####//
+ for(var/obj/machinery/telecomms/receiver/R in telecomms_list)
+ R.receive_signal(signal)
+
+ //world<< "Done: [signal.data["done"]]"
+
+ return signal
+
+
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 7bd00aba222..7a9597d3f6a 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -7,9 +7,6 @@
*/
-#define STATION_Z 1
-#define TELECOMM_Z 3
-
/obj/machinery/telecomms
var/temp = "" // output message
var/construct_op = 0
@@ -102,7 +99,7 @@
var/obj/machinery/constructable_frame/machine_frame/F = new
F.loc = src.loc
qdel(src)
-
+
update_icon()
/obj/machinery/telecomms/attack_ai(var/mob/user as mob)
@@ -176,26 +173,6 @@
user << browse(dat, "window=tcommachine;size=520x500;can_resize=0")
onclose(user, "dormitory")
-
-// Off-Site Relays
-//
-// You are able to send/receive signals from the station's z level (changeable in the STATION_Z #define) if
-// the relay is on the telecomm satellite (changable in the TELECOMM_Z #define)
-
-
-/obj/machinery/telecomms/relay/proc/toggle_level()
-
- var/turf/position = get_turf(src)
-
- // Toggle on/off getting signals from the station or the current Z level
- if(src.listening_level == STATION_Z) // equals the station
- src.listening_level = position.z
- return 1
- else if(position.z == TELECOMM_Z)
- src.listening_level = STATION_Z
- return 1
- return 0
-
// Returns a multitool from a user depending on their mobtype.
/obj/machinery/telecomms/proc/get_multitool(mob/user as mob)
@@ -241,8 +218,6 @@
/obj/machinery/telecomms/relay/Options_Menu()
var/dat = ""
- if(src.z == TELECOMM_Z)
- dat += " Signal Locked to Station: [listening_level == STATION_Z ? "TRUE" : "FALSE"] "
dat += " Broadcasting: [broadcasting ? "YES" : "NO"] "
dat += " Receiving: [receiving ? "YES" : "NO"] "
return dat
@@ -255,15 +230,6 @@
if(href_list["broadcast"])
broadcasting = !broadcasting
temp = "-% Broadcasting mode changed. %- "
- if(href_list["change_listening"])
- //Lock to the station OR lock to the current position!
- //You need at least two receivers and two broadcasters for this to work, this includes the machine.
- var/result = toggle_level()
- if(result)
- temp = "-% [src]'s signal has been successfully changed. "
- else
- temp = "-% [src] could not lock it's signal onto the station. Two broadcasters or receivers required. "
-
// BUS
/obj/machinery/telecomms/bus/Options_Menu()
@@ -403,6 +369,3 @@
if(issilicon(user) || in_range(user, src))
return 1
return 0
-
-#undef TELECOMM_Z
-#undef STATION_Z
diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm
index dae80c94073..5e17900e9ff 100644
--- a/code/game/machinery/telecomms/presets.dm
+++ b/code/game/machinery/telecomms/presets.dm
@@ -7,7 +7,6 @@
/obj/machinery/telecomms/relay/preset/station
id = "Station Relay"
- listening_level = 1
autolinkers = list("s_relay")
/obj/machinery/telecomms/relay/preset/telecomms
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index 77a8e2a2bb8..79e975dd737 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -36,7 +36,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub)
var/circuitboard = null // string pointing to a circuitboard type
var/hide = 0 // Is it a hidden machine?
- var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to.
+ var/list/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to.
/obj/machinery/telecomms/proc/relay_information(datum/signal/signal, filter, copysig, amount = 20)
@@ -64,7 +64,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
continue
if(amount && send_count >= amount)
break
- if(machine.loc.z != listening_level)
+ if(!machine.loc.z in listening_level)
if(long_range_link == 0 && machine.long_range_link == 0)
continue
// If we're sending a copy, be sure to create the copy for EACH machine and paste the data
@@ -113,18 +113,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
else
return 0
-
/obj/machinery/telecomms/New()
telecomms_list += src
..()
- //Set the listening_level if there's none.
- if(!listening_level)
- //Defaults to our Z level!
- var/turf/position = get_turf(src)
- listening_level = position.z
+/obj/machinery/telecomms/Initialize()
+ . = ..()
-/obj/machinery/telecomms/initialize()
if(autolinkers.len)
// Links nearby machines
if(!long_range_link)
@@ -133,13 +128,21 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
else
for(var/obj/machinery/telecomms/T in telecomms_list)
add_link(T)
+ if(!listening_level)
+ listening_level = list(z)
+ var/turf/above = GetAbove(src)
+ var/turf/below = GetBelow(src)
+ if(above)
+ listening_level += above.z
+ if(below)
+ listening_level += below.z
/obj/machinery/telecomms/Destroy()
telecomms_list -= src
for(var/obj/machinery/telecomms/comm in telecomms_list)
comm.links -= src
links = list()
- ..()
+ return ..()
// Used in auto linking
/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T)
@@ -502,8 +505,8 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
var/language = "human"
var/obj/item/device/radio/headset/server_radio = null
-/obj/machinery/telecomms/server/New()
- ..()
+/obj/machinery/telecomms/server/Initialize()
+ . = ..()
Compiler = new()
Compiler.Holder = src
server_radio = new()
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index e83fba6d060..40624bb33fc 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -16,8 +16,8 @@
underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires")
return
-/obj/machinery/computer/teleporter/initialize()
- ..()
+/obj/machinery/computer/teleporter/Initialize()
+ . = ..()
var/obj/machinery/teleport/station/station = locate(/obj/machinery/teleport/station, get_step(src, dir))
var/obj/machinery/teleport/hub/hub
if(station)
@@ -210,10 +210,13 @@
else
spark_system.queue()
accurate = 1
- spawn(3000) accurate = 0 //Accurate teleporting for 5 minutes
+ addtimer(CALLBACK(src, .proc/reset_teleport), 5 MINUTES)
for(var/mob/B in hearers(src, null))
B.show_message("Test fire completed. ")
return
+
+/obj/machinery/teleport/hub/proc/reset_teleport()
+ accurate = 0
/*
/proc/do_teleport(atom/movable/M as mob|obj, atom/destination, precision)
if(istype(M, /obj/effect))
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index 967b7799ed0..66c2dfffaa5 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -42,9 +42,10 @@
var/area/A = control_area
if(A && istype(A))
A.turret_controls -= src
- ..()
+ return ..()
-/obj/machinery/turretid/initialize()
+/obj/machinery/turretid/Initialize()
+ . = ..()
if(!control_area)
control_area = get_area(src)
else if(istext(control_area))
@@ -61,7 +62,6 @@
control_area = null
power_change() //Checks power and initial settings
- return
/obj/machinery/turretid/proc/isLocked(mob/user)
if(ailock && issilicon(user))
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index af383867256..e18bdeae2e1 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -95,27 +95,23 @@
var/obj/item/weapon/coin/coin
var/datum/wires/vending/wires = null
-/obj/machinery/vending/New()
- ..()
+/obj/machinery/vending/Initialize()
+ . = ..()
wires = new(src)
- spawn(4)
- if(src.product_slogans)
- src.slogan_list += text2list(src.product_slogans, ";")
+ if(src.product_slogans)
+ src.slogan_list += text2list(src.product_slogans, ";")
- // So not all machines speak at the exact same time.
- // The first time this machine says something will be at slogantime + this random value,
- // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
- src.last_slogan = world.time + rand(0, slogan_delay)
+ // So not all machines speak at the exact same time.
+ // The first time this machine says something will be at slogantime + this random value,
+ // so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
+ src.last_slogan = world.time + rand(0, slogan_delay)
- if(src.product_ads)
- src.ads_list += text2list(src.product_ads, ";")
+ if(src.product_ads)
+ src.ads_list += text2list(src.product_ads, ";")
- src.build_inventory()
- power_change()
+ src.build_inventory()
+ power_change()
- return
-
- return
/**
* Build src.produdct_records from the products lists
@@ -213,9 +209,9 @@
else if(istype(W, /obj/item/weapon/screwdriver))
src.panel_open = !src.panel_open
user << "You [src.panel_open ? "open" : "close"] the maintenance panel."
- src.overlays.Cut()
+ cut_overlays()
if(src.panel_open)
- src.overlays += image(src.icon, "[initial(icon_state)]-panel")
+ add_overlay("[initial(icon_state)]-panel")
nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI
return
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index ffbd913b3d5..6e5ffa9e734 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -78,7 +78,7 @@
/obj/mecha/combat/marauder/Destroy()
qdel(smoke_system)
- ..()
+ return ..()
/obj/mecha/combat/marauder/relaymove(mob/user,direction)
if(user != src.occupant) //While not "realistic", this piece is player friendly.
@@ -213,4 +213,4 @@
src.smoke()
if (href_list["toggle_zoom"])
src.zoom()
- return
\ No newline at end of file
+ return
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index b55419d8619..6aa75796718 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -23,10 +23,6 @@
return 1
return 0
-/obj/item/mecha_parts/mecha_equipment/New()
- ..()
- return
-
/obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page()
if(chassis)
send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list())
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index aa11007a536..4c4cee7b915 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -221,7 +221,7 @@
for(var/a = 1 to 5)
spawn(0)
- var/obj/effect/effect/water/W = getFromPool(/obj/effect/effect/water, get_turf(chassis))
+ var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis))
var/turf/my_target
if(a == 1)
my_target = T
@@ -606,7 +606,7 @@
Destroy()
qdel(pr_repair_droid)
pr_repair_droid = null
- ..()
+ return ..()
attach(obj/mecha/M as obj)
..()
@@ -699,7 +699,7 @@
Destroy()
qdel(pr_energy_relay)
pr_energy_relay = null
- ..()
+ return ..()
detach()
pr_energy_relay.stop()
@@ -787,7 +787,7 @@
Destroy()
qdel(pr_mech_generator)
pr_mech_generator = null
- ..()
+ return ..()
proc/init()
fuel = new /obj/item/stack/material/phoron(src)
diff --git a/code/game/mecha/equipment/tracking_beacon.dm b/code/game/mecha/equipment/tracking_beacon.dm
index d45b7d7aab5..dc97eb88d1b 100644
--- a/code/game/mecha/equipment/tracking_beacon.dm
+++ b/code/game/mecha/equipment/tracking_beacon.dm
@@ -8,7 +8,8 @@
origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
var/control = 0//
-/obj/item/mecha_parts/mecha_tracking/initialize()
+/obj/item/mecha_parts/mecha_tracking/Initialize()
+ . = ..()
if (in_mecha())
exo_beacons.Add(src)//For the sake of exosuits which spawn with a preinstalled tracking beacon
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index cf50e695259..cf6539c0f19 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -10,8 +10,8 @@
var/charge = 45
var/repair = 0
-/obj/machinery/mech_recharger/New()
- ..()
+/obj/machinery/mech_recharger/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src)
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index a4f6b701695..b46e7cad8b3 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -25,9 +25,8 @@
var/manufacturer = null
var/sync_message = ""
-/obj/machinery/mecha_part_fabricator/New()
- ..()
-
+/obj/machinery/mecha_part_fabricator/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/mechfab(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
@@ -38,9 +37,6 @@
RefreshParts()
files = new /datum/research(src) //Setup the research data holder.
- return
-
-/obj/machinery/mecha_part_fabricator/initialize()
manufacturer = basic_robolimb.company
update_categories()
@@ -57,13 +53,13 @@
update_icon()
/obj/machinery/mecha_part_fabricator/update_icon()
- overlays.Cut()
+ cut_overlays()
if(panel_open)
icon_state = "fab-o"
else
icon_state = "fab-idle"
if(busy)
- overlays += "fab-active"
+ add_overlay("fab-active")
/obj/machinery/mecha_part_fabricator/dismantle()
for(var/f in materials)
@@ -192,9 +188,10 @@
if(materials[material] + amnt <= res_max_amount)
if(stack && stack.amount >= 1)
var/count = 0
- overlays += "fab-load-metal"
- spawn(10)
- overlays -= "fab-load-metal"
+
+ add_overlay("fab-load-[material]")
+ CUT_OVERLAY_IN("fab-load-[material]", 6)
+
while(materials[material] + amnt <= res_max_amount && stack.amount >= 1)
materials[material] += amnt
stack.use(1)
@@ -301,7 +298,8 @@
for(var/M in D.materials)
materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
if(D.build_path)
- var/obj/new_item = D.Fabricate(loc, src)
+ var/loc_offset = get_step(src, dir)
+ var/obj/new_item = D.Fabricate(loc_offset, src)
visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.")
if(mat_efficiency != 1)
if(new_item.matter && new_item.matter.len > 0)
diff --git a/code/game/mecha/mech_sensor.dm b/code/game/mecha/mech_sensor.dm
index a00e9d6594a..dbe94c88a23 100644
--- a/code/game/mecha/mech_sensor.dm
+++ b/code/game/mecha/mech_sensor.dm
@@ -69,15 +69,16 @@
else
icon_state = "airlock_sensor_off"
-/obj/machinery/mech_sensor/initialize()
+/obj/machinery/mech_sensor/Initialize()
+ . = ..()
set_frequency(frequency)
/obj/machinery/mech_sensor/proc/set_frequency(new_frequency)
if(radio_connection)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
- radio_connection = radio_controller.add_object(src, frequency)
+ radio_connection = SSradio.add_object(src, frequency)
/obj/machinery/mech_sensor/receive_signal(datum/signal/signal)
if(stat & NOPOWER)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index ccf41e8f6c7..3f000453744 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -90,6 +90,8 @@
var/noexplode = 0//Used for cases where an exosuit is spawned and turned into wreckage
+ can_hold_mob = TRUE
+
/obj/mecha/drain_power(var/drain_check)
if(drain_check)
@@ -158,19 +160,15 @@
cell = null
internal_tank = null
- qdel(pr_int_temp_processor)
- qdel(pr_inertial_movement)
- qdel(pr_give_air)
- qdel(pr_internal_damage)
- qdel(pr_manage_warnings)
- qdel(spark_system)
- pr_int_temp_processor = null
- pr_give_air = null
- pr_internal_damage = null
- spark_system = null
+ QDEL_NULL(pr_int_temp_processor)
+ QDEL_NULL(pr_inertial_movement)
+ QDEL_NULL(pr_give_air)
+ QDEL_NULL(pr_internal_damage)
+ QDEL_NULL(pr_manage_warnings)
+ QDEL_NULL(spark_system)
mechas_list -= src //global mech list
- ..()
+ return ..()
////////////////////////
////// Helpers /////////
@@ -1115,7 +1113,7 @@
A.ex_act(3)
sleep(1)
- if (A && !(A.gcDestroyed) && A.type == oldtype)//We check if the object has been qdel'd or (for turfs) changed type
+ if (!QDELETED(A) && A.type == oldtype)//We check if the object has been qdel'd or (for turfs) changed type
src.visible_message("[src.name] crashes into the [aname]! ")
take_damage(damage)
return 0//If it survived the impact then we stop breaking things for this proc
diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm
index 027c9f84afc..2c8217bb75a 100644
--- a/code/game/mecha/medical/medical.dm
+++ b/code/game/mecha/medical/medical.dm
@@ -1,5 +1,5 @@
-/obj/mecha/medical/initialize()
- ..()
+/obj/mecha/medical/Initialize()
+ . = ..()
var/turf/T = get_turf(src)
if(isPlayerLevel(T.z))
new /obj/item/mecha_parts/mecha_tracking(src)
@@ -21,4 +21,4 @@
var/result = step_rand(src)
if(result)
playsound(src,'sound/mecha/mechstep.ogg',25,1)
- return result
\ No newline at end of file
+ return result
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 0eddf05370b..40cd2bcd24d 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -19,7 +19,7 @@
T.Entered(A)
step_rand(A)
cargo.Cut()
- ..()
+ return ..()
/obj/mecha/working/ripley/firefighter
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm
index 8ba99ad1c56..ad1faf8b102 100644
--- a/code/game/mecha/working/working.dm
+++ b/code/game/mecha/working/working.dm
@@ -3,8 +3,8 @@
var/list/cargo = new
var/cargo_capacity = 5
-/obj/mecha/working/initialize()
- ..()
+/obj/mecha/working/Initialize()
+ . = ..()
var/turf/T = get_turf(src)
if(isPlayerLevel(T.z))
new /obj/item/mecha_parts/mecha_tracking(src)
@@ -23,8 +23,8 @@
if(T)
T.Entered(A)
step_rand(A)
- ..()
- return
+
+ return ..()
/obj/mecha/working/Topic(href, href_list)
..()
diff --git a/code/game/modifiers/modifiers.dm b/code/game/modifiers/modifiers.dm
index 516dd3c191c..d957ba2d44e 100644
--- a/code/game/modifiers/modifiers.dm
+++ b/code/game/modifiers/modifiers.dm
@@ -161,7 +161,7 @@ it should be avoided in favour of manual removal where possible
//This is the main proc you should call to create a modifier on a target object
/datum/proc/add_modifier(var/typepath, var/_modifier_type, var/_source = null, var/_source_data = 0, var/_strength = 0, var/_duration = 0, var/_check_interval = 0, var/override = 0)
var/datum/modifier/D = new typepath(src, _modifier_type, _source, _source_data, _strength, _duration, _check_interval)
- if (D && !D.gcDestroyed)
+ if (!QDELETED(D))
return D.handle_registration(override)
else
return null//The modifier must have failed creation and deleted itself
@@ -249,15 +249,15 @@ it should be avoided in favour of manual removal where possible
if (D.type == type)
existing = D
if (!existing)
- processing_modifiers += src
- target.modifiers += src
+ START_PROCESSING(SSmodifiers, src)
+ LAZYADD(target.modifiers, src)
activate()
return src
else
return handle_override(override, existing)
/datum/modifier/proc/activate()
- if (!gcDestroyed && !active && target)
+ if (!QDELING(src) && !active && target)
active = 1
return 1
return 0
@@ -266,7 +266,7 @@ it should be avoided in favour of manual removal where possible
active = 0
return 1
-/datum/modifier/proc/process()
+/datum/modifier/process()
if (!active)
last_tick = world.time
@@ -281,7 +281,7 @@ it should be avoided in favour of manual removal where possible
/datum/modifier/proc/check_validity()
next_check = world.time + check_interval
- if (!target || target.gcDestroyed)
+ if (QDELETED(target))
return validity_fail("Target is gone!")
if (modifier_type == MODIFIER_CUSTOM)
@@ -296,7 +296,7 @@ it should be avoided in favour of manual removal where possible
else if (modifier_type == MODIFIER_TIMED)
return 1
- if (!source || source.gcDestroyed)//If we're not timed or custom, then we need a source. If our source is gone, we are invalid
+ if (QDELETED(source))//If we're not timed or custom, then we need a source. If our source is gone, we are invalid
return validity_fail("Source is gone and we need one")
switch (modifier_type)
@@ -371,8 +371,8 @@ it should be avoided in favour of manual removal where possible
//Instant var removes us from the lists immediately, instead of waiting til next frame when qdel goes through
if (instant)
if (target)
- target.modifiers -= src
- processing_modifiers -= src
+ LAZYREMOVE(target.modifiers, src)
+ STOP_PROCESSING(SSmodifiers, src)
if (suspend)
deactivate()
@@ -389,9 +389,9 @@ it should be avoided in favour of manual removal where possible
if (active)
deactivate()
if (target)
- target.modifiers -= src
- processing_modifiers -= src
- ..()
+ LAZYREMOVE(target.modifiers, src)
+ STOP_PROCESSING(SSmodifiers, src)
+ return ..()
//Handles overriding an existing modifier of the same type.
@@ -402,14 +402,14 @@ it should be avoided in favour of manual removal where possible
qdel(src)
return existing
if (MODIFIER_OVERRIDE_NEIGHBOR)
- processing_modifiers += src
- target.modifiers += src
+ START_PROCESSING(SSmodifiers, src)
+ LAZYADD(target.modifiers, src)
activate()
return src
if (MODIFIER_OVERRIDE_REPLACE)
existing.stop()
- processing_modifiers += src
- target.modifiers += src
+ START_PROCESSING(SSmodifiers, src)
+ LAZYADD(target.modifiers, src)
activate()
return src
if (MODIFIER_OVERRIDE_REFRESH)
@@ -451,3 +451,6 @@ it should be avoided in favour of manual removal where possible
/datum/modifier/proc/custom_override(var/datum/modifier/existing)
qdel(src)
return existing
+
+/atom
+ var/tmp/list/modifiers
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 0814ece434e..fd1be1a26d7 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -17,9 +17,6 @@
user_buckle_mob(M, user)
//Cleanup
-/obj/Del()
- unbuckle_mob()
- return ..()
/obj/Destroy()
unbuckle_mob()
@@ -52,7 +49,7 @@
return
/obj/proc/user_buckle_mob(mob/living/M, mob/user)
- if(!ticker)
+ if(!ROUND_IS_STARTED)
user << "You can't buckle anyone in before the game starts. "
if(!user.Adjacent(M) || user.restrained() || user.lying || user.stat || istype(user, /mob/living/silicon/pai))
return
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 24754c22701..6c9a3b651f2 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -49,4 +49,4 @@
visible_message("\The [src.target] is struggling to withstand the acid! ")
if(0 to 1)
visible_message("\The [src.target] begins to crumble under the acid! ")
- spawn(rand(150, 200)) tick()
\ No newline at end of file
+ addtimer(CALLBACK(src, .proc/tick), rand(150, 200))
diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm
index e1f3bb7c38f..1c19a392c3d 100644
--- a/code/game/objects/effects/chem/chemsmoke.dm
+++ b/code/game/objects/effects/chem/chemsmoke.dm
@@ -71,8 +71,8 @@
var/datum/seed/seed
/datum/effect/effect/system/smoke_spread/chem/spores/New(seed_name)
- if(seed_name && plant_controller)
- seed = plant_controller.seeds[seed_name]
+ if(seed_name && SSplants)
+ seed = SSplants.seeds[seed_name]
if(!seed)
qdel(src)
..()
@@ -231,7 +231,7 @@
if(passed_smoke)
smoke = passed_smoke
else
- smoke = getFromPool(/obj/effect/effect/smoke/chem, location, smoke_duration + rand(smoke_duration*-0.25, smoke_duration*0.25), T, I)
+ smoke = new /obj/effect/effect/smoke/chem(location, smoke_duration + rand(smoke_duration*-0.25, smoke_duration*0.25), T, I)
if(chemholder.reagents.reagent_list.len)
chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents
@@ -242,7 +242,7 @@
/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/smoke_duration, var/icon/I, var/dist = 1)
- var/obj/effect/effect/smoke/chem/spores = getFromPool(/obj/effect/effect/smoke/chem, location)
+ var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location)
spores.name = "cloud of [seed.seed_name] [seed.seed_noun]"
..(T, I, smoke_duration, dist, spores)
diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm
index b7d2acc5411..30b3b3c1410 100644
--- a/code/game/objects/effects/chem/foam.dm
+++ b/code/game/objects/effects/chem/foam.dm
@@ -20,20 +20,22 @@
icon_state = "[ismetal? "m" : ""]foam"
metal = ismetal
playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3)
- spawn(3 + metal * 3)
- process()
- checkReagents()
- spawn(120)
- processing_objects.Remove(src)
- sleep(30)
- if(metal)
- var/obj/structure/foamedmetal/M = new(src.loc)
- M.metal = metal
- M.updateicon()
- flick("[icon_state]-disolve", src)
- sleep(5)
- qdel(src)
- return
+ addtimer(CALLBACK(src, .proc/tick), 3 + metal * 3)
+ addtimer(CALLBACK(src, .proc/post), 120)
+
+/obj/effect/effect/foam/proc/tick()
+ process()
+ checkReagents()
+
+/obj/effect/effect/foam/proc/post()
+ processing_objects.Remove(src)
+ sleep(30)
+ if(metal)
+ var/obj/structure/foamedmetal/M = new /obj/structure/foamedmetal(src.loc)
+ M.metal = metal
+ M.updateicon()
+ flick("[icon_state]-disolve", src)
+ QDEL_IN(src, 5)
/obj/effect/effect/foam/proc/checkReagents() // transfer any reagents to the floor
if(!metal && reagents)
@@ -70,8 +72,7 @@
if(!metal && prob(max(0, exposed_temperature - 475)))
flick("[icon_state]-disolve", src)
- spawn(5)
- qdel(src)
+ QDEL_IN(src, 5)
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
if(metal)
@@ -102,23 +103,23 @@
carried_reagents += R.id
/datum/effect/effect/system/foam_spread/start()
- spawn(0)
- var/obj/effect/effect/foam/F = locate() in location
- if(F)
- F.amount += amount
- return
+ set waitfor = FALSE
+ var/obj/effect/effect/foam/F = locate() in location
+ if(F)
+ F.amount += amount
+ return
- F = getFromPool(/obj/effect/effect/foam, location, metal)
- F.amount = amount
+ F = new /obj/effect/effect/foam(location, metal)
+ F.amount = amount
- if(!metal) // don't carry other chemicals if a metal foam
- F.create_reagents(10)
+ if(!metal) // don't carry other chemicals if a metal foam
+ F.create_reagents(10)
- if(carried_reagents)
- for(var/id in carried_reagents)
- F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway
- else
- F.reagents.add_reagent("water", 1, safety = 1)
+ if(carried_reagents)
+ for(var/id in carried_reagents)
+ F.reagents.add_reagent(id, 1, safety = 1) //makes a safety call because all reagents should have already reacted anyway
+ else
+ F.reagents.add_reagent("water", 1, safety = 1)
// wall formed by metal foams, dense and opaque, but easy to break
@@ -139,7 +140,8 @@
/obj/structure/foamedmetal/Destroy()
density = 0
update_nearby_tiles(1)
- ..()
+ set_opacity(0)
+ return ..()
/obj/structure/foamedmetal/proc/updateicon()
if(metal == 1)
diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm
index 1b4d7450019..8ae164f3005 100644
--- a/code/game/objects/effects/chem/water.dm
+++ b/code/game/objects/effects/chem/water.dm
@@ -7,9 +7,7 @@
/obj/effect/effect/water/New(loc)
..()
- spawn(150) // In case whatever made it forgets to delete it
- if(src)
- qdel(src)
+ QDEL_IN(src, 15 SECONDS) // In case whatever made it forgets to delete it
/obj/effect/effect/water/proc/set_color() // Call it after you move reagents to it
icon += reagents.get_color()
diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm
index 2bf3a2a574d..f5eaf24563a 100644
--- a/code/game/objects/effects/decals/Cleanable/fuel.dm
+++ b/code/game/objects/effects/decals/Cleanable/fuel.dm
@@ -6,22 +6,22 @@
anchored = 1
var/amount = 1
- New(turf/newLoc,amt=1,nologs=0)
- if(!nologs)
- message_admins("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z]) (JMP )")
- log_game("Liquid fuel has spilled in [newLoc.loc.name] ([newLoc.x],[newLoc.y],[newLoc.z])")
+ Initialize(mapload, amt = 1, nologs = 0)
+ . = ..()
+ if(!nologs && !mapload)
+ message_admins("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z]) (JMP )")
+ log_game("Liquid fuel has spilled in [loc.loc.name] ([loc.x],[loc.y],[loc.z])")
src.amount = amt
var/has_spread = 0
//Be absorbed by any other liquid fuel in the tile.
- for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc)
+ for(var/obj/effect/decal/cleanable/liquid_fuel/other in loc)
if(other != src)
other.amount += src.amount
other.Spread()
has_spread = 1
break
- . = ..()
if(!has_spread)
Spread()
else
@@ -50,7 +50,7 @@
flamethrower_fuel
icon_state = "mustard"
anchored = 0
- New(newLoc, amt = 1, d = 0)
+ Initialize(mapload, amt = 1, d = 0)
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
. = ..()
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 72059bc02b5..5c8f379480f 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -21,6 +21,7 @@ var/global/list/image/splatter_cache=list()
var/list/datum/disease2/disease/virus2 = list()
var/amount = 5
var/drytime
+ var/dries = TRUE
/obj/effect/decal/cleanable/blood/reveal_blood()
if(!fluorescent)
@@ -33,17 +34,15 @@ var/global/list/image/splatter_cache=list()
if(invisibility != 100)
invisibility = 100
amount = 0
- processing_objects -= src
..(ignore=1)
/obj/effect/decal/cleanable/blood/Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
- processing_objects -= src
return ..()
-/obj/effect/decal/cleanable/blood/New()
- ..()
+/obj/effect/decal/cleanable/blood/Initialize()
+ . = ..()
update_icon()
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
return
@@ -54,12 +53,9 @@ var/global/list/image/splatter_cache=list()
if (B.blood_DNA)
blood_DNA |= B.blood_DNA.Copy()
qdel(B)
- drytime = world.time + DRYING_TIME * (amount+1)
- processing_objects += src
-
-/obj/effect/decal/cleanable/blood/process()
- if(world.time > drytime)
- dry()
+ drytime = DRYING_TIME * (amount+1)
+ if (dries)
+ addtimer(CALLBACK(src, /obj/effect/decal/cleanable/blood/.proc/dry), drytime)
/obj/effect/decal/cleanable/blood/update_icon()
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
@@ -71,8 +67,7 @@ var/global/list/image/splatter_cache=list()
if(amount < 1)
return
- if (!blood_DNA || !islist(blood_DNA))
- blood_DNA = list()
+ LAZYINITLIST(blood_DNA)
var/obj/item/organ/external/l_foot = perp.get_organ("l_foot")
var/obj/item/organ/external/r_foot = perp.get_organ("r_foot")
@@ -89,19 +84,18 @@ var/global/list/image/splatter_cache=list()
if(!S.blood_DNA)
S.blood_DNA = list()
S.blood_overlay.color = basecolor
- S.overlays += S.blood_overlay
+ S.add_overlay(S.blood_overlay)
if(S.blood_overlay && S.blood_overlay.color != basecolor)
+ S.cut_overlay(S.blood_overlay, TRUE)
S.blood_overlay.color = basecolor
- S.overlays.Cut()
- S.overlays += S.blood_overlay
+ S.add_overlay(S.blood_overlay, TRUE)
if(blood_DNA)
S.blood_DNA |= blood_DNA.Copy()
else if (hasfeet)//Or feet
perp.feet_blood_color = basecolor
perp.track_blood = max(amount,perp.track_blood)
- if(!perp.feet_blood_DNA)
- perp.feet_blood_DNA = list()
+ LAZYINITLIST(perp.feet_blood_DNA)
if (blood_DNA)
perp.feet_blood_DNA |= blood_DNA.Copy()
else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair))
@@ -116,7 +110,6 @@ var/global/list/image/splatter_cache=list()
desc = drydesc
color = adjust_brightness(color, -50)
amount = 0
- processing_objects -= src
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
..()
@@ -127,10 +120,11 @@ var/global/list/image/splatter_cache=list()
var/taken = rand(1,amount)
amount -= taken
user << "You get some of \the [src] on your hands. "
- if (!user.blood_DNA)
- user.blood_DNA = list()
+ LAZYINITLIST(user.blood_DNA)
+
if (blood_DNA)
user.blood_DNA |= blood_DNA.Copy()
+
user.bloody_hands += taken
user.hand_blood_color = basecolor
user.update_inv_gloves(1)
@@ -150,8 +144,8 @@ var/global/list/image/splatter_cache=list()
amount = 0
var/list/drips = list()
-/obj/effect/decal/cleanable/blood/drip/New()
- ..()
+/obj/effect/decal/cleanable/blood/drip/Initialize()
+ . = ..()
drips |= icon_state
/obj/effect/decal/cleanable/blood/writing
@@ -162,8 +156,8 @@ var/global/list/image/splatter_cache=list()
amount = 0
var/message
-/obj/effect/decal/cleanable/blood/writing/New()
- ..()
+/obj/effect/decal/cleanable/blood/writing/Initialize()
+ . = ..()
if(random_icon_states.len)
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
random_icon_states.Remove(W.icon_state)
@@ -219,22 +213,21 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
- spawn (0)
- var/direction = pick(directions)
- for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
- sleep(3)
- if (i > 0)
- var/obj/effect/decal/cleanable/blood/b = getFromPool(/obj/effect/decal/cleanable/blood/splatter, src.loc)
- b.basecolor = src.basecolor
- b.update_icon()
- for(var/datum/disease/D in src.viruses)
- var/datum/disease/ND = D.Copy(1)
- b.viruses += ND
- ND.holder = b
-
- if (step_to(src, get_step(src, direction), 0))
- break
+ set waitfor = FALSE
+ var/direction = pick(directions)
+ for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
+ sleep(3)
+ if (i > 0)
+ var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
+ b.basecolor = src.basecolor
+ b.update_icon()
+ for(var/datum/disease/D in src.viruses)
+ var/datum/disease/ND = D.Copy(1)
+ b.viruses += ND
+ ND.holder = b
+ if (step_to(src, get_step(src, direction), 0))
+ break
/obj/effect/decal/cleanable/mucus
name = "mucus"
@@ -248,8 +241,11 @@ var/global/list/image/splatter_cache=list()
random_icon_states = list("mucus")
var/list/datum/disease2/disease/virus2 = list()
- var/dry=0 // Keeps the lag down
+ var/dry = 0 // Keeps the lag down
-/obj/effect/decal/cleanable/mucus/New()
- spawn(DRYING_TIME * 2)
- dry=1
+/obj/effect/decal/cleanable/mucus/Initialize()
+ . = ..()
+ addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * 2)
+
+/obj/effect/decal/cleanable/mucus/proc/dry()
+ dry = TRUE
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index c70a5ab9fc6..28ba4c60c17 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -23,13 +23,6 @@
F.dirt += 4
qdel(src)
-/obj/effect/decal/cleanable/greenglow
-
- New()
- ..()
- spawn(1200)// 2 minutes
- qdel(src)
-
/obj/effect/decal/cleanable/dirt
name = "dirt"
desc = "Someone should clean that up."
@@ -58,10 +51,17 @@
density = 0
anchored = 1
layer = 2
- light_range = 1
+ light_range = 2
+ light_power = 0.5
+ light_color = LIGHT_COLOR_GREEN
+ uv_intensity = 0
icon = 'icons/effects/effects.dmi'
icon_state = "greenglow"
+/obj/effect/decal/cleanable/greenglow/New()
+ ..()
+ QDEL_IN(src, 2 MINUTES)
+
/obj/effect/decal/cleanable/cobweb
name = "cobweb"
desc = "Somebody should remove that."
@@ -105,7 +105,7 @@
Destroy()
for(var/datum/disease/D in viruses)
D.cure(0)
- ..()
+ return ..()
/obj/effect/decal/cleanable/tomato_smudge
name = "tomato smudge"
diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm
index bc780a5ee27..51974aeac57 100644
--- a/code/game/objects/effects/decals/Cleanable/robots.dm
+++ b/code/game/objects/effects/decals/Cleanable/robots.dm
@@ -5,6 +5,7 @@
icon_state = "gib1"
basecolor="#030303"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
+ dries = FALSE // So we can avoid setting the timer if it's not going to do anything.
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
color = "#FFFFFF"
@@ -13,18 +14,18 @@
return
/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions)
- spawn (0)
- var/direction = pick(directions)
- for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
- sleep(3)
- if (i > 0)
- if (prob(40))
- var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
- streak.update_icon()
- else if (prob(10))
- spark(src, 3, alldirs)
- if (step_to(src, get_step(src, direction), 0))
- break
+ set waitfor = FALSE
+ var/direction = pick(directions)
+ for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
+ sleep(3)
+ if (i > 0)
+ if (prob(40))
+ var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc)
+ streak.update_icon()
+ else if (prob(10))
+ spark(src, 3, alldirs)
+ if (step_to(src, get_step(src, direction), 0))
+ break
/obj/effect/decal/cleanable/blood/gibs/robot/limb
random_icon_states = list("gibarm", "gibleg")
@@ -39,6 +40,7 @@
name = "motor oil"
desc = "It's black and greasy. Looks like Beepsky made another mess."
basecolor="#030303"
+ dries = FALSE
/obj/effect/decal/cleanable/blood/oil/dry()
return
diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm
index b8ecb7f60b9..39d35f519cf 100644
--- a/code/game/objects/effects/decals/contraband.dm
+++ b/code/game/objects/effects/decals/contraband.dm
@@ -85,14 +85,21 @@
var/poster_type //So mappers can specify a desired poster
var/ruined = 0
-/obj/structure/sign/poster/New(var/newloc, var/placement_dir=null, var/serial=null)
- ..(newloc)
+/obj/structure/sign/poster/Initialize(mapload, placement_dir = null, serial = null)
+ . = ..()
if(!serial)
serial = rand(1, poster_designs.len) //use a random serial if none is given
-
+
serial_number = serial
- var/datum/poster/design = poster_designs[serial_number]
+
+ var/datum/poster/design
+ if (poster_type)
+ var/path = text2path(poster_type)
+ design = new path
+ else
+ design = poster_designs[serial_number]
+
set_poster(design)
switch (placement_dir)
@@ -109,11 +116,6 @@
pixel_x = -32
pixel_y = 0
-/obj/structure/sign/poster/initialize()
- if (poster_type)
- var/path = text2path(poster_type)
- var/datum/poster/design = new path
- set_poster(design)
/obj/structure/sign/poster/proc/set_poster(var/datum/poster/design)
name = "[initial(name)] - [design.name]"
diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm
index 964a1301b89..a55fcdc485e 100644
--- a/code/game/objects/effects/decals/misc.dm
+++ b/code/game/objects/effects/decals/misc.dm
@@ -11,4 +11,4 @@
/obj/effect/decal/spraystill
density = 0
anchored = 1
- layer = 50
\ No newline at end of file
+ layer = 50
diff --git a/code/game/objects/effects/decals/warning_stripes.dm b/code/game/objects/effects/decals/warning_stripes.dm
index e22acfad74e..f7f12dc60ca 100644
--- a/code/game/objects/effects/decals/warning_stripes.dm
+++ b/code/game/objects/effects/decals/warning_stripes.dm
@@ -2,10 +2,10 @@
icon = 'icons/effects/warning_stripes.dmi'
layer = 2
-/obj/effect/decal/warning_stripes/New()
+/obj/effect/decal/warning_stripes/Initialize()
. = ..()
- var/turf/T=get_turf(src)
- var/image/I=image(icon, icon_state = icon_state, dir = dir)
- I.color=color
- T.overlays += I
+ var/turf/T = get_turf(src)
+ var/image/I = image(icon, icon_state = icon_state, dir = dir)
+ I.color = color
+ T.add_overlay(I, TRUE) // Register it as priority so we don't lose it on icon update.
qdel(src)
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index e5cea9767bd..de7a05fca0d 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -75,7 +75,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
- var/obj/effect/effect/steam/steam = getFromPool(/obj/effect/effect/steam, src.location)
+ var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
var/direction
if(src.cardinals)
direction = pick(cardinal)
@@ -84,8 +84,7 @@ steam.start() -- spawns the effect
for(i=0, i 0)
+ QDEL_IN(src, lifespan)
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
if(istype(M, /obj/effect)) //sparks don't teleport
@@ -50,4 +46,3 @@
do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0)
else
do_teleport(M, target, 1) ///You will appear adjacent to the beacon
-
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index fb4716043f1..a9d9251a7d4 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -151,14 +151,14 @@
name = "TTV bomb - proximity"
assembly_type = /obj/item/device/assembly/prox_sensor
-/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co)
+/obj/effect/spawner/newbomb/radio/custom/Initialize(mapload, ph, ox, co)
if(ph != null) phoron_amt = ph
if(ox != null) oxygen_amt = ox
if(co != null) carbon_amt = co
- ..()
+ . = ..()
-/obj/effect/spawner/newbomb/New(newloc)
- ..(newloc)
+/obj/effect/spawner/newbomb/Initialize()
+ . = ..()
var/obj/item/device/transfer_valve/V = new(src.loc)
var/obj/item/weapon/tank/phoron/PT = new(V)
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index 3984c272384..4e4a5753497 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -6,9 +6,9 @@
)
gibamounts = list(2,2,1)
-/obj/effect/gibspawner/generic/New()
+/obj/effect/gibspawner/generic/Initialize()
gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
- ..()
+ . = ..()
/obj/effect/gibspawner/human
gibtypes = list(
@@ -21,10 +21,10 @@
/obj/effect/decal/cleanable/blood/gibs/core)
gibamounts = list(1,1,1,1,1,1,1)
-/obj/effect/gibspawner/human/New()
+/obj/effect/gibspawner/human/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
gibamounts[6] = pick(0,1,2)
- ..()
+ . = ..()
/obj/effect/gibspawner/robot
sparks = 1
@@ -38,10 +38,10 @@
)
gibamounts = list(1,1,1,1,1,1)
-/obj/effect/gibspawner/robot/New()
+/obj/effect/gibspawner/robot/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
gibamounts[6] = pick(0,1,2)
- ..()
+ . = ..()
/obj/effect/gibspawner/xeno
gibtypes = list(
@@ -55,7 +55,7 @@
)
gibamounts = list(1,1,1,1,1,1,1)
-/obj/effect/gibspawner/xeno/New()
+/obj/effect/gibspawner/xeno/Initialize()
gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
gibamounts[6] = pick(0,1,2)
- ..()
\ No newline at end of file
+ . = ..()
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 02d66ed114d..408a441c47c 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -78,19 +78,19 @@
New()
pixel_x = rand(3,-3)
pixel_y = rand(3,-3)
- processing_objects |= src
+ START_PROCESSING(SSprocessing, src)
/obj/effect/spider/eggcluster/New(var/location, var/atom/parent)
get_light_and_color(parent)
..()
/obj/effect/spider/eggcluster/Destroy()
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
if(istype(loc, /obj/item/organ/external))
var/obj/item/organ/external/O = loc
O.implants -= src
- ..()
+ return ..()
/obj/effect/spider/eggcluster/process()
amount_grown += rand(0,2)
@@ -101,7 +101,7 @@
O = loc
for(var/i=0, i[src] dies! ")
- getFromPool(/obj/effect/decal/cleanable/spiderling_remains, src.loc)
+ visible_message("\The [src] dies! ")
+ new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
qdel(src)
/obj/effect/spider/spiderling/healthcheck()
@@ -248,11 +248,11 @@
icon_state = "cocoon1"
health = 60
- New()
- icon_state = pick("cocoon1","cocoon2","cocoon3")
+/obj/effect/spider/cocoon/New()
+ icon_state = pick("cocoon1","cocoon2","cocoon3")
/obj/effect/spider/cocoon/Destroy()
src.visible_message("\The [src] splits open. ")
for(var/atom/movable/A in contents)
- A.loc = src.loc
+ A.forceMove(src.loc)
return ..()
diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm
index ad666f88637..a21a915c17b 100644
--- a/code/game/objects/empulse.dm
+++ b/code/game/objects/empulse.dm
@@ -15,13 +15,12 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
log_game("EMP with size ([heavy_range], [light_range]) in area [epicenter.loc.name] ")
if(heavy_range > 1)
- var/obj/effect/overlay/pulse = getFromPool(/obj/effect/overlay, epicenter)
+ var/obj/effect/overlay/pulse = new /obj/effect/overlay(epicenter)
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "emppulse"
pulse.name = "emp pulse"
pulse.anchored = 1
- spawn(20)
- qdel(pulse)
+ QDEL_IN(pulse, 20)
if(heavy_range > light_range)
light_range = heavy_range
@@ -49,4 +48,4 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
if((world.timeofday - time) >= EMPDEBUG)
log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!")
#endif
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 8ed69bcd79a..2f5cf8ff901 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -1,6 +1,6 @@
// explosion logic is in code/controllers/Processes/explosives.dm now
-proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, is_rec = config.use_recursive_explosions)
+/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, z_transfer = UP|DOWN, is_rec = config.use_recursive_explosions)
src = null //so we don't abort once src is deleted
var/datum/explosiondata/data = new
data.epicenter = epicenter
@@ -14,7 +14,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
data.rec_pow = max(0,devastation_range) * 2 + max(0,heavy_impact_range) + max(0,light_impact_range)
// queue work
- bomb_processor.queue(data)
+ SSexplosives.queue(data)
// == Recursive Explosions stuff ==
@@ -25,7 +25,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
d.is_rec = 1
d.epicenter = T
d.rec_pow = power
- bomb_processor.queue(d)
+ SSexplosives.queue(d)
/obj
var/explosion_resistance
@@ -55,4 +55,4 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
explosion_resistance = 10
/turf/simulated/wall
- explosion_resistance = 10
\ No newline at end of file
+ explosion_resistance = 10
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index cda131d121f..281cb33676a 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -195,14 +195,20 @@
var/failure = 0
for(var/obj/item/I in src.loc)
+ CHECK_TICK
+
if(I.type in rejections) // To limit bag spamming: any given type only complains once
continue
+
if(!S.can_be_inserted(I)) // Note can_be_inserted still makes noise when the answer is no
rejections += I.type // therefore full bags are still a little spammy
failure = 1
continue
+
success = 1
S.handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed.
+ CHECK_TICK // Because people insist on picking up huge-ass piles of stuff.
+
if(success && !failure)
user << "You put everything in [S]. "
else if(success)
@@ -541,7 +547,7 @@ var/list/global/slot_flags_enumeration = list(
/obj/item/clean_blood()
. = ..()
if(blood_overlay)
- overlays.Remove(blood_overlay)
+ cut_overlay(blood_overlay, TRUE)
if(istype(src, /obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = src
G.transfer_blood = 0
@@ -567,7 +573,7 @@ var/list/global/slot_flags_enumeration = list(
//apply the blood-splatter overlay if it isn't already in there
if(!blood_DNA.len)
blood_overlay.color = blood_color
- overlays += blood_overlay
+ add_overlay(blood_overlay, TRUE) // Priority overlay so we don't lose it somehow.
//if this blood isn't already in the list, add it
if(istype(M))
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 17c7d762480..148a6ce24f5 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -89,9 +89,7 @@ move an amendment to the drawing.
/area/asteroid,
/area/tdome,
/area/syndicate_station,
- /area/wizard_station,
- /area/prison
- // /area/derelict //commented out, all hail derelict-rebuilders!
+ /area/wizard_station
)
for (var/type in SPECIALS)
if ( istype(A,type) )
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index b991187a7da..2964f914092 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -53,7 +53,7 @@
if (t)
src.name = "body bag - "
src.name += t
- src.overlays += image(src.icon, "bodybag_label")
+ add_overlay("bodybag_label")
else
src.name = "body bag"
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
@@ -61,7 +61,7 @@
else if(istype(W, /obj/item/weapon/wirecutters))
user << "You cut the tag off the bodybag"
src.name = "body bag"
- src.overlays.Cut()
+ cut_overlays()
return
/obj/structure/closet/body_bag/store_mobs(var/stored_units)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 6673d678dbc..fe5fd554bde 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -312,10 +312,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
* The Actual PDA
*/
-/obj/item/device/pda/New()
- ..()
+/obj/item/device/pda/Initialize()
+ . = ..()
PDAs += src
- PDAs = sortAtom(PDAs)
+ sortTim(PDAs, /proc/cmp_text_asc)
if(default_cartridge)
cartridge = new default_cartridge(src)
new /obj/item/weapon/pen(src)
@@ -908,9 +908,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
if(new_message || new_news)
- overlays += image('icons/obj/pda.dmi', "pda-r")
+ add_overlay("pda-r")
/obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P)
//TODO: sometimes these attacks show up on the message server
@@ -1396,7 +1396,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
PDAs -= src
if (src.id && prob(90)) //IDs are kept in 90% of the cases
src.id.loc = get_turf(src.loc)
- ..()
+ return ..()
/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery.
if (istype(AM, /mob/living))
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 85bde90cc4a..2eddcc8535e 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -58,9 +58,9 @@
icon_state = "cart-s"
access_security = 1
-/obj/item/weapon/cartridge/security/initialize()
+/obj/item/weapon/cartridge/security/Initialize()
+ . = ..()
radio = new /obj/item/radio/integrated/beepsky(src)
- ..()
/obj/item/weapon/cartridge/detective
name = "\improper D.E.T.E.C.T. cartridge"
@@ -110,9 +110,9 @@
access_reagent_scanner = 1
access_atmos = 1
-/obj/item/weapon/cartridge/signal/initialize()
+/obj/item/weapon/cartridge/signal/Initialize()
+ . = ..()
radio = new /obj/item/radio/integrated/signal(src)
- ..()
/obj/item/weapon/cartridge/signal/Destroy()
qdel(radio)
@@ -124,9 +124,9 @@
icon_state = "cart-q"
access_quartermaster = 1
-/obj/item/weapon/cartridge/quartermaster/initialize()
+/obj/item/weapon/cartridge/quartermaster/Initialize()
+ . = ..()
radio = new /obj/item/radio/integrated/mule(src)
- ..()
/obj/item/weapon/cartridge/head
name = "\improper Easy-Record DELUXE"
@@ -141,7 +141,8 @@
access_janitor = 1
access_security = 1
-/obj/item/weapon/cartridge/hop/initialize()
+/obj/item/weapon/cartridge/hop/Initialize()
+ . = ..()
radio = new /obj/item/radio/integrated/mule(src)
/obj/item/weapon/cartridge/hos
@@ -150,9 +151,9 @@
access_status_display = 1
access_security = 1
-/obj/item/weapon/cartridge/hos/initialize()
+/obj/item/weapon/cartridge/hos/Initialize()
+ . = ..()
radio = new /obj/item/radio/integrated/beepsky(src)
- ..()
/obj/item/weapon/cartridge/ce
name = "\improper Power-On DELUXE"
@@ -175,9 +176,9 @@
access_reagent_scanner = 1
access_atmos = 1
-/obj/item/weapon/cartridge/rd/initialize()
+/obj/item/weapon/cartridge/rd/Initialize()
+ . = ..()
radio = new /obj/item/radio/integrated/signal(src)
- ..()
/obj/item/weapon/cartridge/captain
name = "\improper Value-PAK cartridge"
@@ -202,7 +203,7 @@
/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
if(!frequency) return
var/datum/signal/status_signal = new
@@ -392,14 +393,14 @@
if(mode==47)
var/supplyData[0]
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
if (shuttle)
supplyData["shuttle_moving"] = shuttle.has_arrive_time()
supplyData["shuttle_eta"] = shuttle.eta_minutes()
supplyData["shuttle_loc"] = shuttle.at_station() ? "Station" : "Dock"
var/supplyOrderCount = 0
var/supplyOrderData[0]
- for(var/S in supply_controller.shoppinglist)
+ for(var/S in SScargo.shoppinglist)
var/datum/supply_order/SO = S
supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment))
@@ -411,7 +412,7 @@
var/requestCount = 0
var/requestData[0]
- for(var/S in supply_controller.requestlist)
+ for(var/S in SScargo.requestlist)
var/datum/supply_order/SO = S
requestCount++
requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment))
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
index 7ad2b002009..2d521db062a 100644
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ b/code/game/objects/items/devices/PDA/radio.dm
@@ -16,7 +16,7 @@
proc/post_signal(var/freq, var/key, var/value, var/key2, var/value2, var/key3, var/value3, s_filter)
//world << "Post: [freq]: [key]=[value], [key2]=[value2]"
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(freq)
if(!frequency) return
@@ -46,8 +46,8 @@
New()
..()
spawn(5)
- if(radio_controller)
- radio_controller.add_object(src, control_freq, filter = RADIO_SECBOT)
+ if(SSradio)
+ SSradio.add_object(src, control_freq, filter = RADIO_SECBOT)
// receive radio signals
// can detect bot status signals
@@ -101,9 +101,9 @@
/obj/item/radio/integrated/beepsky/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src, control_freq)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, control_freq)
+ return ..()
/obj/item/radio/integrated/mule
var/list/botlist = null // list of bots
@@ -118,9 +118,9 @@
New()
..()
spawn(5)
- if(radio_controller)
- radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT)
- radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
+ if(SSradio)
+ SSradio.add_object(src, control_freq, filter = RADIO_MULEBOT)
+ SSradio.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
spawn(10)
post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS)
@@ -217,8 +217,9 @@
var/last_transmission
var/datum/radio_frequency/radio_connection
- initialize()
- if(!radio_controller)
+ Initialize()
+ . = ..()
+ if(!SSradio)
return
if (src.frequency < PUBLIC_LOW_FREQ || src.frequency > PUBLIC_HIGH_FREQ)
@@ -227,9 +228,9 @@
set_frequency(frequency)
proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency)
+ radio_connection = SSradio.add_object(src, frequency)
proc/send_signal(message="ACTIVATE")
@@ -251,6 +252,6 @@
return
/obj/item/radio/integrated/signal/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src, frequency)
- ..()
+ if(SSradio)
+ SSradio.remove_object(src, frequency)
+ return ..()
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index d8e62198f86..e130d97a854 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -77,10 +77,10 @@
return 1
/obj/item/weapon/aicard/update_icon()
- overlays.Cut()
+ cut_overlays()
if(carded_ai)
if (!carded_ai.control_disabled)
- overlays += image('icons/obj/pda.dmi', "aicard-on")
+ add_overlay("aicard-on")
if(carded_ai.stat)
icon_state = "aicard-404"
else
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index e5f54dc18f7..c5c9965da09 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -45,23 +45,23 @@
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
qdel(active_dummy)
active_dummy = null
- usr << "You deactivate the [src]. "
- var/obj/effect/overlay/T = getFromPool(/obj/effect/overlay, get_turf(src))
+ usr << "You deactivate \the [src]. "
+ var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
- spawn(8) qdel(T)
+ QDEL_IN(T, 8)
else
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
var/obj/O = new saved_item(src)
if(!O) return
- var/obj/effect/dummy/chameleon/C = getFromPool(/obj/effect/dummy/chameleon, usr.loc)
+ var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc)
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src)
qdel(O)
- usr << "You activate the [src]. "
+ usr << "You activate \the [src]. "
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
- spawn(8) qdel(T)
+ QDEL_IN(T, 8)
/obj/item/device/chameleon/proc/disrupt(var/delete_dummy = 1)
if(active_dummy)
@@ -141,4 +141,4 @@
/obj/effect/dummy/chameleon/Destroy()
master.disrupt(0)
- ..()
+ return ..()
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 8a7ab6ed3b9..78243782482 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -17,9 +17,11 @@
var/on = 0
var/brightness_on = 3 //luminosity when on
-/obj/item/device/flashlight/initialize()
- ..()
- update_icon()
+/obj/item/device/flashlight/Initialize()
+ if (on)
+ light_range = brightness_on
+ update_icon()
+ . = ..()
/obj/item/device/flashlight/update_icon()
if(on)
@@ -197,7 +199,7 @@
turn_off()
if(!fuel)
src.icon_state = "[initial(icon_state)]-empty"
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
/obj/item/device/flashlight/flare/proc/turn_off()
on = 0
@@ -220,7 +222,7 @@
user.visible_message("[user] activates the flare. ", "You pull the cord on the flare, activating it! ")
src.force = on_damage
src.damtype = "fire"
- processing_objects += src
+ START_PROCESSING(SSprocessing, src)
/obj/item/device/flashlight/slime
gender = PLURAL
@@ -236,10 +238,6 @@
light_color = LIGHT_COLOR_SLIME_LAMP
light_wedge = LIGHT_OMNI
-/obj/item/device/flashlight/slime/New()
- ..()
- set_light(brightness_on)
-
/obj/item/device/flashlight/slime/update_icon()
return
@@ -273,7 +271,7 @@
turn_off()
if(!fuel)
src.icon_state = "[initial(icon_state)]-empty"
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
/obj/item/device/flashlight/glowstick/proc/turn_off()
on = 0
@@ -300,7 +298,7 @@
if(.)
user.visible_message("[user] cracks and shakes \the [src]. ", "You crack and shake \the [src], turning it on! ")
- processing_objects += src
+ START_PROCESSING(SSprocessing, src)
/obj/item/device/flashlight/glowstick/red
name = "red glowstick"
diff --git a/code/game/objects/items/devices/magnetic_lock.dm b/code/game/objects/items/devices/magnetic_lock.dm
index cb47b4e7b10..81dc8daa483 100644
--- a/code/game/objects/items/devices/magnetic_lock.dm
+++ b/code/game/objects/items/devices/magnetic_lock.dm
@@ -39,8 +39,8 @@
req_access = null
req_one_access = list(access_engine_equip, access_atmospherics)
-/obj/item/device/magnetic_lock/New()
- ..()
+/obj/item/device/magnetic_lock/Initialize()
+ . = ..()
powercell = new /obj/item/weapon/cell/high()
internal_cell = new /obj/item/weapon/cell/device()
@@ -138,15 +138,15 @@
if (WT.remove_fuel(2, user))
user.visible_message(span("notice", "[user] starts welding the metal shell of [src]."), span("notice", "You start [hacked ? "repairing" : "welding open"] the metal covering of [src]."))
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
- overlays += "overlay_welding"
- if (do_after(user, 25, 1))
+ add_overlay("overlay_welding")
+ if (do_after(user, 25))
user << span("notice", "You are able to [hacked ? "repair" : "weld through"] the metal shell of [src].")
if (hacked) locked = 1
else locked = 0
hacked = !hacked
- overlays -= "overlay_welding"
+ cut_overlay("overlay_welding")
else
- overlays -= "overlay_welding"
+ cut_overlay("overlay_welding")
update_icon()
return
@@ -269,7 +269,7 @@
user.visible_message("[user] starts mounting [src] onto [newtarget]. ", "You begin mounting [src] onto [newtarget]. ")
- if (do_after(user, 35, 1))
+ if (do_after(user, 35))
if (!check_target(newtarget, user)) return
@@ -386,7 +386,7 @@
update_overlays()
/obj/item/device/magnetic_lock/proc/update_overlays()
- overlays.Cut()
+ cut_overlays()
switch (status)
if (STATUS_BROKEN)
icon_state = "broken"
@@ -394,16 +394,16 @@
if (STATUS_INACTIVE to STATUS_ACTIVE)
if (hacked)
- overlays += "overlay_hacked"
+ add_overlay("overlay_hacked")
else if (locked)
- overlays += "overlay_locked"
+ add_overlay("overlay_locked")
else
- overlays += "overlay_unlocked"
+ add_overlay("overlay_unlocked")
switch (constructionstate)
if (0)
return
if (1 to 4)
- overlays += "overlay_deconstruct_[constructionstate]"
+ add_overlay("overlay_deconstruct_[constructionstate]")
/obj/item/device/magnetic_lock/proc/takedamage(var/damage)
health -= rand(damage/2, damage)
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 22b026435a2..5220fabc014 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -64,7 +64,7 @@
return ..(A, user)
var/obj/O = A
- var/datum/expansion/multitool/MT = O.expansions[/datum/expansion/multitool]
+ var/datum/expansion/multitool/MT = LAZYACCESS(O.expansions, /datum/expansion/multitool)
if(!MT)
return ..(A, user)
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index dae84ab1de5..4adcc9109fc 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -17,15 +17,15 @@
if(istype(rig))
rig.forced_move(direction, user)
-/obj/item/device/paicard/New()
- ..()
- overlays += "pai-off"
+/obj/item/device/paicard/Initialize()
+ . = ..()
+ add_overlay("pai_off")
/obj/item/device/paicard/Destroy()
//Will stop people throwing friend pAIs into the singularity so they can respawn
if(!isnull(pai))
pai.death(0)
- ..()
+ return ..()
/obj/item/device/paicard/attackby(obj/item/C as obj, mob/user as mob)
if(istype(C, /obj/item/weapon/card/id))
@@ -284,7 +284,7 @@
pai << "You have been bound to a new master. "
if(href_list["request"])
src.looking_for_personality = 1
- paiController.findPAI(src, usr)
+ SSpai.findPAI(src, usr)
if(href_list["wipe"])
var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No")
if(confirm == "Yes")
@@ -320,34 +320,37 @@
/obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
src.pai = personality
- src.overlays += "pai-happy"
+ add_overlay("pai-happy")
/obj/item/device/paicard/proc/removePersonality()
src.pai = null
- src.overlays.Cut()
- src.overlays += "pai-off"
+ cut_overlays()
+ add_overlay("pai-off")
/obj/item/device/paicard
var/current_emotion = 1
/obj/item/device/paicard/proc/setEmotion(var/emotion)
if(pai)
- src.overlays.Cut()
+ cut_overlays()
+ var/new_state
switch(emotion)
- if(1) src.overlays += "pai-happy"
- if(2) src.overlays += "pai-cat"
- if(3) src.overlays += "pai-extremely-happy"
- if(4) src.overlays += "pai-face"
- if(5) src.overlays += "pai-laugh"
- if(6) src.overlays += "pai-off"
- if(7) src.overlays += "pai-sad"
- if(8) src.overlays += "pai-angry"
- if(9) src.overlays += "pai-what"
- if(10) src.overlays += "pai-neutral"
- if(11) src.overlays += "pai-silly"
- if(12) src.overlays += "pai-nose"
- if(13) src.overlays += "pai-smirk"
- if(14) src.overlays += "pai-exclamation"
- if(15) src.overlays += "pai-question"
+ if(1) new_state = "pai-happy"
+ if(2) new_state = "pai-cat"
+ if(3) new_state = "pai-extremely-happy"
+ if(4) new_state = "pai-face"
+ if(5) new_state = "pai-laugh"
+ if(6) new_state = "pai-off"
+ if(7) new_state = "pai-sad"
+ if(8) new_state = "pai-angry"
+ if(9) new_state = "pai-what"
+ if(10) new_state = "pai-neutral"
+ if(11) new_state = "pai-silly"
+ if(12) new_state = "pai-nose"
+ if(13) new_state = "pai-smirk"
+ if(14) new_state = "pai-exclamation"
+ if(15) new_state = "pai-question"
+ if (new_state)
+ add_overlay(new_state)
current_emotion = emotion
/obj/item/device/paicard/proc/alertUpdate()
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index a7210721c82..b8911a068ec 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -28,7 +28,7 @@
/obj/item/device/powersink/Destroy()
processing_objects.Remove(src)
processing_power_items.Remove(src)
- ..()
+ return ..()
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/screwdriver))
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 7d41e25bc47..e8ac5d0ea4c 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -1,3 +1,5 @@
+var/global/list/teleportbeacons = list()
+
/obj/item/device/radio/beacon
name = "tracking beacon"
desc = "A beacon used by a teleporter."
@@ -6,6 +8,14 @@
var/code = "electronic"
origin_tech = list(TECH_BLUESPACE = 1)
+/obj/item/device/radio/beacon/New()
+ ..()
+ teleportbeacons += src
+
+/obj/item/device/radio/beacon/Destroy()
+ teleportbeacons.Remove(src)
+ return ..()
+
/obj/item/device/radio/beacon/hear_talk()
return
@@ -29,8 +39,7 @@
/obj/item/device/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
proc/digest_delay()
- spawn(600)
- qdel(src)
+ QDEL_IN(src, 600)
// SINGULO BEACON SPAWNER
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 9bcb17720f8..bfa7f90cb08 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -44,7 +44,7 @@
//..()
if(usr.stat || usr.restrained())
return
- if(((istype(usr, /mob/living/carbon/human) && ((!( ticker ) || (ticker && ticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf)))))
+ if(((istype(usr, /mob/living/carbon/human) && ((!(ROUND_IS_STARTED) || (SSticker.mode != "monkey")) && usr.contents.Find(src))) || (usr.contents.Find(master) || (in_range(src, usr) && istype(loc, /turf)))))
usr.set_machine(src)
if(href_list["freq"])
var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"]))
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 3da67ce1981..dadaabfe38c 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -20,8 +20,8 @@
sprite_sheets = list("Resomi" = 'icons/mob/species/resomi/ears.dmi')
-/obj/item/device/radio/headset/New()
- ..()
+/obj/item/device/radio/headset/Initialize()
+ . = ..()
internal_channels.Cut()
if(ks1type)
keyslot1 = new ks1type(src)
@@ -235,7 +235,7 @@
for(var/ch_name in channels)
- radio_controller.remove_object(src, radiochannels[ch_name])
+ SSradio.remove_object(src, radiochannels[ch_name])
secure_radio_connections[ch_name] = null
@@ -327,13 +327,13 @@
for (var/ch_name in channels)
- if(!radio_controller)
- sleep(30) // Waiting for the radio_controller to be created.
- if(!radio_controller)
+ if(!SSradio)
+ sleep(30) // Waiting for the SSradio to be created.
+ if(!SSradio)
src.name = "broken radio headset"
return
- secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
+ secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT)
if(setDescription)
setupRadioDescription()
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index c319d29b9d5..022bb36cfe5 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -44,23 +44,23 @@
frequency = ENT_FREQ
canhear_range = 4
-/obj/item/device/radio/intercom/New()
- ..()
+/obj/item/device/radio/intercom/Initialize()
+ . = ..()
power_interface = new(loc, src)
-/obj/item/device/radio/intercom/department/medbay/New()
- ..()
+/obj/item/device/radio/intercom/department/medbay/Initialize()
+ . = ..()
internal_channels = default_medbay_channels.Copy()
-/obj/item/device/radio/intercom/department/security/New()
- ..()
+/obj/item/device/radio/intercom/department/security/Initialize()
+ . = ..()
internal_channels = list(
num2text(PUB_FREQ) = list(),
num2text(SEC_I_FREQ) = list(access_security)
)
-/obj/item/device/radio/intercom/entertainment/New()
- ..()
+/obj/item/device/radio/intercom/entertainment/Initialize()
+ . = ..()
internal_channels = list(
num2text(PUB_FREQ) = list(),
num2text(ENT_FREQ) = list()
@@ -73,8 +73,8 @@
subspace_transmission = 1
syndie = 1
-/obj/item/device/radio/intercom/syndicate/New()
- ..()
+/obj/item/device/radio/intercom/syndicate/Initialize()
+ . = ..()
internal_channels[num2text(SYND_FREQ)] = list(access_syndicate)
/obj/item/device/radio/intercom/Destroy()
@@ -83,13 +83,11 @@
/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
src.add_fingerprint(user)
- spawn (0)
- attack_self(user)
+ INVOKE_ASYNC(src, /obj/item/.proc/attack_self, user)
/obj/item/device/radio/intercom/attack_hand(mob/user as mob)
src.add_fingerprint(user)
- spawn (0)
- attack_self(user)
+ INVOKE_ASYNC(src, /obj/item/.proc/attack_self, user)
/obj/item/device/radio/intercom/receive_range(freq, level)
if (!on)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 008e9baef29..5bb32b63c89 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -55,35 +55,33 @@ var/global/list/default_medbay_channels = list(
var/list/datum/radio_frequency/secure_radio_connections = new
proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
-
-/obj/item/device/radio/New()
- ..()
- wires = new(src)
- internal_channels = default_internal_channels.Copy()
- listening_objects += src
+ radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT)
/obj/item/device/radio/Destroy()
qdel(wires)
listening_objects -= src
wires = null
- if(radio_controller)
- radio_controller.remove_object(src, frequency)
+ if(SSradio)
+ SSradio.remove_object(src, frequency)
for (var/ch_name in channels)
- radio_controller.remove_object(src, radiochannels[ch_name])
+ SSradio.remove_object(src, radiochannels[ch_name])
return ..()
+/obj/item/device/radio/Initialize()
+ . = ..()
-/obj/item/device/radio/initialize()
+ wires = new(src)
+ internal_channels = default_internal_channels.Copy()
+ listening_objects += src
if(frequency < RADIO_LOW_FREQ || frequency > RADIO_HIGH_FREQ)
frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
set_frequency(frequency)
for (var/ch_name in channels)
- secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
+ secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT)
/obj/item/device/radio/attack_self(mob/user as mob)
user.set_machine(src)
@@ -609,7 +607,7 @@ var/global/list/default_medbay_channels = list(
for(var/ch_name in channels)
- radio_controller.remove_object(src, radiochannels[ch_name])
+ SSradio.remove_object(src, radiochannels[ch_name])
secure_radio_connections[ch_name] = null
@@ -661,13 +659,13 @@ var/global/list/default_medbay_channels = list(
src.syndie = 1
for (var/ch_name in src.channels)
- if(!radio_controller)
- sleep(30) // Waiting for the radio_controller to be created.
- if(!radio_controller)
+ if(!SSradio)
+ sleep(30) // Waiting for the SSradio to be created.
+ if(!SSradio)
src.name = "broken radio"
return
- secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
+ secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT)
return
@@ -737,14 +735,14 @@ var/global/list/default_medbay_channels = list(
ui.open()
/obj/item/device/radio/proc/config(op)
- if(radio_controller)
+ if(SSradio)
for (var/ch_name in channels)
- radio_controller.remove_object(src, radiochannels[ch_name])
+ SSradio.remove_object(src, radiochannels[ch_name])
secure_radio_connections = new
channels = op
- if(radio_controller)
+ if(SSradio)
for (var/ch_name in op)
- secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT)
+ secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT)
return
/obj/item/device/radio/off
@@ -760,6 +758,6 @@ var/global/list/default_medbay_channels = list(
/obj/item/device/radio/phone/medbay
frequency = MED_I_FREQ
-/obj/item/device/radio/phone/medbay/New()
- ..()
+/obj/item/device/radio/phone/medbay/Initialize()
+ . = ..()
internal_channels = default_medbay_channels.Copy()
diff --git a/code/game/objects/items/devices/radio_jammer.dm b/code/game/objects/items/devices/radio_jammer.dm
index ba6828d24a6..03cb77fffb9 100644
--- a/code/game/objects/items/devices/radio_jammer.dm
+++ b/code/game/objects/items/devices/radio_jammer.dm
@@ -28,7 +28,7 @@ proc/within_jamming_range(var/atom/test) // tests if an object is near a radio j
/obj/item/device/radiojammer/Destroy()
if (active)
active_radio_jammers -= src
- ..()
+ return ..()
/obj/item/device/radiojammer/attack_self()
@@ -91,7 +91,7 @@ proc/within_jamming_range(var/atom/test) // tests if an object is near a radio j
/obj/item/device/radiojammer/improvised/Destroy()
if (active)
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/device/radiojammer/improvised/process()
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 50627a048eb..dd9610b15a2 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -33,7 +33,7 @@ REAGENT SCANNER
user.show_message("Key: Suffocation/Toxin/Burns/Brute ", 1)
user.show_message("Body Temperature: ??? ", 1)
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!usr.IsAdvancedToolUser())
usr << "You don't have the dexterity to do this! "
return
user.visible_message("[user] has analyzed [M]'s vitals. ","You have analyzed [M]'s vitals. ")
@@ -212,7 +212,7 @@ REAGENT SCANNER
if (user.stat)
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!usr.IsAdvancedToolUser())
usr << "You don't have the dexterity to do this! "
return
@@ -252,7 +252,7 @@ REAGENT SCANNER
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
if (user.stat)
return
- if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!user.IsAdvancedToolUser())
user << "You don't have the dexterity to do this! "
return
if(reagents.total_volume)
@@ -303,7 +303,7 @@ REAGENT SCANNER
return
if (user.stat)
return
- if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!user.IsAdvancedToolUser())
user << "You don't have the dexterity to do this! "
return
if(!istype(O))
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index 95937c01185..040ce6a474f 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -17,6 +17,8 @@
origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2)
+ var/celltype = /obj/item/weapon/cell //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
+
matter = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 3500)
var/on = 0 //is it turned on?
var/cover_open = 0 //is the cover open?
@@ -27,11 +29,15 @@
//TODO: make it heat up the surroundings when not in space
-/obj/item/device/suit_cooling_unit/New()
- processing_objects |= src
-
- cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
- cell.loc = src
+/obj/item/device/suit_cooling_unit/Initialize()
+ . = ..()
+ START_PROCESSING(SSprocessing, src)
+ cell = new celltype(src)
+
+/obj/item/device/suit_cooling_unit/Destroy()
+ STOP_PROCESSING(SSprocessing, src)
+ QDEL_NULL(cell)
+ return ..()
// Checks whether the cooling unit is being worn on the back/suit slot.
// That way you can't carry it in your hands while it's running to cool yourself down.
@@ -163,7 +169,7 @@
return ..()
/obj/item/device/suit_cooling_unit/update_icon()
- overlays.Cut()
+ cut_overlays()
if (cover_open)
if (cell)
icon_state = "suitcooler1"
@@ -178,17 +184,17 @@
switch(round(cell.percent()))
if(86 to INFINITY)
- overlays.Add("battery-0")
+ add_overlay("battery-0")
if(69 to 85)
- overlays.Add("battery-1")
+ add_overlay("battery-1")
if(52 to 68)
- overlays.Add("battery-2")
+ add_overlay("battery-2")
if(35 to 51)
- overlays.Add("battery-3")
+ add_overlay("battery-3")
if(18 to 34)
- overlays.Add("battery-4")
+ add_overlay("battery-4")
if(-INFINITY to 17)
- overlays.Add("battery-5")
+ add_overlay("battery-5")
/obj/item/device/suit_cooling_unit/examine(mob/user)
if(!..(user, 1))
@@ -199,7 +205,7 @@
user << "It's switched on and running."
else if (istype(src.loc, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src.loc
- if (H.get_species()=="Industrial Frame")
+ if (H.get_species() == "Industrial Frame")
user << "It's switched on and running, connected to the cooling systems of [H]."
else
user << "It's switched on, but not attached to anything."
@@ -218,9 +224,4 @@
user << "It doesn't have a power cell installed."
/obj/item/device/suit_cooling_unit/improved //those should come with a better powercell
-
-/obj/item/device/suit_cooling_unit/improved/New()
- processing_objects |= src
-
- cell = new/obj/item/weapon/cell/high()
- cell.loc = src
+ celltype = /obj/item/weapon/cell/high
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 234afcd569e..89381b49a19 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -124,7 +124,7 @@
toggle = 1
/obj/item/device/transfer_valve/update_icon()
- overlays.Cut()
+ cut_overlays()
underlays = null
if(!tank_one && !tank_two && !attached_device)
@@ -133,13 +133,13 @@
icon_state = "valve"
if(tank_one)
- overlays += "[tank_one.icon_state]"
+ add_overlay("[tank_one.icon_state]")
if(tank_two)
var/icon/J = new(icon, icon_state = "[tank_two.icon_state]")
J.Shift(WEST, 13)
underlays += J
if(attached_device)
- overlays += "device"
+ add_overlay("device")
/obj/item/device/transfer_valve/proc/remove_tank(obj/item/weapon/tank/T)
if(tank_one == T)
diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm
index 30bd50c30ac..1ef3f45878f 100644
--- a/code/game/objects/items/glassjar.dm
+++ b/code/game/objects/items/glassjar.dm
@@ -34,7 +34,7 @@
var/obj/effect/spider/spiderling/S = A
user.visible_message("[user] scoops [S] into \the [src]. ", "You scoop [S] into \the [src]. ")
S.forceMove(src)
- processing_objects.Remove(S) // No growing inside jars
+ STOP_PROCESSING(SSprocessing, S) // No growing inside jars
contains = 3
update_icon()
return
@@ -59,7 +59,7 @@
for(var/obj/effect/spider/spiderling/S in src)
S.loc = user.loc
user.visible_message("[user] releases [S] from \the [src]. ", "You release [S] from \the [src]. ")
- processing_objects.Add(S) // They can grow after being let out though
+ START_PROCESSING(SSprocessing, S) // They can grow after being let out though
contains = 0
update_icon()
return
@@ -107,4 +107,4 @@
underlays += victim
name = "glass jar with [S]"
desc = "A small jar with [S] inside."
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm
index f08d5287958..d4fd9819663 100644
--- a/code/game/objects/items/paintkit.dm
+++ b/code/game/objects/items/paintkit.dm
@@ -136,7 +136,7 @@
new_name = "APLU \"Burning Chrome\""
new_desc = "A standard APLU exosuit with stylish blue flame decals."
new_icon = "ripley_flames_blue"
-
+
/obj/item/device/kit/paint/ripley/titan
name = "\"Titan's Fist\" APLU customisation kit"
new_name = "APLU \"Titan's Fist\""
@@ -149,6 +149,16 @@
new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
new_icon = "earth"
+/obj/item/device/kit/paint/ripley/random
+ name = "quantum ripley kit"
+
+/obj/item/device/kit/paint/ripley/random/New()
+ ..()
+ var/list/ripleys = (typesof(/obj/item/device/kit/paint/ripley) - typesof(/obj/item/device/kit/paint/ripley/fluff))
+ var/build_path = pick(ripleys)
+ new build_path(src.loc)
+ qdel(src)
+
// Durand kits.
/obj/item/device/kit/paint/durand
name = "\"Classic\" Durand customisation kit"
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 1ccd2f88172..5b31e19853e 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -82,24 +82,24 @@
var/obj/item/robot_parts/head/head = null
var/created_name = ""
-/obj/item/robot_parts/robot_suit/New()
- ..()
+/obj/item/robot_parts/robot_suit/Initialize()
+ . = ..()
src.updateicon()
/obj/item/robot_parts/robot_suit/proc/updateicon()
- src.overlays.Cut()
+ cut_overlays()
if(src.l_arm)
- src.overlays += "l_arm+o"
+ add_overlay("l_arm+o")
if(src.r_arm)
- src.overlays += "r_arm+o"
+ add_overlay("r_arm+o")
if(src.chest)
- src.overlays += "chest+o"
+ add_overlay("chest+o")
if(src.l_leg)
- src.overlays += "l_leg+o"
+ add_overlay("l_leg+o")
if(src.r_leg)
- src.overlays += "r_leg+o"
+ add_overlay("r_leg+o")
if(src.head)
- src.overlays += "head+o"
+ add_overlay("head+o")
/obj/item/robot_parts/robot_suit/proc/check_completion()
if(src.l_arm && src.r_arm)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index ac46f2beaa9..731cfbc3799 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -160,6 +160,7 @@
return 0
R.emagged = 1
+ R.fakeemagged = 1
return 1
/obj/item/borg/upgrade/combat
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index f1c9aa2d145..6b2e6451f57 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -16,7 +16,7 @@
T.pinned_target = null
T.density = 1
break
- ..() // delete target
+ return ..() // delete target
Move()
..()
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 3d6a5c96261..568ad40f33a 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -1,3 +1,14 @@
+var/global/list/datum/stack_recipe/rod_recipes = list ( \
+ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("mine track", /obj/structure/track, 3, time = 10, one_per_turf = 1, on_floor = 1), \
+ new/datum/stack_recipe("cane", /obj/item/weapon/cane, 1, time = 6), \
+ new/datum/stack_recipe("crowbar", /obj/item/weapon/crowbar, 1, time = 6), \
+ new/datum/stack_recipe("screwdriver", /obj/item/weapon/screwdriver, 1, time = 12), \
+ new/datum/stack_recipe("wrench", /obj/item/weapon/wrench, 1, time = 6), \
+ new/datum/stack_recipe("spade", /obj/item/weapon/shovel/spade, 2, time = 12), \
+ new/datum/stack_recipe("bolt", /obj/item/weapon/arrow, 1, time = 6)
+ )
+
/obj/item/stack/rods
name = "metal rod"
desc = "Some rods. Can be used for building, or something."
@@ -22,6 +33,19 @@
charge_costs = list(500)
stacktype = /obj/item/stack/rods
+/obj/item/stack/rods/New(var/loc, var/amount=null)
+ ..()
+
+ recipes = rod_recipes
+ update_icon()
+
+/obj/item/stack/rods/update_icon()
+ var/amount = get_amount()
+ if((amount <= 5) && (amount > 0))
+ icon_state = "rods-[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))
@@ -44,36 +68,3 @@
user.put_in_hands(new_item)
return
..()
-
-
-/obj/item/stack/rods/attack_self(mob/user as mob)
- src.add_fingerprint(user)
-
- if(!istype(user.loc,/turf)) return 0
-
- if (locate(/obj/structure/grille, usr.loc))
- for(var/obj/structure/grille/G in usr.loc)
- if (G.destroyed)
- G.health = 10
- G.density = 1
- G.destroyed = 0
- G.icon_state = "grille"
- use(1)
- else
- return 1
-
- else if(!in_use)
- if(get_amount() < 2)
- user << "You need at least two rods to do this. "
- return
- usr << "Assembling grille... "
- in_use = 1
- if (!do_after(usr, 10))
- in_use = 0
- return
- var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
- usr << "You assemble a grille "
- in_use = 0
- F.add_fingerprint(usr)
- use(2)
- return
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index f2e501ca09f..ff38d4385fb 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -189,6 +189,7 @@
if(usr)
usr.remove_from_mob(src)
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
+ update_icon()
return 1
else
if(get_amount() < used)
@@ -205,6 +206,7 @@
return 0
else
amount += extra
+ update_icon()
return 1
else if(!synths || synths.len < uses_charge)
return 0
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 0abd300bac1..eb16f8da307 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -77,9 +77,7 @@
for(var/atom/A in get_turf(hit_atom))
src.reagents.touch(A)
src.icon_state = "burst"
- spawn(5)
- if(src)
- qdel(src)
+ QDEL_IN(src, 5)
return
/obj/item/toy/balloon/update_icon()
@@ -184,7 +182,7 @@
afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
if (flag)
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!usr.IsAdvancedToolUser())
usr << "\red You don't have the dexterity to do this!"
return
src.add_fingerprint(user)
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index ec1e5dbf414..266b2115684 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -34,7 +34,7 @@ AI MODULES
usr << "You haven't selected an AI to transmit laws to!"
return
- if(ticker && ticker.mode && ticker.mode.name == "blob")
+ if(SSticker.mode && SSticker.mode.name == "blob")
usr << "Law uploads have been disabled by [company_name]!"
return
diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm
index 421bb55a6a5..9a0e0b2eaed 100644
--- a/code/game/objects/items/weapons/candle.dm
+++ b/code/game/objects/items/weapons/candle.dm
@@ -49,8 +49,7 @@
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
set_light(CANDLE_LUM)
- processing_objects.Add(src)
-
+ START_PROCESSING(SSprocessing, src)
/obj/item/weapon/flame/candle/process()
if(!lit)
@@ -60,6 +59,8 @@
new/obj/item/trash/candle(src.loc)
if(istype(src.loc, /mob))
src.dropped()
+
+ STOP_PROCESSING(SSprocessing, src)
qdel(src)
update_icon()
if(istype(loc, /turf)) //start a fire if possible
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 8dfbc83145f..60663c8596c 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -114,6 +114,7 @@ var/const/NO_EMAG_ACT = -50
var/sex = "\[UNSET\]"
var/icon/front
var/icon/side
+ var/mining_points //miners gotta eat
//alt titles are handled a bit weirdly in order to unobtrusively integrate into existing ID system
var/assignment = null //can be alt title or the actual job
@@ -182,6 +183,8 @@ var/const/NO_EMAG_ACT = -50
dat += text("Fingerprint: [] \n", fingerprint_hash)
dat += text("Blood Type: [] \n", blood_type)
dat += text("DNA Hash: [] \n", dna_hash)
+ if(mining_points)
+ dat += text("Ore Redemption Points: [] \n", mining_points)
if(front && side)
dat +="Photo: "
dat += "
"
@@ -279,6 +282,8 @@ var/const/NO_EMAG_ACT = -50
usr << "The blood type on the card is [blood_type]."
usr << "The DNA hash on the card is [dna_hash]."
usr << "The fingerprint hash on the card is [fingerprint_hash]."
+ if(mining_points)
+ usr << "A ticker indicates the card has [mining_points] ore redemption points available."
return
/obj/item/weapon/card/id/silver
@@ -322,6 +327,17 @@ var/const/NO_EMAG_ACT = -50
access = get_all_station_access() + access_synth
..()
+/obj/item/weapon/card/id/synthetic/minedrone
+ name = "\improper Minedrone ID"
+ desc = "Access module for NanoTrasen Minedrones"
+ icon_state = "id-robot"
+ item_state = "tdgreen"
+ assignment = "Minedrone"
+
+/obj/item/weapon/card/id/synthetic/minedrone/New()
+ access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station)
+ ..()
+
/obj/item/weapon/card/id/centcom
name = "\improper CentCom. ID"
desc = "An ID straight from Cent. Com."
@@ -340,7 +356,7 @@ var/const/NO_EMAG_ACT = -50
obj/item/weapon/card/id/centcom/ERT/New()
..()
access = get_all_accesses() + get_centcom_access("Emergency Response Team")
-
+
/obj/item/weapon/card/id/all_access
name = "\improper Administrator's spare ID"
desc = "The spare ID of the Lord of Lords himself."
diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm
index a8c51ba7710..c537e6f73da 100644
--- a/code/game/objects/items/weapons/cards_ids_syndicate.dm
+++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm
@@ -193,7 +193,7 @@
CS.item_state = initial(ID.item_state)
CS.name = initial(ID.name) + " - " + initial(ID.icon_state)
id_card_states += CS
- id_card_states = dd_sortedObjectList(id_card_states)
+ sortTim(id_card_states, /proc/cmp_cardstate, FALSE)
return id_card_states
@@ -201,6 +201,3 @@
var/name
var/icon_state
var/item_state
-
-/datum/card_state/dd_SortValue()
- return name
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 48998682eab..269d2247dea 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -95,8 +95,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/weldermes = "USER lights NAME with FLAME"
var/ignitermes = "USER lights NAME with FLAME"
-/obj/item/clothing/mask/smokable/New()
- ..()
+/obj/item/clothing/mask/smokable/Initialize()
+ . = ..()
flags |= NOREACT // so it doesn't react until you light it
create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15
@@ -290,8 +290,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
slot_flags = SLOT_EARS
throwforce = 1
-/obj/item/weapon/cigbutt/New()
- ..()
+/obj/item/weapon/cigbutt/Initialize()
+ . = ..()
pixel_x = rand(-10,10)
pixel_y = rand(-10,10)
transform = turn(transform,rand(0,360))
@@ -326,8 +326,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
weldermes = "USER recklessly lights NAME with FLAME. "
ignitermes = "USER fiddles with FLAME, and manages to light their NAME with the power of science. "
-/obj/item/clothing/mask/smokable/pipe/New()
- ..()
+/obj/item/clothing/mask/smokable/pipe/Initialize()
+ . = ..()
name = "empty [initial(name)]"
/obj/item/clothing/mask/smokable/pipe/light(var/flavor_text = "[usr] lights the [name].")
diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
index 3153adab03e..39ec0ee0dff 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
@@ -167,10 +167,10 @@
build_path = /obj/machinery/computer/area_atmos
origin_tech = list(TECH_DATA = 2)
-/obj/item/weapon/circuitboard/prison_shuttle
+/*/obj/item/weapon/circuitboard/prison_shuttle
name = T_BOARD("prison shuttle control console")
build_path = /obj/machinery/computer/prison_shuttle
- origin_tech = list(TECH_DATA = 2)
+ origin_tech = list(TECH_DATA = 2)*/
/obj/item/weapon/circuitboard/rcon_console
name = T_BOARD("RCON remote control console")
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
index ab3d272b1f5..1ee61fc7633 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
@@ -80,4 +80,4 @@ obj/item/weapon/circuitboard/ntnet_relay
board_type = "machine"
origin_tech = list(TECH_DATA = 4)
req_components = list(
- "/obj/item/stack/cable_coil" = 15)
+ "/obj/item/stack/cable_coil" = 15)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/trashcompactor.dm b/code/game/objects/items/weapons/circuitboards/machinery/trashcompactor.dm
new file mode 100644
index 00000000000..cb2a4fd28b9
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/trashcompactor.dm
@@ -0,0 +1,13 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/crusher
+ name = T_BOARD("crusher")
+ build_path = "/obj/machinery/crusher_base"
+ board_type = "machine"
+ origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 1, TECH_MAGNET = 1, TECH_MATERIALS = 3)
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 4,
+ "/obj/item/weapon/stock_parts/manipulator" = 3,
+ "/obj/item/weapon/reagent_containers/glass/beaker" = 3)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/cloaking_device.dm b/code/game/objects/items/weapons/cloaking_device.dm
index 221bcc47f97..fd9808589f5 100644
--- a/code/game/objects/items/weapons/cloaking_device.dm
+++ b/code/game/objects/items/weapons/cloaking_device.dm
@@ -30,7 +30,7 @@
cell = new /obj/item/weapon/cell/high(src)
/obj/item/weapon/cloaking_device/Destroy()
- ..()
+ . = ..()
cloaking_devices -= src
@@ -189,4 +189,4 @@
if (. == 1)
var/obj/item/weapon/cloaking_device/C = source
if (!C.active)
- return validity_fail("Cloak is inactive!")
\ No newline at end of file
+ return validity_fail("Cloak is inactive!")
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 09213c8c501..e42470b9420 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -68,7 +68,7 @@
spawn(timer*10)
explode(get_turf(target))
-/obj/item/weapon/plastique/proc/explode(var/location)
+/obj/item/weapon/plastique/proc/explode(var/turf/location)
if(!target)
target = get_atom_on_turf(src)
if(!target)
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 4cdf35254d0..6e288a58dca 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -116,7 +116,7 @@
spawn(0)
if(!src || !reagents.total_volume) return
- var/obj/effect/effect/water/W = getFromPool(/obj/effect/effect/water, get_turf(src))
+ var/obj/effect/effect/water/W = new(get_turf(src))
var/turf/my_target
if(a <= the_targets.len)
my_target = the_targets[a]
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 731c2e34602..351b21b0cb3 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -29,8 +29,8 @@
qdel(igniter)
if(ptank)
qdel(ptank)
- ..()
- return
+
+ return ..()
/obj/item/weapon/flamethrower/process()
@@ -48,13 +48,13 @@
/obj/item/weapon/flamethrower/update_icon()
- overlays.Cut()
+ cut_overlays()
if(igniter)
- overlays += "+igniter[status]"
+ add_overlay("+igniter[status]")
if(ptank)
- overlays += "+ptank"
+ add_overlay("+ptank")
if(lit)
- overlays += "+lit"
+ add_overlay("+lit")
item_state = "flamethrower_1"
else
item_state = "flamethrower_0"
@@ -82,7 +82,7 @@
if(ptank)
ptank.loc = T
ptank = null
- getFromPool(/obj/item/stack/rods, T)
+ new /obj/item/stack/rods(T)
qdel(src)
return
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 984cde9d208..361071771cc 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -181,9 +181,9 @@
C.throw_mode_off()
invisibility = INVISIBILITY_MAXIMUM //Why am i doing this?
- spawn(50) //To make sure all reagents can work
- qdel(src) //correctly before deleting the grenade.
-
+ //To make sure all reagents can work
+ //correctly before deleting the grenade.
+ QDEL_IN(src, 50)
/obj/item/weapon/grenade/chem_grenade/large
name = "large chem grenade"
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 87aae87fb62..98b177f2f2b 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -143,8 +143,7 @@
spawn(0)
new /obj/item/weapon/grenade/flashbang/clusterbang/segment(A)//Creates a 'segment' that launches a few more flashbangs
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(1)
- qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/grenade/flashbang/clusterbang/segment
desc = "A smaller segment of a clusterbang. Better run."
@@ -161,8 +160,7 @@
var/temploc = src.loc//Saves the current location to know where to step away from
walk_away(src,temploc,stepdist)//I must go, my people need me
var/dettime = rand(15,60)
- spawn(dettime)
- prime()
+ addtimer(CALLBACK(src, .proc/prime), dettime)
..()
/obj/item/weapon/grenade/flashbang/clusterbang/segment/prime()
@@ -176,18 +174,16 @@
new /obj/item/weapon/grenade/flashbang/cluster(A)
playsound(src.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(1)
- qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/grenade/flashbang/cluster/New()//Same concept as the segments, so that all of the parts don't become reliant on the clusterbang
- spawn(0)
- icon_state = "flashbang_active"
- active = 1
- banglet = 1
- var/stepdist = rand(1,3)
- var/temploc = src.loc
- walk_away(src,temploc,stepdist)
- var/dettime = rand(15,60)
- spawn(dettime)
- prime()
- ..()
+ set waitfor = FALSE
+ icon_state = "flashbang_active"
+ active = 1
+ banglet = 1
+ var/stepdist = rand(1,3)
+ var/temploc = src.loc
+ walk_away(src,temploc,stepdist)
+ var/dettime = rand(15,60)
+ addtimer(CALLBACK(src, .proc/prime), dettime)
+ ..()
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index f354cb607f1..8661cea3238 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -10,7 +10,7 @@
/obj/item/weapon/grenade/smokebomb/New()
..()
- src.smoke = getFromPool(/datum/effect/effect/system/smoke_spread/bad)
+ src.smoke = new /datum/effect/effect/system/smoke_spread/bad
src.smoke.attach(src)
/obj/item/weapon/grenade/smokebomb/Destroy()
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index ecd9a8a610f..38113fbb659 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -14,43 +14,44 @@
var/allow_reagents = 0
var/malfunction = 0
- proc/trigger(emote, source as mob)
- return
+/obj/item/weapon/implant/proc/trigger(emote, source as mob)
+ return
- proc/activate()
- return
+/obj/item/weapon/implant/proc/activate()
+ return
// What does the implant do upon injection?
// return 0 if the implant fails (ex. Revhead and loyalty implant.)
// return 1 if the implant succeeds (ex. Nonrevhead and loyalty implant.)
- proc/implanted(var/mob/source)
- return 1
+/obj/item/weapon/implant/proc/implanted(var/mob/source)
+ return 1
- proc/get_data()
- return "No information available"
+/obj/item/weapon/implant/proc/get_data()
+ return "No information available"
- proc/hear(message, source as mob)
- return
+/obj/item/weapon/implant/proc/hear(message, source as mob)
+ return
- proc/islegal()
- return 0
+/obj/item/weapon/implant/proc/islegal()
+ return 0
- proc/meltdown() //breaks it down, making implant unrecongizible
- imp_in << "You feel something melting inside [part ? "your [part.name]" : "you"]! "
- if (part)
- part.take_damage(burn = 15, used_weapon = "Electronics meltdown")
- else
- var/mob/living/M = imp_in
- M.apply_damage(15,BURN)
- name = "melted implant"
- desc = "Charred circuit in melted plastic case. Wonder what that used to be..."
- icon_state = "implant_melted"
- malfunction = MALFUNCTION_PERMANENT
+/obj/item/weapon/implant/proc/meltdown() //breaks it down, making implant unrecongizible
+ imp_in << "You feel something melting inside [part ? "your [part.name]" : "you"]! "
+ if (part)
+ part.take_damage(burn = 15, used_weapon = "Electronics meltdown")
+ else
+ var/mob/living/M = imp_in
+ M.apply_damage(15,BURN)
+ name = "melted implant"
+ desc = "Charred circuit in melted plastic case. Wonder what that used to be..."
+ icon_state = "implant_melted"
+ malfunction = MALFUNCTION_PERMANENT
- Destroy()
- if(part)
- part.implants.Remove(src)
- return ..()
+/obj/item/weapon/implant/Destroy()
+ if(part)
+ part.implants.Remove(src)
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
/obj/item/weapon/implant/tracking
name = "tracking implant"
@@ -58,8 +59,8 @@
var/id = 1.0
- get_data()
- var/dat = {"Implant Specifications:
+/obj/item/weapon/implant/tracking/get_data()
+ . = {"Implant Specifications:
Name: Tracking Beacon
Life: 10 minutes after death of host
Important Notes: None
@@ -73,23 +74,22 @@ disintegrate into bio-safe elements.
Integrity: Gradient creates slight risk of being overcharged and frying the
circuitry. As a result neurotoxins can cause massive damage.
Implant Specifics: "}
- return dat
- emp_act(severity)
- if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning
- return
- malfunction = MALFUNCTION_TEMPORARY
+/obj/item/weapon/implant/tracking/emp_act(severity)
+ if (malfunction) //no, dawg, you can't malfunction while you are malfunctioning
+ return
+ malfunction = MALFUNCTION_TEMPORARY
- var/delay = 20
- switch(severity)
- if(1)
- if(prob(60))
- meltdown()
- if(2)
- delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time
+ var/delay = 20
+ switch(severity)
+ if(1)
+ if(prob(60))
+ meltdown()
+ if(2)
+ delay = rand(5*60*10,15*60*10) //from 5 to 15 minutes of free time
- spawn(delay)
- malfunction--
+ spawn(delay)
+ malfunction--
/obj/item/weapon/implant/dexplosive
@@ -97,8 +97,8 @@ Implant Specifics: "}
desc = "And boom goes the weasel."
icon_state = "implant_evil"
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/dexplosive/get_data()
+ . = {"
Implant Specifications:
Name: Robust Corp RX-78 Employee Management Implant
Life: Activates upon death.
@@ -108,23 +108,19 @@ Implant Specifics: "}
Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
Special Features: Explodes
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
- return dat
+/obj/item/weapon/implant/dexplosive/trigger(emote, source as mob)
+ if(emote == "deathgasp")
+ src.activate("death")
- trigger(emote, source as mob)
- if(emote == "deathgasp")
- src.activate("death")
- return
+/obj/item/weapon/implant/dexplosive/activate(var/cause)
+ if((!cause) || (!src.imp_in)) return 0
+ explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see.
+ if(src.imp_in)
+ src.imp_in.gib()
-
- activate(var/cause)
- if((!cause) || (!src.imp_in)) return 0
- explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see.
- if(src.imp_in)
- src.imp_in.gib()
-
- islegal()
- return 0
+/obj/item/weapon/implant/dexplosive/islegal()
+ return 0
//BS12 Explosive
/obj/item/weapon/implant/explosive
@@ -134,8 +130,8 @@ Implant Specifics: "}
var/phrase = "supercalifragilisticexpialidocious"
icon_state = "implant_evil"
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/explosive/get_data()
+ . = {"
Implant Specifications:
Name: Robust Corp RX-78 Intimidation Class Implant
Life: Activates upon codephrase.
@@ -145,113 +141,110 @@ Implant Specifics: "}
Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
Special Features: Explodes
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
- return dat
- hear_talk(mob/M as mob, msg)
- hear(msg)
+/obj/item/weapon/implant/explosive/hear_talk(mob/M as mob, msg)
+ hear(msg)
+
+/obj/item/weapon/implant/explosive/hear(var/msg)
+ var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
+ msg = replace_characters(msg, replacechars)
+ if(findtext(msg,phrase))
+ activate()
+ qdel(src)
+
+/obj/item/weapon/implant/explosive/activate()
+ if (malfunction == MALFUNCTION_PERMANENT)
return
- hear(var/msg)
- var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
- msg = replace_characters(msg, replacechars)
- if(findtext(msg,phrase))
- activate()
- qdel(src)
+ var/need_gib = null
+ if(istype(imp_in, /mob/))
+ var/mob/T = imp_in
+ message_admins("Explosive implant triggered in [T] ([T.key]). (JMP ) ")
+ log_game("Explosive implant triggered in [T] ([T.key]).")
+ need_gib = 1
- activate()
- if (malfunction == MALFUNCTION_PERMANENT)
- return
-
-
- var/need_gib = null
- if(istype(imp_in, /mob/))
- var/mob/T = imp_in
- message_admins("Explosive implant triggered in [T] ([T.key]). (JMP ) ")
- log_game("Explosive implant triggered in [T] ([T.key]).",ckey=key_name(T))
- need_gib = 1
-
- if(ishuman(imp_in))
- if (elevel == "Localized Limb")
- if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste.
- imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]! ")
- playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3)
- sleep(25)
- if (istype(part,/obj/item/organ/external/chest) || \
- istype(part,/obj/item/organ/external/groin) || \
- istype(part,/obj/item/organ/external/head))
- part.createwound(BRUISE, 60) //mangle them instead
- explosion(get_turf(imp_in), -1, -1, 2, 3)
- qdel(src)
- else
- explosion(get_turf(imp_in), -1, -1, 2, 3)
- part.droplimb(0,DROPLIMB_BLUNT)
- qdel(src)
- if (elevel == "Destroy Body")
- explosion(get_turf(T), -1, 0, 1, 6)
- T.gib()
- if (elevel == "Full Explosion")
- explosion(get_turf(T), 0, 1, 3, 6)
- T.gib()
-
- else
- explosion(get_turf(imp_in), 0, 1, 3, 6)
-
- if(need_gib)
- imp_in.gib()
-
- var/turf/t = get_turf(imp_in)
-
- if(t)
- t.hotspot_expose(3500,125)
-
- implanted(mob/source as mob)
- elevel = alert("What sort of explosion would you prefer?", "Implant Intent", "Localized Limb", "Destroy Body", "Full Explosion")
- phrase = input("Choose activation phrase:") as text
- var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
- phrase = replace_characters(phrase, replacechars)
- usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0)
- usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate."
- return 1
-
- emp_act(severity)
- if (malfunction)
- return
- malfunction = MALFUNCTION_TEMPORARY
- switch (severity)
- if (2.0) //Weak EMP will make implant tear limbs off.
- if (prob(50))
- small_boom()
- if (1.0) //strong EMP will melt implant either making it go off, or disarming it
- if (prob(70))
- if (prob(50))
- small_boom()
- else
- if (prob(50))
- activate() //50% chance of bye bye
- else
- meltdown() //50% chance of implant disarming
- spawn (20)
- malfunction--
-
- islegal()
- return 0
-
- proc/small_boom()
- if (ishuman(imp_in) && part)
- imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]! ")
- playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3)
- spawn(25)
- if (ishuman(imp_in) && part)
- //No tearing off these parts since it's pretty much killing
- //and you can't replace groins
+ if(ishuman(imp_in))
+ if (elevel == "Localized Limb")
+ if(part) //For some reason, small_boom() didn't work. So have this bit of working copypaste.
+ imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]! ")
+ playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3)
+ sleep(25)
if (istype(part,/obj/item/organ/external/chest) || \
istype(part,/obj/item/organ/external/groin) || \
istype(part,/obj/item/organ/external/head))
part.createwound(BRUISE, 60) //mangle them instead
+ explosion(get_turf(imp_in), -1, -1, 2, 3)
+ qdel(src)
else
+ explosion(get_turf(imp_in), -1, -1, 2, 3)
part.droplimb(0,DROPLIMB_BLUNT)
- explosion(get_turf(imp_in), -1, -1, 2, 3)
- qdel(src)
+ qdel(src)
+ if (elevel == "Destroy Body")
+ explosion(get_turf(T), -1, 0, 1, 6)
+ T.gib()
+ if (elevel == "Full Explosion")
+ explosion(get_turf(T), 0, 1, 3, 6)
+ T.gib()
+
+ else
+ explosion(get_turf(imp_in), 0, 1, 3, 6)
+
+ if(need_gib)
+ imp_in.gib()
+
+ var/turf/t = get_turf(imp_in)
+
+ if(t)
+ t.hotspot_expose(3500,125)
+
+/obj/item/weapon/implant/explosive/implanted(mob/source as mob)
+ elevel = alert("What sort of explosion would you prefer?", "Implant Intent", "Localized Limb", "Destroy Body", "Full Explosion")
+ phrase = input("Choose activation phrase:") as text
+ var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
+ phrase = replace_characters(phrase, replacechars)
+ usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0)
+ usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate."
+ return 1
+
+/obj/item/weapon/implant/explosive/emp_act(severity)
+ if (malfunction)
+ return
+ malfunction = MALFUNCTION_TEMPORARY
+ switch (severity)
+ if (2.0) //Weak EMP will make implant tear limbs off.
+ if (prob(50))
+ small_boom()
+ if (1.0) //strong EMP will melt implant either making it go off, or disarming it
+ if (prob(70))
+ if (prob(50))
+ small_boom()
+ else
+ if (prob(50))
+ activate() //50% chance of bye bye
+ else
+ meltdown() //50% chance of implant disarming
+ spawn (20)
+ malfunction--
+
+/obj/item/weapon/implant/explosive/islegal()
+ return 0
+
+/obj/item/weapon/implant/explosive/proc/small_boom()
+ if (ishuman(imp_in) && part)
+ imp_in.visible_message("Something beeps inside [imp_in][part ? "'s [part.name]" : ""]! ")
+ playsound(loc, 'sound/items/countdown.ogg', 75, 1, -3)
+ spawn(25)
+ if (ishuman(imp_in) && part)
+ //No tearing off these parts since it's pretty much killing
+ //and you can't replace groins
+ if (istype(part,/obj/item/organ/external/chest) || \
+ istype(part,/obj/item/organ/external/groin) || \
+ istype(part,/obj/item/organ/external/head))
+ part.createwound(BRUISE, 60) //mangle them instead
+ else
+ part.droplimb(0,DROPLIMB_BLUNT)
+ explosion(get_turf(imp_in), -1, -1, 2, 3)
+ qdel(src)
/obj/item/weapon/implant/explosive/New()
..()
@@ -267,8 +260,8 @@ Implant Specifics: "}
desc = "Injects things."
allow_reagents = 1
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/chem/get_data()
+ . = {"
Implant Specifications:
Name: Robust Corp MJ-420 Prisoner Management Implant
Life: Deactivates upon death but remains within the body.
@@ -283,55 +276,53 @@ the implant releases the chemicals directly into the blood stream.
Can only be loaded while still in its original case.
Integrity: Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,
the implant may become unstable and either pre-maturely inject the subject or simply break."}
- return dat
- New()
- ..()
- var/datum/reagents/R = new/datum/reagents(50)
- reagents = R
- R.my_atom = src
+/obj/item/weapon/implant/chem/New()
+ ..()
+ var/datum/reagents/R = new/datum/reagents(50)
+ reagents = R
+ R.my_atom = src
- trigger(emote, source as mob)
- if(emote == "deathgasp")
- src.activate(src.reagents.total_volume)
+/obj/item/weapon/implant/chem/trigger(emote, source as mob)
+ if(emote == "deathgasp")
+ src.activate(src.reagents.total_volume)
+ return
+
+
+/obj/item/weapon/implant/chem/activate(var/cause)
+ if((!cause) || (!src.imp_in)) return 0
+ var/mob/living/carbon/R = src.imp_in
+ src.reagents.trans_to_mob(R, cause, CHEM_BLOOD)
+ R << "You hear a faint *beep*."
+ if(!src.reagents.total_volume)
+ R << "You hear a faint click from your chest."
+ spawn(0)
+ qdel(src)
+
+/obj/item/weapon/implant/chem/emp_act(severity)
+ if (malfunction)
return
+ malfunction = MALFUNCTION_TEMPORARY
+ switch(severity)
+ if(1)
+ if(prob(60))
+ activate(20)
+ if(2)
+ if(prob(30))
+ activate(5)
- activate(var/cause)
- if((!cause) || (!src.imp_in)) return 0
- var/mob/living/carbon/R = src.imp_in
- src.reagents.trans_to_mob(R, cause, CHEM_BLOOD)
- R << "You hear a faint *beep*."
- if(!src.reagents.total_volume)
- R << "You hear a faint click from your chest."
- spawn(0)
- qdel(src)
- return
-
- emp_act(severity)
- if (malfunction)
- return
- malfunction = MALFUNCTION_TEMPORARY
-
- switch(severity)
- if(1)
- if(prob(60))
- activate(20)
- if(2)
- if(prob(30))
- activate(5)
-
- spawn(20)
- malfunction--
+ spawn(20)
+ malfunction--
/obj/item/weapon/implant/loyalty
name = "loyalty implant"
desc = "Makes you loyal or such."
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/loyalty/get_data()
+ . = {"
Implant Specifications:
Name: [company_name] Employee Management Implant
Life: Ten years.
@@ -341,41 +332,37 @@ the implant may become unstable and either pre-maturely inject the subject or si
Function: Contains a small pod of nanobots that manipulate the host's mental functions.
Special Features: Will prevent and cure most forms of brainwashing.
Integrity: Implant will last so long as the nanobots are inside the bloodstream."}
- return dat
+/obj/item/weapon/implant/loyalty/implanted(mob/M)
+ if(!istype(M, /mob/living/carbon/human)) return 0
+ var/mob/living/carbon/human/H = M
+ var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role)
+ if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE))
+ H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!")
+ return 0
+ else
+ clear_antag_roles(H.mind, 1)
+ H << "You feel a surge of loyalty towards [company_name]. "
+ return 1
- implanted(mob/M)
- if(!istype(M, /mob/living/carbon/human)) return 0
- var/mob/living/carbon/human/H = M
- var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role)
- if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE))
- H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!")
- return 0
- else
- clear_antag_roles(H.mind, 1)
- H << "You feel a surge of loyalty towards [company_name]. "
- return 1
+/obj/item/weapon/implant/loyalty/emp_act(severity)
+ if (malfunction)
+ return
+ malfunction = MALFUNCTION_TEMPORARY
- emp_act(severity)
- if (malfunction)
- return
- malfunction = MALFUNCTION_TEMPORARY
+ activate("emp")
+ if(severity == 1)
+ if(prob(50))
+ meltdown()
+ else if (prob(50))
+ malfunction = MALFUNCTION_PERMANENT
+ return
+ spawn(20)
+ malfunction--
- activate("emp")
- if(severity == 1)
- if(prob(50))
- meltdown()
- else if (prob(50))
- malfunction = MALFUNCTION_PERMANENT
- processing_objects.Remove(src)
- return
- spawn(20)
- malfunction--
-
- implanted(mob/source as mob)
- //mobname = source.real_name
- processing_objects.Add(src)
- return 1
+/obj/item/weapon/implant/loyalty/implanted(mob/source as mob)
+ //mobname = source.real_name
+ return 1
/obj/item/weapon/implant/loyalty/ipc
name = "loyalty chip"
@@ -393,8 +380,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
desc = "Removes all stuns and knockdowns."
var/uses
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/adrenalin/get_data()
+ . = {"
Implant Specifications:
Name: Cybersun Industries Adrenalin Implant
Life: Five days.
@@ -404,25 +391,23 @@ the implant may become unstable and either pre-maturely inject the subject or si
Function: Contains nanobots to stimulate body to mass-produce Adrenalin.
Special Features: Will prevent and cure most forms of brainwashing.
Integrity: Implant can only be used three times before the nanobots are depleted."}
- return dat
- trigger(emote, mob/source as mob)
- if (src.uses < 1) return 0
- if (emote == "pale")
- src.uses--
- source << "You feel a sudden surge of energy! "
- source.SetStunned(0)
- source.SetWeakened(0)
- source.SetParalysis(0)
-
- return
+/obj/item/weapon/implant/adrenalin/trigger(emote, mob/source as mob)
+ if (src.uses < 1)
+ return 0
+ if (emote == "pale")
+ src.uses--
+ source << "You feel a sudden surge of energy! "
+ source.SetStunned(0)
+ source.SetWeakened(0)
+ source.SetParalysis(0)
- implanted(mob/source)
- source.mind.store_memory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", 0, 0)
- source << "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate."
- return 1
+/obj/item/weapon/implant/adrenalin/implanted(mob/source)
+ source.mind.store_memory("A implant can be activated by using the pale emote, say *pale to attempt to activate.", 0, 0)
+ source << "The implanted freedom implant can be activated by using the pale emote, say *pale to attempt to activate."
+ return 1
/obj/item/weapon/implant/death_alarm
@@ -430,8 +415,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
desc = "An alarm which monitors host vital signs and transmits a radio message upon death."
var/mobname = "Will Robinson"
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/death_alarm/get_data()
+ . = {"
Implant Specifications:
Name: [company_name] \"Profit Margin\" Class Employee Lifesign Sensor
Life: Activates upon death.
@@ -441,61 +426,62 @@ the implant may become unstable and either pre-maturely inject the subject or si
Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
Special Features: Alerts crew to crewmember death.
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
- return dat
- process()
- if (!implanted) return
- var/mob/M = imp_in
+/obj/item/weapon/implant/death_alarm/process()
+ if (!implanted)
+ return
+ var/mob/M = imp_in
- if(isnull(M)) // If the mob got gibbed
- activate()
- else if(M.stat == 2)
- activate("death")
+ if(QDELETED(M)) // If the mob got gibbed
+ M = null
+ activate()
+ else if(M.stat == 2)
+ activate("death")
- activate(var/cause)
- var/mob/M = imp_in
- var/area/t = get_area(M)
- switch (cause)
- if("death")
- var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
- if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
- //give the syndies a bit of stealth
- a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm")
- else
- a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
- qdel(a)
- processing_objects.Remove(src)
- if ("emp")
- var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
- var/name = prob(50) ? t.name : pick(teleportlocs)
- a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
- qdel(a)
+/obj/item/weapon/implant/death_alarm/activate(var/cause)
+ var/mob/M = imp_in
+ var/area/t = get_area(M)
+ switch (cause)
+ if("death")
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
+ if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
+ //give the syndies a bit of stealth
+ a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm")
else
- var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
- a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
- qdel(a)
- processing_objects.Remove(src)
+ a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm")
+ qdel(a)
+ STOP_PROCESSING(SSprocessing, src)
+ if ("emp")
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
+ var/name = prob(50) ? t.name : pick(teleportlocs)
+ a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm")
+ qdel(a)
+ else
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
+ a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm")
+ qdel(a)
+ STOP_PROCESSING(SSprocessing, src)
- emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this
- if (malfunction) //so I'm just going to add a meltdown chance here
- return
- malfunction = MALFUNCTION_TEMPORARY
+/obj/item/weapon/implant/death_alarm/emp_act(severity) //for some reason alarms stop going off in case they are emp'd, even without this
+ if (malfunction) //so I'm just going to add a meltdown chance here
+ return
+ malfunction = MALFUNCTION_TEMPORARY
- activate("emp") //let's shout that this dude is dead
- if(severity == 1)
- if(prob(40)) //small chance of obvious meltdown
- meltdown()
- else if (prob(60)) //but more likely it will just quietly die
- malfunction = MALFUNCTION_PERMANENT
- processing_objects.Remove(src)
+ activate("emp") //let's shout that this dude is dead
+ if(severity == 1)
+ if(prob(40)) //small chance of obvious meltdown
+ meltdown()
+ else if (prob(60)) //but more likely it will just quietly die
+ malfunction = MALFUNCTION_PERMANENT
+ STOP_PROCESSING(SSprocessing, src)
- spawn(20)
- malfunction--
+ spawn(20)
+ malfunction--
- implanted(mob/source as mob)
- mobname = source.real_name
- processing_objects.Add(src)
- return 1
+/obj/item/weapon/implant/death_alarm/implanted(mob/source as mob)
+ mobname = source.real_name
+ START_PROCESSING(SSprocessing, src)
+ return 1
/obj/item/weapon/implant/compressed
name = "compressed matter implant"
@@ -504,8 +490,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/activation_emote = "sigh"
var/obj/item/scanned = null
- get_data()
- var/dat = {"
+/obj/item/weapon/implant/compressed/get_data()
+ . = {"
Implant Specifications:
Name: [company_name] \"Profit Margin\" Class Employee Lifesign Sensor
Life: Activates upon death.
@@ -515,30 +501,29 @@ the implant may become unstable and either pre-maturely inject the subject or si
Function: Contains a compact radio signaler that triggers when the host's lifesigns cease.
Special Features: Alerts crew to crewmember death.
Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
- return dat
- trigger(emote, mob/source as mob)
- if (src.scanned == null)
- return 0
-
- if (emote == src.activation_emote)
- source << "The air glows as \the [src.scanned.name] uncompresses."
- activate()
-
- activate()
- var/turf/t = get_turf(src)
- if (imp_in)
- imp_in.put_in_hands(scanned)
- else
- scanned.loc = t
- qdel(src)
-
- implanted(mob/source as mob)
- src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
- if (source.mind)
- source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
- source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
- return 1
-
- islegal()
+/obj/item/weapon/implant/compressed/trigger(emote, mob/source as mob)
+ if (src.scanned == null)
return 0
+
+ if (emote == src.activation_emote)
+ source << "The air glows as \the [src.scanned.name] uncompresses."
+ activate()
+
+/obj/item/weapon/implant/compressed/activate()
+ var/turf/t = get_turf(src)
+ if (imp_in)
+ imp_in.put_in_hands(scanned)
+ else
+ scanned.loc = t
+ qdel(src)
+
+/obj/item/weapon/implant/compressed/implanted(mob/source as mob)
+ src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
+ if (source.mind)
+ source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
+ source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
+ return 1
+
+/obj/item/weapon/implant/compressed/islegal()
+ return 0
diff --git a/code/game/objects/items/weapons/material/material_weapons.dm b/code/game/objects/items/weapons/material/material_weapons.dm
index fc9ac7eb32d..3abb839e637 100644
--- a/code/game/objects/items/weapons/material/material_weapons.dm
+++ b/code/game/objects/items/weapons/material/material_weapons.dm
@@ -62,7 +62,7 @@
/obj/item/weapon/material/Destroy()
processing_objects -= src
- ..()
+ return ..()
/obj/item/weapon/material/apply_hit_effect()
..()
@@ -112,4 +112,4 @@ Commenting this out pending rebalancing of radiation based on small objects.
TemperatureAct(150)
else
return ..()
-*/
\ No newline at end of file
+*/
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 2d59c848e4b..6717eca4809 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -26,6 +26,7 @@
var/base_icon
var/base_name
var/unwielded_force_divisor = 0.25
+ action_button_name = "Wield two-handed weapon"
/obj/item/weapon/material/twohanded/proc/unwield()
wielded = 0
@@ -118,7 +119,7 @@
if (src.wieldsound)
playsound(src.loc, wieldsound, 50, 1)
- var/obj/item/weapon/material/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
+ var/obj/item/weapon/material/twohanded/offhand/O = new /obj/item/weapon/material/twohanded/offhand(user) ////Let's reserve his other hand~
O.name = "[base_name] - offhand"
O.desc = "Your second grip on the [base_name]."
user.put_in_inactive_hand(O)
@@ -130,6 +131,17 @@
return
+/obj/item/weapon/material/twohanded/ui_action_click()
+ if(src in usr)
+ attack_self(usr)
+
+/obj/item/weapon/material/twohanded/verb/wield_twohanded()
+ set name = "Wield two-handed weapon"
+ set category = "Object"
+ set src in usr
+
+ attack_self(usr)
+
///////////OFFHAND///////////////
/obj/item/weapon/material/twohanded/offhand
w_class = 5
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 45d9aef2c6c..9e3f3192e1e 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -12,15 +12,6 @@
var/base_block_chance = 25
var/shield_power = 100
var/can_block_bullets = 0
- var/datum/effect_system/sparks/spark_system
-
-/obj/item/weapon/melee/energy/New()
- spark_system = bind_spark(src, 5)
- ..()
-
-/obj/item/weapon/melee/energy/Destroy()
- QDEL_NULL(spark_system)
- return ..()
/obj/item/weapon/melee/energy/proc/activate(mob/living/user)
anchored = 1
@@ -68,7 +59,7 @@
if(active && default_parry_check(user, attacker, damage_source) && prob(50))
user.visible_message("\The [user] parries [attack_text] with \the [src]! ")
- spark_system.queue()
+ spark(src, 5)
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
return 1
else
@@ -84,7 +75,7 @@
if(check_shield_arc(user, bad_arc, damage_source, attacker))
if(prob(base_block_chance))
- spark_system.queue()
+ spark(src, 5)
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
shield_power -= round(damage/4)
@@ -298,18 +289,18 @@
/obj/item/weapon/melee/energy/blade/Destroy()
processing_objects -= src
- ..()
+ return ..()
/obj/item/weapon/melee/energy/blade/deactivate(mob/living/user)
if(!active)
return
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
user.drop_from_inventory(src)
- spawn(1) if(src) qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/melee/energy/blade/dropped()
- spawn(1) if(src) qdel(src)
+ QDEL_IN(src, 1)
/obj/item/weapon/melee/energy/blade/process()
if(!creator || loc != creator || (creator.l_hand != src && creator.r_hand != src))
@@ -324,4 +315,4 @@
host.pinned -= src
host.embedded -= src
host.drop_from_inventory(src)
- spawn(1) if(src) qdel(src)
+ QDEL_IN(src, 1)
diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index f17d7dadcbe..c896f995533 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -129,11 +129,11 @@ var/list/tape_roll_applications = list()
if(tape_roll_applications[F] & direction) // hazard_overlay in F.overlays wouldn't work.
user.visible_message("[user] uses the adhesive of \the [src] to remove area markings from \the [F].", "You use the adhesive of \the [src] to remove area markings from \the [F].")
- F.overlays -= hazard_overlay
+ F.cut_overlay(hazard_overlay, TRUE)
tape_roll_applications[F] &= ~direction
else
user.visible_message("[user] applied \the [src] on \the [F] to create area markings.", "You apply \the [src] on \the [F] to create area markings.")
- F.overlays |= hazard_overlay
+ F.add_overlay(hazard_overlay, TRUE)
tape_roll_applications[F] |= direction
return
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 0914e272e79..2fe400c7bd7 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -140,7 +140,7 @@
/obj/item/taperoll/police,
/obj/item/weapon/material/sword/trench,
/obj/item/weapon/shield/energy,
- /obj/item/weapon/shield/riot/tact
+ /obj/item/weapon/shield/riot/tact
)
/obj/item/weapon/storage/belt/soulstone
@@ -231,7 +231,7 @@
/obj/item/weapon/soap,
/obj/item/weapon/storage/bag/trash
)
-
+
/obj/item/weapon/storage/belt/wands
name = "wand belt"
desc = "A belt designed to hold various rods of power."
@@ -243,7 +243,7 @@
can_hold = list(
/obj/item/weapon/gun/energy/wand
)
-
+
/obj/item/weapon/storage/belt/wands/full/New()
..()
new /obj/item/weapon/gun/energy/wand/fire(src)
@@ -251,3 +251,39 @@
new /obj/item/weapon/gun/energy/wand/teleport(src)
new /obj/item/weapon/gun/energy/wand/force(src)
new /obj/item/weapon/gun/energy/wand/animation(src)
+
+/obj/item/weapon/storage/belt/mining
+ name = "explorer's webbing"
+ desc = "A versatile chest rig, cherished by miners and hunters alike."
+ icon_state = "explorer"
+ item_state = "explorer"
+ storage_slots = 9
+ w_class = 4
+ max_w_class = 4 //Pickaxes are big.
+ can_hold = list(/obj/item/weapon/crowbar,
+ /obj/item/weapon/screwdriver,
+ /obj/item/weapon/weldingtool,
+ /obj/item/weapon/wirecutters,
+ /obj/item/weapon/wrench,
+ /obj/item/device/flashlight,
+ /obj/item/stack/cable_coil,
+ /obj/item/device/analyzer,
+ /obj/item/weapon/extinguisher/mini,
+ /obj/item/device/radio,
+ /obj/item/clothing/gloves,
+ /obj/item/clothing/glasses/material,
+ /obj/item/weapon/pickaxe,
+ /obj/item/stack/material/animalhide,
+ /obj/item/weapon/flame/lighter,
+ /obj/item/weapon/storage/fancy/cigarettes,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle,
+ /obj/item/stack/medical,
+ /obj/item/weapon/reagent_containers/hypospray,
+ /obj/item/device/gps,
+ /obj/item/weapon/storage/bag/ore,
+ /obj/item/weapon/reagent_containers/pill,
+ /obj/item/weapon/storage/pill_bottle,
+ /obj/item/weapon/ore,
+ /obj/item/weapon/reagent_containers/food/drinks,
+ /obj/item/weapon/storage/bag/plants
+ )
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 97e8825f562..86229a59332 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -812,3 +812,13 @@
var/type = pick(snacks)
new type(src)
..()
+
+/obj/item/weapon/storage/box/stims
+ name = "stimpack value kit"
+ desc = "A box with several stimpack medipens for the economical miner."
+ icon_state = "syringe"
+
+/obj/item/weapon/storage/box/stims/New()
+ ..()
+ for(var/i in 1 to 4)
+ new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 649cd666a0f..0436d47366c 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -105,10 +105,10 @@
update_icon()
/obj/item/weapon/storage/fancy/crayons/update_icon()
- overlays = list() //resets list
- overlays += image('icons/obj/crayons.dmi',"crayonbox")
+ cut_overlays()
+ add_overlay("crayonbox")
for(var/obj/item/weapon/pen/crayon/crayon in contents)
- overlays += image('icons/obj/crayons.dmi',crayon.colourName)
+ add_overlay("[crayon.colourName]")
/obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/pen/crayon))
@@ -268,14 +268,13 @@
/obj/item/weapon/storage/lockbox/vials/update_icon(var/itemremoved = 0)
var/total_contents = src.contents.len - itemremoved
src.icon_state = "vialbox[total_contents]"
- src.overlays.Cut()
+ cut_overlays()
if (!broken)
- overlays += image(icon, src, "led[locked]")
+ add_overlay("led[locked]")
if(locked)
- overlays += image(icon, src, "cover")
+ add_overlay("cover")
else
- overlays += image(icon, src, "ledb")
- return
+ add_overlay("ledb")
/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 4bb3ba9a3a2..51d00cf1db5 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -150,6 +150,22 @@
make_exact_fit()
+/obj/item/weapon/storage/firstaid/brute
+ name = "brute aid kit"
+ desc = "A NanoTrasen care package for moderately injured miners."
+ icon_state = "brute"
+
+/obj/item/weapon/storage/firstaid/brute/New()
+ ..()
+ if (empty) return
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ return
+
/*
* Pill Bottles
*/
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 1d62acc20a6..2e61c86f077 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -12,7 +12,7 @@
/obj/item/weapon/storage/internal/Destroy()
master_item = null
- ..()
+ return ..()
/obj/item/weapon/storage/internal/attack_hand()
return //make sure this is never picked up
diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm
index e024e6ca5c8..2e02e4232e7 100644
--- a/code/game/objects/items/weapons/storage/misc.dm
+++ b/code/game/objects/items/weapons/storage/misc.dm
@@ -27,10 +27,10 @@
return
/obj/item/weapon/storage/box/donut/update_icon()
- overlays.Cut()
+ cut_overlays()
var/i = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents)
- overlays += image('icons/obj/food.dmi', "[i][D.overlay_state]")
+ add_overlay("[i][D.overlay_state]")
i++
/obj/item/weapon/storage/box/donut/empty
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index ae5ba344a8a..20fe0c4c73e 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -102,15 +102,15 @@
src.l_set = 1
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
src.locked = 0
- src.overlays = null
- overlays += image('icons/obj/storage.dmi', icon_opened)
+ cut_overlays()
+ add_overlay(icon_opened)
src.code = null
else
src.code = "ERROR"
else
if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort))
src.locked = 1
- src.overlays = null
+ cut_overlays()
src.code = null
src.close(usr)
else
@@ -127,10 +127,10 @@
/obj/item/weapon/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback)
if(!emagged)
emagged = 1
- src.overlays += image('icons/obj/storage.dmi', icon_sparking)
+ add_overlay(icon_sparking)
sleep(6)
- src.overlays = null
- overlays += image('icons/obj/storage.dmi', icon_locking)
+ cut_overlays()
+ add_overlay(icon_locking)
locked = 0
user << (feedback ? feedback : "You short out the lock of \the [src].")
return 1
@@ -188,6 +188,7 @@
attack_hand(mob/user as mob)
return attack_self(user)
-/obj/item/weapon/storage/secure/safe/HoS/New()
+/*obj/item/weapon/storage/secure/safe/HoS/New()
..()
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
+*/
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index c09aef55f4f..f904bb6fa76 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -40,7 +40,13 @@
qdel(src.stored_continue)
qdel(src.stored_end)
qdel(closer)
- ..()
+ while (contents.len)
+ var/thing = contents[contents.len]
+ contents.len--
+
+ qdel(thing)
+
+ return ..()
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
@@ -506,6 +512,14 @@
for(var/obj/item/I in contents)
remove_from_storage(I, T)
+ CHECK_TICK
+
+/obj/item/weapon/storage/proc/post_init()
+ var/total_storage_space = 0
+ for(var/obj/item/I in contents)
+ total_storage_space += I.get_storage_cost()
+ max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents
+
/obj/item/weapon/storage/New()
..()
if(allow_quick_empty)
@@ -518,32 +532,28 @@
else
verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode
- spawn(5)
- var/total_storage_space = 0
- for(var/obj/item/I in contents)
- total_storage_space += I.get_storage_cost()
- max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents
+ addtimer(CALLBACK(src, .proc/post_init), 5)
- src.boxes = new /obj/screen/storage( )
+ src.boxes = new /obj/screen/storage
src.boxes.name = "storage"
src.boxes.master = src
src.boxes.icon_state = "block"
src.boxes.screen_loc = "7,7 to 10,8"
src.boxes.layer = 19
- src.storage_start = new /obj/screen/storage( )
+ src.storage_start = new /obj/screen/storage
src.storage_start.name = "storage"
src.storage_start.master = src
src.storage_start.icon_state = "storage_start"
src.storage_start.screen_loc = "7,7 to 10,8"
src.storage_start.layer = 19
- src.storage_continue = new /obj/screen/storage( )
+ src.storage_continue = new /obj/screen/storage
src.storage_continue.name = "storage"
src.storage_continue.master = src
src.storage_continue.icon_state = "storage_continue"
src.storage_continue.screen_loc = "7,7 to 10,8"
src.storage_continue.layer = 19
- src.storage_end = new /obj/screen/storage( )
+ src.storage_end = new /obj/screen/storage
src.storage_end.name = "storage"
src.storage_end.master = src
src.storage_end.icon_state = "storage_end"
@@ -560,7 +570,7 @@
src.stored_end.icon_state = "stored_end"
src.stored_end.layer = 19
- src.closer = new /obj/screen/close( )
+ src.closer = new /obj/screen/close
src.closer.master = src
src.closer.icon_state = "x"
src.closer.layer = 20
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 0265f40d5ea..00699d16b43 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -16,17 +16,17 @@
attack_verb = list("robusted")
var/stunhit = 0
-/obj/item/weapon/storage/toolbox/initialize()
- spawn(3)
- update_force()
+/obj/item/weapon/storage/toolbox/Initialize(mapload)
+ . = ..()
+ update_force()
/obj/item/weapon/storage/toolbox/emergency
name = "emergency toolbox"
icon_state = "red"
item_state = "toolbox_red"
- New()
- ..()
+ Initialize()
+ . = ..()
new /obj/item/weapon/crowbar/red(src)
new /obj/item/weapon/extinguisher/mini(src)
if(prob(50))
@@ -40,8 +40,8 @@
icon_state = "blue"
item_state = "toolbox_blue"
- New()
- ..()
+ Initialize()
+ . = ..()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
@@ -54,8 +54,8 @@
icon_state = "yellow"
item_state = "toolbox_yellow"
- New()
- ..()
+ Initialize()
+ . = ..()
var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wirecutters(src)
@@ -75,8 +75,8 @@
origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
force = 7.0
- New()
- ..()
+ Initialize()
+ . = ..()
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 2573dfac30c..c497bffb268 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -79,13 +79,13 @@
add_fingerprint(user)
if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) //updates blood overlay, if any
- overlays.Remove(blood_overlay)
+ cut_overlay(blood_overlay, TRUE)
var/icon/I = new /icon(src.icon, src.icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD)
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY)
blood_overlay = image(I)
blood_overlay.color = blood_color
- overlays += blood_overlay
+ add_overlay(blood_overlay, TRUE)
update_icon()
return
diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm
index 5af573ba877..ce99f0010c1 100644
--- a/code/game/objects/items/weapons/tanks/jetpack.dm
+++ b/code/game/objects/items/weapons/tanks/jetpack.dm
@@ -22,7 +22,7 @@
/obj/item/weapon/tank/jetpack/Destroy()
qdel(ion_trail)
- ..()
+ return ..()
/obj/item/weapon/tank/jetpack/examine(mob/user)
. = ..()
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index f85bb1a53db..8e53a6840b8 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -2,8 +2,6 @@
#define TANK_DEFAULT_RELEASE_PRESSURE 24
#define TANK_IDEAL_PRESSURE 1015 //Arbitrary.
-var/list/global/tank_gauge_cache = list()
-
/obj/item/weapon/tank
name = "tank"
icon = 'icons/obj/tank.dmi'
@@ -37,7 +35,7 @@ var/list/global/tank_gauge_cache = list()
src.air_contents = new /datum/gas_mixture()
src.air_contents.volume = volume //liters
src.air_contents.temperature = T20C
- processing_objects.Add(src)
+ START_PROCESSING(SSprocessing, src)
update_gauge()
return
@@ -45,13 +43,13 @@ var/list/global/tank_gauge_cache = list()
if(air_contents)
qdel(air_contents)
- processing_objects.Remove(src)
+ STOP_PROCESSING(SSprocessing, src)
if(istype(loc, /obj/item/device/transfer_valve))
var/obj/item/device/transfer_valve/TTV = loc
TTV.remove_tank(src)
- ..()
+ return ..()
/obj/item/weapon/tank/examine(mob/user)
. = ..(user, 0)
@@ -243,11 +241,9 @@ var/list/global/tank_gauge_cache = list()
return
last_gauge_pressure = gauge_pressure
- overlays.Cut()
- var/indicator = "[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]"
- if(!tank_gauge_cache[indicator])
- tank_gauge_cache[indicator] = image(icon, indicator)
- overlays += tank_gauge_cache[indicator]
+ cut_overlays()
+ // SSoverlay will handle icon caching.
+ add_overlay("[gauge_icon][(gauge_pressure == -1) ? "overload" : gauge_pressure]")
/obj/item/weapon/tank/proc/check_status()
//Handle exploding, leaking, and rupturing of the tank
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index fdad2423fcb..cec486a3c6e 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -21,8 +21,8 @@
item_state = "electronic"
throw_speed = 4
throw_range = 20
- origin_tech = list(TECH_MAGNET = 1)
- matter = list(DEFAULT_WALL_MATERIAL = 400)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 400)
/obj/item/weapon/locator/attack_self(mob/user as mob)
user.set_machine(src)
@@ -48,7 +48,7 @@ Frequency:
if (usr.stat || usr.restrained())
return
var/turf/current_location = get_turf(usr)//What turf is the user on?
- if(!current_location||current_location.z==2)//If turf was not found or they're on z level 2.
+ if(!current_location||current_location.z==1)//If turf was not found or they're on z level 1.
usr << "The [src] is malfunctioning."
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
@@ -60,7 +60,7 @@ Frequency:
if (sr)
src.temp += "Located Beacons: "
- for(var/obj/item/device/radio/beacon/W in world)
+ for(var/obj/item/device/radio/beacon/W in teleportbeacons)
if (W.frequency == src.frequency)
var/turf/tr = get_turf(W)
if (tr.z == sr.z && tr)
@@ -132,8 +132,8 @@ Frequency:
w_class = 2.0
throw_speed = 3
throw_range = 5
- origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3)
- matter = list(DEFAULT_WALL_MATERIAL = 10000)
+ origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 10000)
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
var/turf/current_location = get_turf(user)//What turf is the user on?
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 409da4cea99..3b575d0ec3d 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -135,7 +135,7 @@
name = "welding tool"
desc = "A welding tool with a built-in fuel tank, designed for welding and cutting metal."
icon = 'icons/obj/tools/welding.dmi'
- icon_state = "welder"
+ icon_state = "welder_off"
flags = CONDUCT
slot_flags = SLOT_BELT
var/base_iconstate = "welder"//These are given an _on/_off suffix before being used
@@ -166,8 +166,8 @@
desc = "A welding tool with an extended-capacity built-in fuel tank, standard issue for engineers."
max_fuel = 40
matter = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 60)
+ base_iconstate = "ind_welder_off"
origin_tech = list(TECH_ENGINEERING = 2)
- base_iconstate = "ind_welder"
/obj/item/weapon/weldingtool/hugetank
@@ -176,8 +176,8 @@
max_fuel = 80
w_class = 2.0
matter = list(DEFAULT_WALL_MATERIAL = 200, "glass" = 120)
+ base_iconstate = "adv_welder_off"
origin_tech = list(TECH_ENGINEERING = 3)
- base_iconstate = "adv_welder"
//The Experimental Welding Tool!
@@ -187,8 +187,8 @@
max_fuel = 40
w_class = 2.0
matter = list(DEFAULT_WALL_MATERIAL = 100, "glass" = 120)
+ base_iconstate = "exp_welder_off"
origin_tech = list(TECH_ENGINEERING = 4, TECH_BIO = 4)
- base_iconstate = "exp_welder"
base_itemstate = "exp_welder"
var/last_gen = 0
@@ -197,21 +197,15 @@
//This is roughly half the rate that fuel is lost if the welder is left idle, so it you carelessly leave it on it will still run out
-
-
-
-
-
-
//Welding tool functionality here
-/obj/item/weapon/weldingtool/New()
+/obj/item/weapon/weldingtool/Initialize()
+ . = ..()
// var/random_fuel = min(rand(10,20),max_fuel)
var/datum/reagents/R = new/datum/reagents(max_fuel)
reagents = R
R.my_atom = src
R.add_reagent("fuel", max_fuel)
update_icon()
- ..()
/obj/item/weapon/weldingtool/update_icon()
..()
@@ -315,7 +309,7 @@
return
if(S.brute_dam > ROBOLIMB_SELF_REPAIR_CAP)
user << "The damage is far too severe to patch over externally. "
- return
+ return
if (src.remove_fuel(0))
// Use a bit of fuel and repair
S.heal_damage(15,0,0,1)
@@ -493,7 +487,7 @@
/obj/item/weapon/weldingtool/Destroy()
processing_objects.Remove(src)//Stop processing when destroyed regardless of conditions
- ..()
+ return ..()
//Make sure the experimental tool only stops processing when its turned off AND full
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index bf54ca2c7ce..7b5c54a8621 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -16,12 +16,12 @@
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.do_attack_animation(M)
- if(user.spell_list.len)
+ if(LAZYLEN(user.spell_list))
user.silence_spells(300) //30 seconds
user << "You've been silenced! "
return
- if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!user.IsAdvancedToolUser())
user << "You don't have the dexterity to do this! "
return
@@ -138,7 +138,7 @@
M << "You are free of the net!"
processing_objects -= src
- ..()
+ return ..()
/obj/effect/energy_net/proc/healthcheck()
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index ec1e8d717fd..2aa8cfd22a6 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -25,6 +25,7 @@
var/equip_slot = 0
/obj/Destroy()
processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/Topic(href, href_list, var/datum/topic_state/state = default_state)
@@ -73,10 +74,6 @@
/obj/item/proc/is_used_on(obj/O, mob/user)
-/obj/proc/process()
- processing_objects.Remove(src)
- return 0
-
/obj/assume_air(datum/gas_mixture/giver)
if(loc)
return loc.assume_air(giver)
@@ -140,9 +137,6 @@
/obj/proc/interact(mob/user)
return
-/obj/proc/update_icon()
- return
-
/mob/proc/unset_machine()
src.machine = null
@@ -182,9 +176,12 @@
/obj/proc/tesla_act(var/power)
being_shocked = 1
var/power_bounced = power / 2
- tesla_zap(src, 5, power_bounced)
- spawn(10)
- being_shocked = 0
+ tesla_zap(src, 3, power_bounced)
+ addtimer(CALLBACK(src, .proc/reset_shocked), 10)
+
+/obj/proc/reset_shocked()
+ being_shocked = 0
+
/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
return
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 94d5607a51f..966262d8107 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -10,13 +10,14 @@
// creates a new object and deletes itself
-/obj/random/initialize()
- ..()
+/obj/random/Initialize()
+ . = ..()
if (!prob(spawn_nothing_percentage))
var/item = spawn_item()
if (has_postspawn && item)
post_spawn(item)
- qdel(src)
+
+ return INITIALIZE_HINT_QDEL
// this function should return a specific item to spawn
/obj/random/proc/item_to_spawn()
@@ -118,8 +119,8 @@
icon_state = "cell"
// spawn_nothing_percentage = 50
problist = list(
- /obj/random/powercell = 3,
- /obj/random/technology_scanner = 2,
+ /obj/random/powercell = 3,
+ /obj/random/technology_scanner = 2,
/obj/item/weapon/packageWrap = 1,
/obj/random/bomb_supply = 2,
/obj/item/weapon/extinguisher = 1,
@@ -392,12 +393,12 @@
/obj/item/clothing/suit/space/void/medical = 2.3,
/obj/item/clothing/suit/space/void/security = 1,
/obj/item/clothing/suit/space/void/atmos = 1.5,
- /obj/item/clothing/suit/space/void/merc = 0.5,
+ /obj/item/clothing/suit/space/void/merc = 0.5,
/obj/item/clothing/suit/space/void/captain = 0.3
)
has_postspawn = TRUE
-/obj/random/voidsuit/New(loc, _damaged = 0)
+/obj/random/voidsuit/Initialize(mapload, _damaged = 0)
damaged = _damaged
..(loc)
@@ -413,7 +414,7 @@
/obj/random/vendor
name = "random vendor"
- var/depleted = 0
+ var/depleted = 0
problist = list(
/obj/machinery/vending/boozeomat = 1,
/obj/machinery/vending/coffee = 1,
@@ -436,9 +437,9 @@
)
has_postspawn = TRUE
-/obj/random/vendor/New(loc, _depleted = 0)
+/obj/random/vendor/Initialize(mapload, _depleted = 0)
depleted = _depleted
- ..(loc)
+ . = ..()
/obj/random/vendor/post_spawn(obj/machinery/vending/V)
if (!depleted)
@@ -456,7 +457,7 @@
V.products[content] *= multiplier
if (V.products[content] < 1 && V.products[content] > 0) //But we'll usually have at least 1 left
V.products[content] = 0
-
+
// Clamp to an integer so we don't get 0.78 of a screwdriver.
V.products[content] = round(V.products[content])
@@ -760,6 +761,57 @@
/obj/item/clothing/mask/ai = 0.5
)
+/obj/random/junk
+ name = "random trash"
+ desc = "This is toss."
+ icon = 'icons/obj/trash.dmi'
+ icon_state = "koisbar"
+ spawn_nothing_percentage = 5
+ problist = list(
+ /obj/item/trash/koisbar = 0.5,
+ /obj/item/trash/raisins = 1,
+ /obj/item/trash/candy = 1,
+ /obj/item/trash/cheesie = 2,
+ /obj/item/trash/chips = 0.75,
+ /obj/item/trash/popcorn = 0.75,
+ /obj/item/trash/sosjerky = 0.5,
+ /obj/item/trash/syndi_cakes = 0.25,
+ /obj/item/trash/waffles = 0.75,
+ /obj/item/trash/plate = 0.75,
+ /obj/item/trash/snack_bowl = 0.75,
+ /obj/item/trash/pistachios = 0.75,
+ /obj/item/trash/semki = 0.5,
+ /obj/item/trash/tray = 0.75,
+ /obj/item/trash/candle = 0.75,
+ /obj/item/trash/liquidfood = 0.75,
+ /obj/item/trash/tastybread= 0.75,
+ /obj/item/trash/meatsnack = 0.5,
+ /obj/item/trash/maps = 0.5,
+ /obj/effect/decal/cleanable/ash = 1.5,
+ /obj/effect/decal/cleanable/dirt = 2,
+ /obj/effect/decal/cleanable/flour = 1,
+ /obj/effect/decal/cleanable/greenglow = 1,
+ /obj/effect/decal/cleanable/molten_item = 1,
+ /obj/effect/decal/cleanable/vomit = 2,
+ /obj/effect/decal/cleanable/generic = 2,
+ /obj/effect/decal/cleanable/liquid_fuel = 0.5,
+ /obj/effect/decal/cleanable/mucus = 1.5,
+ /obj/effect/decal/cleanable/blood/drip = 1.5,
+ /obj/item/weapon/storage/box = 1,
+ /obj/item/weapon/material/shard = 1,
+ /obj/item/weapon/material/shard/shrapnel = 1,
+ /obj/item/weapon/broken_bottle = 1,
+ /obj/item/stack/material/cardboard = 1,
+ /obj/item/stack/rods = 1,
+ /obj/item/weapon/corncob = 1,
+ /obj/item/weapon/paper/crumpled = 1,
+ /obj/item/inflatable/torn = 1,
+ /obj/item/ammo_casing/c45/rubber = 0.5,
+ /obj/item/ammo_casing/c9mm/rubber = 0.5,
+ /obj/item/ammo_casing/c45/flash = 0.5,
+ /obj/item/ammo_casing/shotgun/beanbag = 0.5
+ )
+
//Sometimes the chef will have spare oil in storage.
//Sometimes they wont, and will need to order it from cargo
//Variety is the spice of life!
@@ -769,6 +821,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "oiltank"
spawn_nothing_percentage = 50
+
spawnlist = list(
/obj/structure/reagent_dispensers/cookingoil
)
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 5faa4c70530..6210ebe09d5 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -10,7 +10,9 @@
/obj/structure/Destroy()
if(parts)
new parts(loc)
- ..()
+ if (smooth)
+ queue_smooth_neighbors(src)
+ return ..()
/obj/structure/attack_hand(mob/user)
if(breakable)
@@ -44,14 +46,14 @@
if(3.0)
return
-/obj/structure/New()
- ..()
+/obj/structure/Initialize()
+ . = ..()
updateVisibility(src)
if(climbable)
verbs += /obj/structure/proc/climb_on
-
-/obj/structure/Destroy()
- ..()
+ if (smooth)
+ queue_smooth(src)
+ queue_smooth_neighbors(src)
/obj/structure/proc/climb_on()
diff --git a/code/game/objects/structures/alien/egg.dm b/code/game/objects/structures/alien/egg.dm
index 5d32f9685f6..876ce7366b3 100644
--- a/code/game/objects/structures/alien/egg.dm
+++ b/code/game/objects/structures/alien/egg.dm
@@ -14,7 +14,7 @@
/obj/structure/alien/egg/Destroy()
processing_objects -= src
- ..()
+ return ..()
/obj/structure/alien/egg/CanUseTopic(var/mob/user)
return isobserver(user) ? STATUS_INTERACTIVE : STATUS_CLOSE
diff --git a/code/game/objects/structures/alien/node.dm b/code/game/objects/structures/alien/node.dm
index 15a9062862f..adc3aacdbfc 100644
--- a/code/game/objects/structures/alien/node.dm
+++ b/code/game/objects/structures/alien/node.dm
@@ -11,9 +11,9 @@
/obj/structure/alien/node/Destroy()
processing_objects -= src
- ..()
+ return ..()
/obj/structure/alien/node/process()
if(locate(/obj/effect/plant) in loc)
return
- new /obj/effect/plant(get_turf(src), plant_controller.seeds["xenomorph"])
+ new /obj/effect/plant(get_turf(src), SSplants.seeds["xenomorph"])
diff --git a/code/game/objects/structures/alien/resin.dm b/code/game/objects/structures/alien/resin.dm
index 05f6bca0e72..422db71c4c7 100644
--- a/code/game/objects/structures/alien/resin.dm
+++ b/code/game/objects/structures/alien/resin.dm
@@ -28,7 +28,7 @@
/obj/structure/alien/resin/Destroy()
var/turf/T = get_turf(src)
T.thermal_conductivity = initial(T.thermal_conductivity)
- ..()
+ return ..()
/obj/structure/alien/resin/attack_hand(var/mob/user)
if (HULK in user.mutations)
@@ -47,4 +47,4 @@
// Todo check attack datums.
health -= rand(5,10)
healthcheck()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/banner.dm b/code/game/objects/structures/banner.dm
new file mode 100644
index 00000000000..86439c9a69f
--- /dev/null
+++ b/code/game/objects/structures/banner.dm
@@ -0,0 +1,42 @@
+/obj/structure/banner
+ name = "corporate banner"
+ desc = "A blue flag emblazoned with a golden logo of Nanotrasen hanging from a wooden stand."
+ anchored = 1
+ density = 1
+ layer = 9
+ icon = 'icons/obj/banner.dmi'
+ icon_state = "banner_down"
+
+/obj/structure/banner/verb/toggle()
+ set src in oview(1)
+ set category = "Object"
+ set name = "Toggle Banner"
+
+ if(!usr.canmove || usr.stat || usr.restrained())
+ return 0
+
+ switch(icon_state)
+ if("banner_down")
+ src.icon_state = "banner_up"
+ usr << "You roll up the cloth."
+ if("banner_up")
+ src.icon_state = "banner_down"
+ usr << "You let the cloth hang loose."
+ else
+ usr << "You feel slightly dumber."
+ return
+
+ src.update_icon()
+
+/obj/structure/banner/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/weapon/wrench))
+ switch(anchored)
+ if(0)
+ anchored = 1
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ user.visible_message("[user.name] secures [src.name] to the floor.", "You secure [src.name] to the floor.", "You hear a ratchet")
+ if(1)
+ anchored = 0
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
+ user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", "You unsecure [src.name] from the floor.", "You hear a ratchet")
+ return
\ No newline at end of file
diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm
index 625af060db7..2b91f87b020 100644
--- a/code/game/objects/structures/coathanger.dm
+++ b/code/game/objects/structures/coathanger.dm
@@ -43,10 +43,10 @@
return 1
/obj/structure/coatrack/update_icon()
- overlays.Cut()
+ cut_overlays()
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat))
- overlays += image(icon, icon_state = "coat_lab")
+ add_overlay("coat_lab")
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo))
- overlays += image(icon, icon_state = "coat_cmo")
+ add_overlay("coat_cmo")
if (istype(coat, /obj/item/clothing/suit/storage/det_trench))
- overlays += image(icon, icon_state = "coat_det")
+ add_overlay("coat_det")
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 077ba16c813..0bcc71115fc 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -24,21 +24,30 @@
var/const/default_mob_size = 15
-/obj/structure/closet/initialize()
- ..()
- if(!opened) // if closed, any item at the crate's loc is put in the contents
- var/obj/I
- for(I in src.loc)
- if (!istype(I, /obj/item) && !istype(I, /obj/random))continue
- if(I.density || I.anchored || I == src) continue
- I.forceMove(src)
- // adjust locker size to hold all items with 5 units of free store room
- var/content_size = 0
- for(I in src.contents)
- content_size += Ceiling(I.w_class/2)
- if(content_size > storage_capacity-5)
- storage_capacity = content_size + 5
+/obj/structure/closet/LateInitialize()
+ if (opened) // if closed, any item at the crate's loc is put in the contents
+ return
+ var/obj/I
+ for(I in src.loc)
+ if (!istype(I, /obj/item) && !istype(I, /obj/random))
+ continue
+ if (I.density || I.anchored || I == src)
+ continue
+ I.forceMove(src)
+ // adjust locker size to hold all items with 5 units of free store room
+ var/content_size = 0
+ for(I in src.contents)
+ content_size += Ceiling(I.w_class/2)
+ if(content_size > storage_capacity-5)
+ storage_capacity = content_size + 5
+/obj/structure/closet/Initialize(mapload)
+ ..()
+ fill()
+ return mapload ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_NORMAL
+
+// Fill lockers with this.
+/obj/structure/closet/proc/fill()
/obj/structure/closet/examine(mob/user)
if(..(user, 1) && !opened)
@@ -203,8 +212,6 @@
..()
damage(proj_damage)
- return
-
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
if(istype(W, /obj/item/weapon/grab))
@@ -314,11 +321,11 @@
usr << "This mob type can't use this verb. "
/obj/structure/closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
- overlays.Cut()
+ cut_overlays()
if(!opened)
icon_state = icon_closed
if(welded)
- overlays += "welded"
+ add_overlay("welded")
else
icon_state = icon_opened
@@ -334,7 +341,7 @@
user.do_attack_animation(src)
visible_message("[user] [attack_message] the [src]! ")
dump_contents()
- spawn(1) qdel(src)
+ QDEL_IN(src, 1)
return 1
/obj/structure/closet/proc/req_breakout()
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index b42fe3f9502..3c627c1b29e 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -4,8 +4,7 @@
icon_state = "mixed"
icon_closed = "mixed"
-/obj/structure/closet/athletic_mixed/New()
- ..()
+/obj/structure/closet/athletic_mixed/fill()
new /obj/item/clothing/under/shorts/grey(src)
new /obj/item/clothing/under/shorts/black(src)
new /obj/item/clothing/under/shorts/red(src)
@@ -27,8 +26,7 @@
name = "boxing gloves"
desc = "It's a storage unit for gloves for use in the boxing ring."
-/obj/structure/closet/boxinggloves/New()
- ..()
+/obj/structure/closet/boxinggloves/fill()
new /obj/item/clothing/gloves/boxing/blue(src)
new /obj/item/clothing/gloves/boxing/green(src)
new /obj/item/clothing/gloves/boxing/yellow(src)
@@ -39,8 +37,7 @@
name = "mask closet"
desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!"
-/obj/structure/closet/masks/New()
- ..()
+/obj/structure/closet/masks/fill()
new /obj/item/clothing/mask/luchador(src)
new /obj/item/clothing/mask/luchador/rudos(src)
new /obj/item/clothing/mask/luchador/tecnicos(src)
@@ -52,8 +49,7 @@
icon_state = "red"
icon_closed = "red"
-/obj/structure/closet/lasertag/red/New()
- ..()
+/obj/structure/closet/lasertag/red/fill()
new /obj/item/weapon/gun/energy/lasertag/red(src)
new /obj/item/weapon/gun/energy/lasertag/red(src)
new /obj/item/clothing/suit/redtag(src)
@@ -66,8 +62,7 @@
icon_state = "blue"
icon_closed = "blue"
-/obj/structure/closet/lasertag/blue/New()
- ..()
+/obj/structure/closet/lasertag/blue/fill()
new /obj/item/weapon/gun/energy/lasertag/blue(src)
new /obj/item/weapon/gun/energy/lasertag/blue(src)
new /obj/item/clothing/suit/bluetag(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index 44e173cb895..06d253b9c19 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -35,8 +35,7 @@
icon_closed = "syndicate1"
icon_opened = "syndicate1open"
-/obj/structure/closet/gimmick/russian/New()
- ..()
+/obj/structure/closet/gimmick/russian/fill()
new /obj/item/clothing/head/ushanka(src)
new /obj/item/clothing/head/ushanka(src)
new /obj/item/clothing/head/ushanka(src)
@@ -56,8 +55,7 @@
icon_closed = "syndicate1"
icon_opened = "syndicate1open"
-/obj/structure/closet/gimmick/tacticool/New()
- ..()
+/obj/structure/closet/gimmick/tacticool/fill()
new /obj/item/clothing/glasses/eyepatch(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/gloves/swat(src)
@@ -82,14 +80,10 @@
icon_opened = "syndicateopen"
anchored = 1
-/obj/structure/closet/thunderdome/New()
- ..()
-
/obj/structure/closet/thunderdome/tdred
name = "red-team Thunderdome closet"
-/obj/structure/closet/thunderdome/tdred/New()
- ..()
+/obj/structure/closet/thunderdome/tdred/fill()
new /obj/item/clothing/suit/armor/tdome/red(src)
new /obj/item/clothing/suit/armor/tdome/red(src)
new /obj/item/clothing/suit/armor/tdome/red(src)
@@ -115,8 +109,7 @@
icon_closed = "syndicate1"
icon_opened = "syndicate1open"
-/obj/structure/closet/thunderdome/tdgreen/New()
- ..()
+/obj/structure/closet/thunderdome/tdgreen/fill()
new /obj/item/clothing/suit/armor/tdome/green(src)
new /obj/item/clothing/suit/armor/tdome/green(src)
new /obj/item/clothing/suit/armor/tdome/green(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index ecc779a753e..11647cd4aab 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -14,8 +14,7 @@
icon_state = "black"
icon_closed = "black"
-/obj/structure/closet/gmcloset/New()
- ..()
+/obj/structure/closet/gmcloset/fill()
new /obj/item/clothing/head/that(src)
new /obj/item/clothing/head/that(src)
new /obj/item/device/radio/headset/headset_service(src)
@@ -40,8 +39,7 @@
icon_state = "black"
icon_closed = "black"
-/obj/structure/closet/chefcloset/New()
- ..()
+/obj/structure/closet/chefcloset/fill()
new /obj/item/clothing/under/sundress(src)
new /obj/item/clothing/under/waiter(src)
new /obj/item/clothing/under/waiter(src)
@@ -62,8 +60,7 @@
icon_state = "mixed"
icon_closed = "mixed"
-/obj/structure/closet/jcloset/New()
- ..()
+/obj/structure/closet/jcloset/fill()
new /obj/item/clothing/under/rank/janitor(src)
new /obj/item/device/radio/headset/headset_service(src)
new /obj/item/weapon/cartridge/janitor(src)
@@ -94,8 +91,7 @@
icon_state = "blue"
icon_closed = "blue"
-/obj/structure/closet/lawcloset/New()
- ..()
+/obj/structure/closet/lawcloset/fill()
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index 4f52278a9ca..8224db9d501 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -10,8 +10,7 @@
icon_closed = "bio_general"
icon_opened = "bio_generalopen"
-/obj/structure/closet/l3closet/general/New()
- ..()
+/obj/structure/closet/l3closet/general/fill()
new /obj/item/clothing/suit/bio_suit/general( src )
new /obj/item/clothing/head/bio_hood/general( src )
@@ -21,8 +20,7 @@
icon_closed = "bio_virology"
icon_opened = "bio_virologyopen"
-/obj/structure/closet/l3closet/virology/New()
- ..()
+/obj/structure/closet/l3closet/virology/fill()
new /obj/item/clothing/suit/bio_suit/virology( src )
new /obj/item/clothing/head/bio_hood/virology( src )
new /obj/item/clothing/mask/breath(src)
@@ -34,8 +32,7 @@
icon_closed = "bio_security"
icon_opened = "bio_securityopen"
-/obj/structure/closet/l3closet/security/New()
- ..()
+/obj/structure/closet/l3closet/security/fill()
new /obj/item/clothing/suit/bio_suit/security( src )
new /obj/item/clothing/head/bio_hood/security( src )
@@ -45,8 +42,7 @@
icon_closed = "bio_janitor"
icon_opened = "bio_janitoropen"
-/obj/structure/closet/l3closet/janitor/New()
- ..()
+/obj/structure/closet/l3closet/janitor/fill()
new /obj/item/clothing/suit/bio_suit/janitor( src )
new /obj/item/clothing/head/bio_hood/janitor( src )
@@ -56,7 +52,6 @@
icon_closed = "bio_scientist"
icon_opened = "bio_scientistopen"
-/obj/structure/closet/l3closet/scientist/New()
- ..()
+/obj/structure/closet/l3closet/scientist/fill()
new /obj/item/clothing/suit/bio_suit/scientist( src )
new /obj/item/clothing/head/bio_hood/scientist( src )
diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
index bd17ba98411..ba78d5a7499 100644
--- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm
+++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
@@ -4,8 +4,7 @@
icon_closed = "syndicate"
icon_opened = "syndicateopen"
-/obj/structure/closet/malf/suits/New()
- ..()
+/obj/structure/closet/malf/suits/fill()
new /obj/item/weapon/tank/jetpack/void(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/clothing/head/helmet/space/void(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index 37ec5a4a51f..a63616e254e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -10,8 +10,7 @@
storage_capacity = 45 //such a big closet deserves a little more capacity
- New()
- ..()
+ fill()
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
@@ -22,7 +21,6 @@
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer( src )
- return
/obj/structure/closet/secure_closet/bar/update_icon()
if(broken)
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 a28e629a981..ee4f10d272a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -8,7 +8,7 @@
icon_broken = "securecargobroken"
icon_off = "securecargooff"
- New()
+ fill()
..()
new /obj/item/clothing/under/rank/cargotech(src)
new /obj/item/clothing/shoes/black(src)
@@ -16,7 +16,6 @@
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/head/soft(src)
// new /obj/item/weapon/cartridge/quartermaster(src)
- return
/obj/structure/closet/secure_closet/quartermaster
name = "quartermaster's locker"
@@ -28,8 +27,7 @@
icon_broken = "secureqmbroken"
icon_off = "secureqmoff"
- New()
- ..()
+ fill()
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src)
@@ -40,4 +38,3 @@
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/clothing/head/soft(src)
- return
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 b48d6a19338..b783644b55b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -9,8 +9,7 @@
icon_off = "secureceoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -33,8 +32,26 @@
new /obj/item/device/multitool(src)
new /obj/item/device/flash(src)
new /obj/item/taperoll/engineering(src)
- return
+/obj/structure/closet/secure_closet/engineering_chief2
+ name = "chief engineer's attire"
+ req_access = list(access_ce)
+ icon_state = "securece1"
+ icon_closed = "securece"
+ icon_locked = "securece1"
+ icon_opened = "secureceopen"
+ icon_broken = "securecebroken"
+ icon_off = "secureceoff"
+
+
+ fill()
+ new /obj/item/weapon/storage/backpack/industrial(src)
+ new /obj/item/weapon/storage/backpack/satchel_eng(src)
+ new /obj/item/clothing/accessory/storage/brown_vest(src)
+ new /obj/item/clothing/accessory/storage/webbing(src)
+ new /obj/item/clothing/under/rank/chief_engineer(src)
+ new /obj/item/clothing/shoes/brown(src)
+ new /obj/item/device/radio/headset/heads/ce(src)
/obj/structure/closet/secure_closet/engineering_electrical
@@ -48,8 +65,7 @@
icon_off = "secureengelecoff"
- New()
- ..()
+ fill()
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/weapon/storage/toolbox/electrical(src)
@@ -61,9 +77,6 @@
new /obj/item/device/multitool(src)
new /obj/item/device/multitool(src)
new /obj/item/device/multitool(src)
- return
-
-
/obj/structure/closet/secure_closet/engineering_welding
name = "welding supplies"
@@ -75,9 +88,7 @@
icon_broken = "secureengweldbroken"
icon_off = "secureengweldoff"
-
- New()
- ..()
+ fill()
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/head/welding(src)
@@ -87,9 +98,6 @@
new /obj/item/weapon/weldpack(src)
new /obj/item/weapon/weldpack(src)
new /obj/item/weapon/weldpack(src)
- return
-
-
/obj/structure/closet/secure_closet/engineering_personal
name = "engineer's locker"
@@ -101,9 +109,7 @@
icon_broken = "secureengbroken"
icon_off = "secureengoff"
-
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -119,7 +125,7 @@
new /obj/item/clothing/glasses/meson(src)
new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/taperoll/engineering(src)
- return
+
/obj/structure/closet/secure_closet/atmos_personal
name = "technician's locker"
req_access = list(access_atmospherics)
@@ -131,8 +137,7 @@
icon_off = "secureatmoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -150,4 +155,3 @@
new /obj/item/clothing/mask/gas(src)
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/taperoll/engineering(src)
- return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index b490953b3e1..da6d3e59b55 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -16,19 +16,14 @@
name = "kitchen cabinet"
req_access = list(access_kitchen)
- New()
- ..()
+ fill()
for(var/i = 0, i < 2, i++)
new /obj/item/weapon/reagent_containers/food/condiment/flour(src)
new /obj/item/weapon/reagent_containers/food/condiment/sugar(src)
- return
-
/obj/structure/closet/secure_closet/freezer/kitchen/mining
req_access = list()
-
-
/obj/structure/closet/secure_closet/freezer/meat
name = "meat fridge"
icon_state = "fridge1"
@@ -39,13 +34,10 @@
icon_off = "fridge1"
- New()
+ fill()
..()
for(var/i = 0, i < 8, i++)
new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src)
- return
-
-
/obj/structure/closet/secure_closet/freezer/fridge
name = "refrigerator"
@@ -57,7 +49,7 @@
icon_off = "fridge1"
- New()
+ fill()
..()
for(var/i = 0, i < 5, i++)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
@@ -65,8 +57,6 @@
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
for(var/i = 0, i < 2, i++)
new /obj/item/weapon/storage/fancy/egg_box(src)
- return
-
/obj/structure/closet/secure_closet/freezer/money
@@ -80,7 +70,7 @@
req_access = list(access_heads_vault)
- New()
+ fill()
..()
for(var/i = 0, i < 3, i++)
new /obj/item/weapon/spacecash/c1000(src)
@@ -88,4 +78,3 @@
new /obj/item/weapon/spacecash/c500(src)
for(var/i = 0, i < 6, i++)
new /obj/item/weapon/spacecash/c200(src)
- return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index 969185741d1..cf4c9b1a01b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -9,8 +9,8 @@
icon_closed ="base"
icon_opened = "base"
-/obj/structure/closet/secure_closet/guncabinet/New()
- ..()
+/obj/structure/closet/secure_closet/guncabinet/Initialize()
+ . = ..()
update_icon()
/obj/structure/closet/secure_closet/guncabinet/toggle()
@@ -18,9 +18,9 @@
update_icon()
/obj/structure/closet/secure_closet/guncabinet/update_icon()
- overlays.Cut()
+ cut_overlays()
if(opened)
- overlays += icon(icon,"door_open")
+ add_overlay("door_open")
else
var/lazors = 0
var/shottas = 0
@@ -41,13 +41,13 @@
gun.icon_state = "projectile"
gun.pixel_x = i*4
- overlays += gun
-
- overlays += icon(src.icon,"door")
+ add_overlay(gun)
+
+ add_overlay("door")
if(broken)
- overlays += icon(src.icon,"broken")
+ add_overlay("broken")
else if (locked)
- overlays += icon(src.icon,"locked")
+ add_overlay("locked")
else
- overlays += icon(src.icon,"open")
+ add_overlay("open")
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 bf7aa92fa66..287b00837c3 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
@@ -8,8 +8,7 @@
icon_broken = "hydrosecurebroken"
icon_off = "hydrosecureoff"
-
- New()
+ fill()
..()
switch(rand(1,2))
if(1)
@@ -26,4 +25,3 @@
new /obj/item/weapon/wirecutters/clippers(src)
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
// new /obj/item/weapon/bee_net(src) //No more bees, March 2014
- return
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 cc333808a05..abb8963649a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -9,8 +9,7 @@
icon_off = "medicaloff"
req_access = list(access_medical_equip)
-
- New()
+ fill()
..()
new /obj/item/weapon/storage/box/autoinjectors(src)
new /obj/item/weapon/storage/box/syringes(src)
@@ -22,9 +21,6 @@
new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src)
new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src)
new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src)
- return
-
-
/obj/structure/closet/secure_closet/medical2
name = "anesthetics closet"
@@ -37,18 +33,13 @@
icon_off = "medicaloff"
req_access = list(access_surgery)
-
- New()
- ..()
+ fill()
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/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)
- return
-
-
/obj/structure/closet/secure_closet/medical3
name = "medical doctor's locker"
@@ -60,8 +51,7 @@
icon_broken = "securemedbroken"
icon_off = "securemedoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
@@ -96,8 +86,6 @@
new /obj/item/clothing/shoes/white(src)
// new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)
- return
-
/obj/structure/closet/secure_closet/CMO
@@ -110,8 +98,7 @@
icon_broken = "cmosecurebroken"
icon_off = "cmosecureoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
@@ -119,27 +106,36 @@
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/shoes/white(src)
- switch(pick("blue", "green", "purple"))
- if ("blue")
- new /obj/item/clothing/under/rank/medical/blue(src)
- new /obj/item/clothing/head/surgery/blue(src)
- if ("green")
- new /obj/item/clothing/under/rank/medical/green(src)
- new /obj/item/clothing/head/surgery/green(src)
- if ("purple")
- new /obj/item/clothing/under/rank/medical/purple(src)
- new /obj/item/clothing/head/surgery/purple(src)
- new /obj/item/clothing/under/rank/chief_medical_officer(src)
- new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
- new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
new /obj/item/weapon/cartridge/cmo(src)
new /obj/item/clothing/gloves/latex(src)
- new /obj/item/clothing/shoes/brown (src)
new /obj/item/device/radio/headset/heads/cmo(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/hypospray(src)
- return
+/obj/structure/closet/secure_closet/CMO2
+ name = "chief medical officer's attire"
+ req_access = list(access_cmo)
+ icon_state = "cmosecure1"
+ icon_closed = "cmosecure"
+ icon_locked = "cmosecure1"
+ icon_opened = "cmosecureopen"
+ icon_broken = "cmosecurebroken"
+ icon_off = "cmosecureoff"
+
+ fill()
+ new /obj/item/weapon/storage/backpack/medic(src)
+ new /obj/item/weapon/storage/backpack/satchel_med(src)
+ new /obj/item/clothing/under/rank/medical/blue(src)
+ new /obj/item/clothing/head/surgery/blue(src)
+ new /obj/item/clothing/under/rank/medical/green(src)
+ new /obj/item/clothing/head/surgery/green(src)
+ new /obj/item/clothing/under/rank/medical/purple(src)
+ new /obj/item/clothing/head/surgery/purple(src)
+ new /obj/item/clothing/under/rank/chief_medical_officer(src)
+ new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
+ new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
+ new /obj/item/clothing/shoes/brown (src)
+ new /obj/item/device/radio/headset/heads/cmo(src)
/obj/structure/closet/secure_closet/animal
@@ -147,14 +143,12 @@
req_access = list(access_surgery)
- New()
+ fill()
..()
new /obj/item/device/assembly/signaler(src)
new /obj/item/device/radio/electropack(src)
new /obj/item/device/radio/electropack(src)
new /obj/item/device/radio/electropack(src)
- return
-
/obj/structure/closet/secure_closet/chemical
@@ -168,14 +162,13 @@
icon_off = "medicaloff"
req_access = list(access_chemistry)
-
- New()
+ fill()
..()
new /obj/item/weapon/storage/box/pillbottles(src)
new /obj/item/weapon/storage/box/pillbottles(src)
new /obj/item/weapon/storage/box/spraybottles(src)
new /obj/item/weapon/storage/box/spraybottles(src)
- return
+
/obj/structure/closet/secure_closet/medical_wall
name = "first aid closet"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index 1477cdc2a7c..372c2fc8d6e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -4,30 +4,19 @@
req_access = list(access_all_personal_lockers)
var/registered_name = null
-/obj/structure/closet/secure_closet/personal/New()
- ..()
- spawn(2)
- if(prob(50))
- new /obj/item/weapon/storage/backpack(src)
- else
- new /obj/item/weapon/storage/backpack/satchel_norm(src)
- new /obj/item/device/radio/headset( src )
- return
-
+/obj/structure/closet/secure_closet/personal/fill()
+ if(prob(50))
+ new /obj/item/weapon/storage/backpack(src)
+ else
+ new /obj/item/weapon/storage/backpack/satchel_norm(src)
+ new /obj/item/device/radio/headset( src )
/obj/structure/closet/secure_closet/personal/patient
name = "patient's closet"
-/obj/structure/closet/secure_closet/personal/patient/New()
- ..()
- spawn(4)
- // Not really the best way to do this, but it's better than "contents = list()"!
- for(var/atom/movable/AM in contents)
- qdel(AM)
- new /obj/item/clothing/under/color/white( src )
- new /obj/item/clothing/shoes/white( src )
- return
-
+/obj/structure/closet/secure_closet/personal/patient/fill()
+ new /obj/item/clothing/under/color/white( src )
+ new /obj/item/clothing/shoes/white( src )
/obj/structure/closet/secure_closet/personal/cabinet
@@ -50,15 +39,10 @@
else
icon_state = icon_opened
-/obj/structure/closet/secure_closet/personal/cabinet/New()
- ..()
- spawn(4)
- // Not really the best way to do this, but it's better than "contents = list()"!
- for(var/atom/movable/AM in contents)
- qdel(AM)
- new /obj/item/weapon/storage/backpack/satchel/withwallet( src )
- new /obj/item/device/radio/headset( src )
- return
+/obj/structure/closet/secure_closet/personal/cabinet/fill()
+ new /obj/item/weapon/storage/backpack/satchel/withwallet( src )
+ new /obj/item/device/radio/headset( src )
+
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.opened)
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 0578b793569..d77bca5ccb0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -8,8 +8,7 @@
icon_broken = "secureresbroken"
icon_off = "secureresoff"
- New()
- ..()
+ fill()
new /obj/item/clothing/under/rank/scientist(src)
//new /obj/item/clothing/suit/labcoat/science(src)
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
@@ -18,8 +17,6 @@
new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/weapon/tank/air(src)
new /obj/item/clothing/mask/gas(src)
- return
-
/obj/structure/closet/secure_closet/RD
@@ -32,8 +29,7 @@
icon_broken = "rdsecurebroken"
icon_off = "rdsecureoff"
- New()
- ..()
+ fill()
new /obj/item/clothing/suit/bio_suit/scientist(src)
new /obj/item/clothing/head/bio_hood/scientist(src)
new /obj/item/clothing/under/rank/research_director(src)
@@ -48,4 +44,23 @@
new /obj/item/weapon/tank/air(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flash(src)
- return
+
+/obj/structure/closet/secure_closet/RD2
+ name = "research director's attire"
+ req_access = list(access_rd)
+ icon_state = "rdsecure1"
+ icon_closed = "rdsecure"
+ icon_locked = "rdsecure1"
+ icon_opened = "rdsecureopen"
+ icon_broken = "rdsecurebroken"
+ icon_off = "rdsecureoff"
+
+ fill()
+ new /obj/item/clothing/under/rank/research_director(src)
+ new /obj/item/clothing/under/rank/research_director/rdalt(src)
+ new /obj/item/clothing/under/rank/research_director/dress_rd(src)
+ new /obj/item/clothing/suit/storage/toggle/labcoat(src)
+ new /obj/item/clothing/shoes/white(src)
+ new /obj/item/clothing/shoes/leather(src)
+ new /obj/item/clothing/gloves/latex(src)
+ new /obj/item/device/radio/headset/heads/rd(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 958b49db2fd..e29e9335501 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -126,14 +126,14 @@
usr << "This mob type can't use this verb. "
/obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
- overlays.Cut()
+ cut_overlays()
if(!opened)
if(locked)
icon_state = icon_locked
else
icon_state = icon_closed
if(welded)
- overlays += "welded"
+ add_overlay("welded")
else
icon_state = icon_opened
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 3880e71d6dc..d0bc87a8301 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -8,8 +8,7 @@
icon_broken = "capsecurebroken"
icon_off = "capsecureoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/captain(src)
else
@@ -30,7 +29,30 @@
new /obj/item/clothing/under/dress/dress_cap(src)
new /obj/item/clothing/head/caphat/formal(src)
new /obj/item/clothing/under/captainformal(src)
- return
+
+/obj/structure/closet/secure_closet/captains2
+ name = "captain's attire"
+ req_access = list(access_captain)
+ icon_state = "capsecure1"
+ icon_closed = "capsecure"
+ icon_locked = "capsecure1"
+ icon_opened = "capsecureopen"
+ icon_broken = "capsecurebroken"
+ icon_off = "capsecureoff"
+
+ fill()
+ new /obj/item/weapon/storage/backpack/captain(src)
+ new /obj/item/weapon/storage/backpack/satchel_cap(src)
+ new /obj/item/clothing/suit/captunic(src)
+ new /obj/item/clothing/suit/captunic/capjacket(src)
+ new /obj/item/clothing/head/caphat(src)
+ new /obj/item/clothing/under/rank/captain(src)
+ new /obj/item/clothing/suit/storage/vest(src)
+ new /obj/item/clothing/shoes/brown(src)
+ new /obj/item/clothing/gloves/captain(src)
+ new /obj/item/clothing/under/dress/dress_cap(src)
+ new /obj/item/clothing/head/helmet/formalcaptain(src)
+ new /obj/item/clothing/under/captainformal(src)
@@ -44,7 +66,7 @@
icon_broken = "hopsecurebroken"
icon_off = "hopsecureoff"
- New()
+ fill()
..()
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/suit/storage/vest(src)
@@ -56,7 +78,6 @@
new /obj/item/weapon/gun/energy/pistol(src)
new /obj/item/weapon/gun/projectile/sec/flash(src)
new /obj/item/device/flash(src)
- return
/obj/structure/closet/secure_closet/hop2
name = "head of personnel's attire"
@@ -68,7 +89,7 @@
icon_broken = "hopsecurebroken"
icon_off = "hopsecureoff"
- New()
+ fill()
..()
new /obj/item/clothing/under/rank/head_of_personnel(src)
new /obj/item/clothing/under/dress/dress_hop(src)
@@ -83,9 +104,6 @@
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src)
new /obj/item/clothing/head/caphat/hop(src)
- return
-
-
/obj/structure/closet/secure_closet/hos
name = "head of security's locker"
@@ -97,12 +115,11 @@
icon_broken = "hossecurebroken"
icon_off = "hossecureoff"
- New()
+ fill()
..()
- if(prob(50))
- new /obj/item/weapon/storage/backpack/security(src)
- else
- new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/weapon/storage/backpack/security(src)
+ new /obj/item/weapon/storage/backpack/satchel_sec(src)
+
new /obj/item/clothing/head/helmet/HoS(src)
new /obj/item/clothing/suit/storage/vest/hos(src)
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
@@ -126,9 +143,29 @@
new /obj/item/clothing/accessory/badge/hos(src)
new /obj/item/ammo_magazine/tranq(src)
new /obj/item/device/holowarrant(src)
- return
+/obj/structure/closet/secure_closet/hos2
+ name = "head of security's attire"
+ req_access = list(access_hos)
+ icon_state = "hossecure1"
+ icon_closed = "hossecure"
+ icon_locked = "hossecure1"
+ icon_opened = "hossecureopen"
+ icon_broken = "hossecurebroken"
+ icon_off = "hossecureoff"
+ fill()
+ new /obj/item/weapon/storage/backpack/security(src)
+ new /obj/item/weapon/storage/backpack/satchel_sec(src)
+ new /obj/item/clothing/head/helmet/HoS(src)
+ new /obj/item/clothing/suit/storage/vest/hos(src)
+ new /obj/item/clothing/under/rank/head_of_security/jensen(src)
+ new /obj/item/clothing/under/rank/head_of_security/corp(src)
+ new /obj/item/device/radio/headset/heads/hos(src)
+ new /obj/item/clothing/glasses/sunglasses/sechud(src)
+ new /obj/item/weapon/storage/belt/security(src)
+ new /obj/item/clothing/accessory/holster/waist(src)
+ new /obj/item/clothing/head/beret/sec/hos(src)
/obj/structure/closet/secure_closet/warden
name = "warden's locker"
@@ -141,8 +178,7 @@
icon_off = "wardensecureoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
@@ -169,7 +205,7 @@
new /obj/item/clothing/accessory/badge/warden(src)
new /obj/item/ammo_magazine/c45m/rubber(src)
new /obj/item/weapon/storage/box/ids(src)
- return
+
/obj/structure/closet/secure_closet/security_cadet
name = "security cadet's locker"
@@ -181,8 +217,7 @@
icon_broken = "seccadetbroken"
icon_off = "seccadetoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
@@ -198,8 +233,6 @@
new /obj/item/clothing/under/rank/security2(src)
new /obj/item/device/holowarrant(src)
new /obj/item/device/flashlight/flare(src)
- return
-
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
@@ -211,8 +244,7 @@
icon_broken = "secbroken"
icon_off = "secoff"
- New()
- ..()
+ fill()
if(prob(50))
new /obj/item/weapon/storage/backpack/security(src)
else
@@ -235,40 +267,34 @@
new /obj/item/ammo_magazine/c45m/rubber(src)
new /obj/item/device/holowarrant(src)
new /obj/item/device/flashlight/flare(src)
- return
-
/obj/structure/closet/secure_closet/security/cargo
- New()
+ fill()
..()
new /obj/item/clothing/accessory/armband/cargo(src)
new /obj/item/device/encryptionkey/headset_cargo(src)
- return
/obj/structure/closet/secure_closet/security/engine
- New()
+ fill()
..()
new /obj/item/clothing/accessory/armband/engine(src)
new /obj/item/device/encryptionkey/headset_eng(src)
- return
/obj/structure/closet/secure_closet/security/science
- New()
+ fill()
..()
new /obj/item/clothing/accessory/armband/science(src)
new /obj/item/device/encryptionkey/headset_sci(src)
- return
/obj/structure/closet/secure_closet/security/med
- New()
+ fill()
..()
new /obj/item/clothing/accessory/armband/medgreen(src)
new /obj/item/device/encryptionkey/headset_med(src)
- return
/obj/structure/closet/secure_closet/detective
@@ -282,8 +308,7 @@
icon_off = "cabinetdetective_broken"
storage_capacity = 45 //such a big closet deserves a little more capacity
- New()
- ..()
+ fill()
new /obj/item/clothing/under/det(src)
new /obj/item/clothing/under/det/black(src)
new /obj/item/clothing/under/det/slob(src)
@@ -303,7 +328,6 @@
new /obj/item/taperoll/police(src)
new /obj/item/weapon/gun/projectile/revolver/detective(src)
new /obj/item/clothing/accessory/holster/armpit(src)
- return
/obj/structure/closet/secure_closet/detective/update_icon()
if(broken)
@@ -321,13 +345,9 @@
name = "lethal injections locker"
req_access = list(access_captain)
-
- New()
- ..()
+ fill()
new /obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral(src)
new /obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral(src)
- return
-
/obj/structure/closet/secure_closet/brig
@@ -336,19 +356,15 @@
anchored = 1
var/id = null
- New()
- ..()
+ fill()
new /obj/item/clothing/under/color/orange( src )
new /obj/item/clothing/shoes/orange( src )
- return
-
-
/obj/structure/closet/secure_closet/courtroom
name = "courtroom locker"
req_access = list(access_lawyer)
- New()
+ fill()
..()
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/paper/Court (src)
@@ -358,7 +374,6 @@
new /obj/item/clothing/suit/judgerobe (src)
new /obj/item/clothing/head/powdered_wig (src)
new /obj/item/weapon/storage/briefcase(src)
- return
/obj/structure/closet/secure_closet/wall
name = "wall locker"
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index 0422b46eb43..1a18ef1f03e 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -9,8 +9,7 @@
/obj/structure/closet/syndicate/personal
desc = "It's a storage unit for operative gear."
-/obj/structure/closet/syndicate/personal/New()
- ..()
+/obj/structure/closet/syndicate/personal/fill()
new /obj/item/weapon/tank/jetpack/oxygen(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/clothing/under/syndicate(src)
@@ -27,8 +26,7 @@
/obj/structure/closet/syndicate/suit
desc = "It's a storage unit for voidsuits."
-/obj/structure/closet/syndicate/suit/New()
- ..()
+/obj/structure/closet/syndicate/suit/fill()
new /obj/item/weapon/tank/jetpack/oxygen(src)
new /obj/item/clothing/shoes/magboots(src)
new /obj/item/clothing/suit/space/void/merc(src)
@@ -39,9 +37,7 @@
/obj/structure/closet/syndicate/nuclear
desc = "It's a storage unit for nuclear-operative gear."
-/obj/structure/closet/syndicate/nuclear/New()
- ..()
-
+/obj/structure/closet/syndicate/nuclear/fill()
new /obj/item/ammo_magazine/a10mm(src)
new /obj/item/ammo_magazine/a10mm(src)
new /obj/item/ammo_magazine/a10mm(src)
@@ -67,15 +63,12 @@
/obj/structure/closet/syndicate/resources/
desc = "An old, dusty locker."
- New()
- ..()
+ fill()
var/common_min = 30 //Minimum amount of minerals in the stack for common minerals
var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals
var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals
var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK
-
-
var/pickednum = rand(1, 50)
//Sad trombone
@@ -125,17 +118,17 @@
/obj/structure/closet/syndicate/resources/everything
desc = "It's an emergency storage closet for repairs."
- New()
+ fill()
var/list/resources = list(
- /obj/item/stack/material/steel,
- /obj/item/stack/material/glass,
- /obj/item/stack/material/gold,
- /obj/item/stack/material/silver,
- /obj/item/stack/material/phoron,
- /obj/item/stack/material/uranium,
- /obj/item/stack/material/diamond,
- /obj/item/stack/material/plasteel,
- /obj/item/stack/rods
+ /obj/item/stack/material/steel,
+ /obj/item/stack/material/glass,
+ /obj/item/stack/material/gold,
+ /obj/item/stack/material/silver,
+ /obj/item/stack/material/phoron,
+ /obj/item/stack/material/uranium,
+ /obj/item/stack/material/diamond,
+ /obj/item/stack/material/plasteel,
+ /obj/item/stack/rods
)
@@ -143,5 +136,3 @@
for(var/res in resources)
var/obj/item/stack/R = new res(src)
R.amount = R.max_amount
-
- 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 714be281b89..c140f4ed84d 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -19,9 +19,7 @@
icon_closed = "emergency"
icon_opened = "emergencyopen"
-/obj/structure/closet/emcloset/New()
- ..()
-
+/obj/structure/closet/emcloset/fill()
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10)))
if ("small")
new /obj/item/weapon/tank/emergency_oxygen(src)
@@ -52,7 +50,7 @@
new /obj/item/clothing/head/helmet/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
-/obj/structure/closet/emcloset/legacy/New()
+/obj/structure/closet/emcloset/legacy/fill()
..()
new /obj/item/weapon/tank/oxygen(src)
new /obj/item/clothing/mask/gas(src)
@@ -67,20 +65,14 @@
icon_closed = "firecloset"
icon_opened = "fireclosetopen"
-/obj/structure/closet/firecloset/New()
- ..()
-
+/obj/structure/closet/firecloset/fill()
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/extinguisher(src)
new /obj/item/clothing/head/hardhat/red(src)
-/obj/structure/closet/firecloset/full/New()
- ..()
- sleep(4)
- contents = list()
-
+/obj/structure/closet/firecloset/full/fill()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flashlight(src)
@@ -105,8 +97,7 @@
icon_closed = "toolcloset"
icon_opened = "toolclosetopen"
-/obj/structure/closet/toolcloset/New()
- ..()
+/obj/structure/closet/toolcloset/fill()
if(prob(40))
new /obj/item/clothing/suit/storage/hazardvest(src)
if(prob(70))
@@ -149,8 +140,7 @@
icon_opened = "toolclosetopen"
icon_closed = "radsuitcloset"
-/obj/structure/closet/radiation/New()
- ..()
+/obj/structure/closet/radiation/fill()
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
new /obj/item/clothing/suit/radiation(src)
@@ -166,8 +156,7 @@
icon_closed = "bombsuit"
icon_opened = "bombsuitopen"
-/obj/structure/closet/bombcloset/New()
- ..()
+/obj/structure/closet/bombcloset/fill()
new /obj/item/clothing/suit/bomb_suit( src )
new /obj/item/clothing/under/color/black( src )
new /obj/item/clothing/shoes/black( src )
@@ -181,8 +170,7 @@
icon_closed = "bombsuitsec"
icon_opened = "bombsuitsecopen"
-/obj/structure/closet/bombclosetsecurity/New()
- ..()
+/obj/structure/closet/bombclosetsecurity/fill()
new /obj/item/clothing/suit/bomb_suit/security( src )
new /obj/item/clothing/under/rank/security( src )
new /obj/item/clothing/shoes/brown( src )
@@ -201,8 +189,7 @@
density = 0
wall_mounted = 1
-/obj/structure/closet/hydrant/New()
- ..()
+/obj/structure/closet/hydrant/fill()
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flashlight(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 2f40f5c03be..ccf28a2768d 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -29,6 +29,7 @@
new /obj/item/clothing/head/beret/sec/alt(src)
new /obj/item/clothing/head/beret/sec/alt(src)
new /obj/item/clothing/head/beret/sec/alt(src)
+ new /obj/item/device/radio/headset/headset_sec(src)
return
/obj/structure/closet/wardrobe/pink
@@ -137,8 +138,8 @@
/obj/structure/closet/wardrobe/yellow
name = "yellow wardrobe"
- icon_state = "wardrobe-y"
- icon_closed = "wardrobe-y"
+ icon_state = "yellow"
+ icon_closed = "yellow"
/obj/structure/closet/wardrobe/yellow/New()
..()
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index cd11246ebd0..78b5702b2c9 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -251,13 +251,6 @@
set_tablestatus(1)
-
-
-
-
-
-
-
/*
=====================
Secure Crates
@@ -279,14 +272,14 @@
var/locked = 1
health = 200
-/obj/structure/closet/crate/secure/New()
- ..()
+/obj/structure/closet/crate/secure/Initialize()
+ . = ..()
if(locked)
- overlays.Cut()
- overlays += redlight
+ cut_overlays()
+ add_overlay(redlight)
else
- overlays.Cut()
- overlays += greenlight
+ cut_overlays()
+ add_overlay(greenlight)
/obj/structure/closet/crate/secure/can_open()
if (..())
@@ -312,8 +305,8 @@
if(user)
for(var/mob/O in viewers(user, 3))
O.show_message( "The crate has been [locked ? null : "un"]locked by [user]. ", 1)
- overlays.Cut()
- overlays += locked ? redlight : greenlight
+ cut_overlays()
+ add_overlay(locked ? redlight : greenlight)
/obj/structure/closet/crate/secure/verb/verb_togglelock()
set src in oview(1) // One square distance
@@ -348,10 +341,10 @@
/obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user)
if(!broken)
- overlays.Cut()
- overlays += emag
- overlays += sparks
- spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
+ cut_overlays()
+ add_overlay(emag)
+ add_overlay(sparks)
+ CUT_OVERLAY_IN(sparks, 6)
playsound(src.loc, "sparks", 60, 1)
src.locked = 0
src.broken = 1
@@ -364,13 +357,13 @@
if(!broken && !opened && prob(50/severity))
if(!locked)
src.locked = 1
- overlays.Cut()
- overlays += redlight
+ cut_overlays()
+ add_overlay(redlight)
else
- overlays.Cut()
- overlays += emag
- overlays += sparks
- spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
+ cut_overlays()
+ add_overlay(emag)
+ add_overlay(sparks)
+ CUT_OVERLAY_IN(sparks, 6)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
src.locked = 0
if(!opened && prob(20/severity))
@@ -432,8 +425,7 @@
icon_opened = "crateopen"
icon_closed = "crate"
-/obj/structure/closet/crate/rcd/New()
- ..()
+/obj/structure/closet/crate/rcd/fill()
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
new /obj/item/weapon/rcd_ammo(src)
@@ -442,8 +434,7 @@
/obj/structure/closet/crate/solar
name = "solar pack crate"
-/obj/structure/closet/crate/solar/New()
- ..()
+/obj/structure/closet/crate/solar/fill()
new /obj/item/solar_assembly(src)
new /obj/item/solar_assembly(src)
new /obj/item/solar_assembly(src)
@@ -491,13 +482,12 @@
newgas.temperature = target_temp
return newgas
-/obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle
+/obj/structure/closet/crate/freezer/rations //For use in the escape shuttle
name = "emergency rations"
desc = "A crate of emergency rations."
-/obj/structure/closet/crate/freezer/rations/New()
- ..()
+/obj/structure/closet/crate/freezer/rations/fill()
new /obj/item/weapon/reagent_containers/food/snacks/liquidfood(src)
new /obj/item/weapon/reagent_containers/food/snacks/liquidfood(src)
new /obj/item/weapon/reagent_containers/food/snacks/liquidfood(src)
@@ -517,8 +507,7 @@
icon_opened = "radiationopen"
icon_closed = "radiation"
-/obj/structure/closet/crate/radiation/New()
- ..()
+/obj/structure/closet/crate/radiation/fill()
new /obj/item/clothing/suit/radiation(src)
new /obj/item/clothing/head/radiation(src)
new /obj/item/clothing/suit/radiation(src)
@@ -640,8 +629,7 @@
/obj/structure/closet/crate/hydroponics/prespawned
//This exists so the prespawned hydro crates spawn with their contents.
- New()
- ..()
+ fill()
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
new /obj/item/weapon/reagent_containers/spray/plantbgone(src)
new /obj/item/weapon/material/minihoe(src)
@@ -677,18 +665,20 @@
"trashcart" = "trashcartopen",
"critter" = "critteropen",
"largemetal" = "largemetalopen",
- "medicalcrate" = "medicalcrateopen")
+ "medicalcrate" = "medicalcrateopen"
+ )
-/obj/structure/closet/crate/loot/New(var/location, var/_rarity = 1, var/_quantity = 10)
-
+/obj/structure/closet/crate/loot/Initialize(mapload, var/_rarity = 1, var/_quantity = 10)
+ . = ..()
rarity = _rarity
quantity = _quantity
- ..(location)
-
-/obj/structure/closet/crate/loot/initialize()
- spawntypes = list("1" = STOCK_RARE_PROB*rarity, "2" = STOCK_UNCOMMON_PROB*rarity, "3" = (100 - ((STOCK_RARE_PROB*rarity) + (STOCK_UNCOMMON_PROB*rarity))))
+ spawntypes = list(
+ "1" = STOCK_RARE_PROB * rarity,
+ "2" = STOCK_UNCOMMON_PROB * rarity,
+ "3" = (100 - ((STOCK_RARE_PROB * rarity) + (STOCK_UNCOMMON_PROB * rarity)))
+ )
icon_closed = pick(iconchoices)
icon_opened = iconchoices[icon_closed]
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 4243a2d8cab..b41b25cc73d 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -49,8 +49,8 @@
var/held_count = 1
var/held_type
-/obj/structure/largecrate/animal/New()
- ..()
+/obj/structure/largecrate/animal/Initialize()
+ . = ..()
for(var/i = 1;i<=held_count;i++)
new held_type(src)
diff --git a/code/game/objects/structures/fireaxe_cabinet.dm b/code/game/objects/structures/fireaxe_cabinet.dm
index a19693f5ab9..d079b4c3b09 100644
--- a/code/game/objects/structures/fireaxe_cabinet.dm
+++ b/code/game/objects/structures/fireaxe_cabinet.dm
@@ -27,13 +27,13 @@
update_icon()
/obj/structure/fireaxecabinet/update_icon()
- overlays.Cut()
+ cut_overlays()
if(fireaxe)
- overlays += image(icon, "fireaxe_item")
+ add_overlay("fireaxe_item")
if(shattered)
- overlays += image(icon, "fireaxe_window_broken")
+ add_overlay("fireaxe_window_broken")
else if(!open)
- overlays += image(icon, "fireaxe_window")
+ add_overlay("fireaxe_window")
/obj/structure/fireaxecabinet/New()
..()
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 430c974f7c3..18d1a15d45b 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -69,7 +69,7 @@
user << "You secured the girder! "
reset_girder()
- else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
user << "Now slicing apart the girder... "
if(do_after(user,30))
if(!src) return
@@ -278,7 +278,7 @@
user << "You dissasembled the girder! "
dismantle()
- else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
user << "Now slicing apart the girder... "
if(do_after(user,30))
user << "You slice apart the girder! "
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 2463cd48b4b..6a2a1b5a597 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -11,7 +11,6 @@
var/health = 10
var/destroyed = 0
-
/obj/structure/grille/ex_act(severity)
qdel(src)
@@ -64,7 +63,7 @@
//Flimsy grilles aren't so great at stopping projectiles. However they can absorb some of the impact
var/damage = Proj.get_structure_damage()
var/passthrough = 0
-
+
if(!damage) return
//20% chance that the grille provides a bit more cover than usual. Support structure for example might take up 20% of the grille's area.
@@ -96,7 +95,7 @@
if(iswirecutter(W))
if(!shock(user, 100))
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
- getFromPool(/obj/item/stack/rods, get_turf(src), destroyed ? 1 : 2)
+ new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2)
qdel(src)
else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored))
if(!shock(user, 90))
@@ -104,6 +103,16 @@
anchored = !anchored
user.visible_message("[user] [anchored ? "fastens" : "unfastens"] the grille. ", \
"You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor. ")
+ else if(istype(W,/obj/item/stack/rods) && destroyed == 1)
+ if(!shock(user, 90))
+ var/obj/item/stack/rods/ROD = W
+ health = 10
+ density = 1
+ destroyed = 0
+ icon_state = "grille"
+ ROD.use(1)
+ user.visible_message("[user] repairs the grille. ", \
+ "You have repaired the grille. ")
return
//window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM
@@ -169,11 +178,11 @@
density = 0
destroyed = 1
update_icon()
- getFromPool(/obj/item/stack/rods, get_turf(src))
+ new /obj/item/stack/rods(get_turf(src))
else
if(health <= -6)
- getFromPool(/obj/item/stack/rods, get_turf(src))
+ new /obj/item/stack/rods(get_turf(src))
qdel(src)
return
return
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index 11ec1f3b3f0..9428ea379a8 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -49,7 +49,7 @@
/obj/structure/inflatable/Destroy()
update_nearby_tiles()
- ..()
+ return ..()
/obj/structure/inflatable/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 0
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 753af5a8e10..f7436cdea71 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -143,7 +143,7 @@
//This return will prevent afterattack from executing if the object goes into the trashbag,
//This prevents dumb stuff like splashing the cart with the contents of a container, after putting said container into trash
- else if (!has_items && (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/weldingtool) || istype(I, /obj/item/weapon/pickaxe/plasmacutter)))
+ else if (!has_items && (istype(I, /obj/item/weapon/wrench) || istype(I, /obj/item/weapon/weldingtool) || istype(I, /obj/item/weapon/gun/energy/plasmacutter)))
dismantle(user)
return
..()
@@ -280,28 +280,28 @@
/obj/structure/janitorialcart/update_icon()
- overlays = null
+ cut_overlays()
has_items = 0
if(mybucket)
- overlays += "cart_bucket"
+ add_overlay("cart_bucket")
has_items = 1
if(mybag)
- overlays += "cart_garbage"
+ add_overlay("cart_garbage")
has_items = 1
if(mymop)
- overlays += "cart_mop"
+ add_overlay("cart_mop")
has_items = 1
if(myspray)
- overlays += "cart_spray"
+ add_overlay("cart_spray")
has_items = 1
if(myreplacer)
if (istype(myreplacer, /obj/item/device/lightreplacer/advanced))
- overlays += "cart_adv_lightreplacer"
+ add_overlay("cart_adv_lightreplacer")
else
- overlays += "cart_replacer"
+ add_overlay("cart_replacer")
has_items = 1
if(signs)
- overlays += "cart_sign[signs]"
+ add_overlay("cart_sign[signs]")
has_items = 1
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 4c31a8530fb..d4062d4ebe1 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -1,51 +1,40 @@
/obj/structure/lattice
name = "lattice"
desc = "A lightweight support lattice."
- icon = 'icons/obj/structures.dmi'
- icon_state = "latticefull"
+ icon = 'icons/obj/smooth/lattice.dmi'
+ icon_state = "lattice"
density = 0
anchored = 1.0
w_class = 3
layer = 2.3 //under pipes
// flags = CONDUCT
+ smooth = SMOOTH_MORE
+ canSmoothWith = list(
+ /obj/structure/lattice,
+ /turf/simulated/wall,
+ /turf/simulated/floor,
+ /turf/simulated/mineral,
+ /turf/unsimulated/wall,
+ /turf/unsimulated/floor,
+ /obj/structure/grille
+ )
-/obj/structure/lattice/initialize()
- ..()
+/obj/structure/lattice/Initialize()
+ . = ..()
///// Z-Level Stuff
if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/open) || istype(src.loc, /turf/simulated/floor/asteroid)))
///// Z-Level Stuff
- qdel(src)
+ return INITIALIZE_HINT_QDEL
for(var/obj/structure/lattice/LAT in src.loc)
if(LAT != src)
qdel(LAT)
- icon = 'icons/obj/smoothlattice.dmi'
- icon_state = "latticeblank"
- updateOverlays()
- for (var/dir in cardinal)
- var/obj/structure/lattice/L
- if(locate(/obj/structure/lattice, get_step(src, dir)))
- L = locate(/obj/structure/lattice, get_step(src, dir))
- L.updateOverlays()
-
-/obj/structure/lattice/Destroy()
- for (var/dir in cardinal)
- var/obj/structure/lattice/L
- if(locate(/obj/structure/lattice, get_step(src, dir)))
- L = locate(/obj/structure/lattice, get_step(src, dir))
- L.updateOverlays(src.loc)
- ..()
/obj/structure/lattice/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
- return
if(2.0)
qdel(src)
- return
- if(3.0)
- return
- else
return
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob)
@@ -58,25 +47,5 @@
var/obj/item/weapon/weldingtool/WT = C
if(WT.remove_fuel(0, user))
user << "Slicing lattice joints ... "
- getFromPool(/obj/item/stack/rods, src.loc)
+ new /obj/item/stack/rods(src.loc)
qdel(src)
-
- return
-
-/obj/structure/lattice/proc/updateOverlays()
- //if(!(istype(src.loc, /turf/space)))
- // qdel(src)
- spawn(1)
- overlays = list()
-
- var/dir_sum = 0
-
- for (var/direction in cardinal)
- if(locate(/obj/structure/lattice, get_step(src, direction)))
- dir_sum += direction
- else
- if(!(istype(get_step(src, direction), /turf/space)))
- dir_sum += direction
-
- icon_state = "lattice[dir_sum]"
- return
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index e88ad682ed9..b272f50f2aa 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -69,7 +69,7 @@
var/datum/nano_module/appearance_changer/AC = ui_users[user]
qdel(AC)
ui_users.Cut()
- ..()
+ return ..()
// The following mirror is ~special~.
/obj/structure/mirror/raider
@@ -121,4 +121,4 @@
var/datum/nano_module/appearance_changer/AC = ui_users[user]
qdel(AC)
ui_users.Cut()
- ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 58f89dc3fff..0b0b9860258 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -189,8 +189,8 @@
var/_wifi_id
var/datum/wifi/receiver/button/crematorium/wifi_receiver
-/obj/structure/crematorium/initialize()
- ..()
+/obj/structure/crematorium/Initialize()
+ . = ..()
if(_wifi_id)
wifi_receiver = new(_wifi_id, src)
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 3647d565f7e..7d9978afbeb 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -7,7 +7,8 @@
anchored = 1
var/notices = 0
-/obj/structure/noticeboard/initialize()
+/obj/structure/noticeboard/Initialize()
+ . = ..()
for(var/obj/item/I in loc)
if(notices > 4) break
if(istype(I, /obj/item/weapon/paper))
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index 5615148fffd..86cbbc53d33 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -61,7 +61,7 @@
if(T)
if(istype(T, /turf/simulated/floor))
T.blocks_air = 0
- ..()
+ return ..()
//Airtight plastic flaps made for the kitchen freezer, blocks atmos but not movement
@@ -81,7 +81,7 @@
if(T)
if(istype(T, /turf/simulated/floor))
T.blocks_air = 0
- ..()
+ return ..()
/obj/structure/plasticflaps/airtight/CanPass(atom/A, turf/T)
- return 1//Blocks nothing except air
\ No newline at end of file
+ return 1//Blocks nothing except air
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 33995539774..5c2cab0ac35 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -30,7 +30,8 @@ FLOOR SAFES
tumbler_2_open = rand(0, 72)
-/obj/structure/safe/initialize()
+/obj/structure/safe/Initialize()
+ . = ..()
for(var/obj/item/I in loc)
if(space >= maxspace)
return
@@ -171,8 +172,8 @@ obj/structure/safe/ex_act(severity)
level = 1 //underfloor
layer = 2.5
-/obj/structure/safe/floor/initialize()
- ..()
+/obj/structure/safe/floor/Initialize()
+ . = ..()
var/turf/T = loc
if(istype(T) && !T.is_plating())
hide(1)
@@ -188,11 +189,9 @@ obj/structure/safe/ex_act(severity)
/obj/structure/safe/station
name = "corporate safe"
-/obj/structure/safe/station/New()
-
- ..()
+/obj/structure/safe/station/Initialize()
+ . = ..()
new /obj/random/highvalue(src)
new /obj/random/highvalue(src)
new /obj/random/highvalue(src)
new /obj/random/highvalue(src)
- return
diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm
index 10fa149e8b4..3e162068f7a 100644
--- a/code/game/objects/structures/simple_doors.dm
+++ b/code/game/objects/structures/simple_doors.dm
@@ -42,7 +42,7 @@
/obj/structure/simple_door/Destroy()
processing_objects -= src
update_nearby_tiles()
- ..()
+ return ..()
/obj/structure/simple_door/get_material()
return material
@@ -196,4 +196,4 @@
..(newloc, "wood")
/obj/structure/simple_door/resin/New(var/newloc,var/material_name)
- ..(newloc, "resin")
\ No newline at end of file
+ ..(newloc, "resin")
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 669f88110e1..4dd8e8324dc 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -20,8 +20,8 @@
var/material/padding_material
var/base_icon = "bed"
-/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material)
- ..(newloc)
+/obj/structure/bed/Initialize(mapload, var/new_material, var/new_padding_material)
+ . = ..()
color = null
if(!new_material)
new_material = DEFAULT_WALL_MATERIAL
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index b91beabfaf8..e20bb734474 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -92,32 +92,32 @@
desc = "It's a chair. It looks comfy."
icon_state = "comfychair_preview"
-/obj/structure/bed/chair/comfy/brown/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","leather")
+/obj/structure/bed/chair/comfy/brown/Initialize(mapload,var/newmaterial)
+ . = ..(mapload,"steel","leather")
-/obj/structure/bed/chair/comfy/red/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","carpet")
+/obj/structure/bed/chair/comfy/red/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","carpet")
-/obj/structure/bed/chair/comfy/teal/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","teal")
+/obj/structure/bed/chair/comfy/teal/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","teal")
-/obj/structure/bed/chair/comfy/black/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","black")
+/obj/structure/bed/chair/comfy/black/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","black")
-/obj/structure/bed/chair/comfy/green/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","green")
+/obj/structure/bed/chair/comfy/green/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","green")
-/obj/structure/bed/chair/comfy/purp/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","purple")
+/obj/structure/bed/chair/comfy/purp/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","purple")
-/obj/structure/bed/chair/comfy/blue/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","blue")
+/obj/structure/bed/chair/comfy/blue/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","blue")
-/obj/structure/bed/chair/comfy/beige/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","beige")
+/obj/structure/bed/chair/comfy/beige/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","beige")
-/obj/structure/bed/chair/comfy/lime/New(var/newloc,var/newmaterial)
- ..(newloc,"steel","lime")
+/obj/structure/bed/chair/comfy/lime/Initialize(var/mapload,var/newmaterial)
+ . = ..(mapload,"steel","lime")
/obj/structure/bed/chair/office
anchored = 0
@@ -177,8 +177,14 @@
/obj/structure/bed/chair/office/dark
icon_state = "officechair_dark"
-/obj/structure/bed/chair/office/New()
- ..()
+/obj/structure/bed/chair/office/bridge
+ name = "command chair"
+ desc = "It exudes authority... and looks about as comfortable as a brick."
+ icon_state = "bridge"
+ anchored = 1
+
+/obj/structure/bed/chair/office/Initialize()
+ . = ..()
var/image/I = image(icon, "[icon_state]_over")
I.layer = FLY_LAYER
overlays += I
@@ -197,11 +203,12 @@
return
..()
-/obj/structure/bed/chair/wood/New(var/newloc)
- ..(newloc, "wood")
+/obj/structure/bed/chair/wood/Initialize(mapload)
+ . = ..(mapload, "wood")
var/image/I = image(icon, "[icon_state]_over")
I.layer = FLY_LAYER
overlays += I
/obj/structure/bed/chair/wood/wings
icon_state = "wooden_chair_wings"
+
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 0e7546f271d..9a632594479 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -11,26 +11,28 @@
var/list/oxytanks = list() //sorry for the similar var names
var/list/platanks = list()
-
/obj/structure/dispenser/oxygen
phorontanks = 0
/obj/structure/dispenser/phoron
oxygentanks = 0
-
-/obj/structure/dispenser/New()
+/obj/structure/dispenser/Initialize()
+ . = ..()
update_icon()
-
/obj/structure/dispenser/update_icon()
- overlays.Cut()
+ cut_overlays()
switch(oxygentanks)
- if(1 to 3) overlays += "oxygen-[oxygentanks]"
- if(4 to INFINITY) overlays += "oxygen-4"
+ if(1 to 3)
+ add_overlay("oxygen-[oxygentanks]")
+ if(4 to INFINITY)
+ add_overlay("oxygen-4")
switch(phorontanks)
- if(1 to 4) overlays += "phoron-[phorontanks]"
- if(5 to INFINITY) overlays += "phoron-5"
+ if(1 to 4)
+ add_overlay("phoron-[phorontanks]")
+ if(5 to INFINITY)
+ add_overlay("phoron-5")
/obj/structure/dispenser/attack_ai(mob/user as mob)
if(user.Adjacent(src))
diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm
index 47a2f53fb3f..41ad3f3cb6a 100644
--- a/code/game/objects/structures/transit_tubes.dm
+++ b/code/game/objects/structures/transit_tubes.dm
@@ -51,7 +51,7 @@
for(var/atom/movable/AM in contents)
AM.loc = loc
- ..()
+ return ..()
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index c7bc593fcad..4a8c794f441 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -182,17 +182,19 @@
spawn(50)
if(src && on)
ismist = 1
- mymist = getFromPool(/obj/effect/mist,loc)
+ mymist = new /obj/effect/mist(loc)
else
ismist = 1
- mymist = getFromPool(/obj/effect/mist,loc)
+ mymist = new /obj/effect/mist(loc)
else if(ismist)
ismist = 1
- mymist = getFromPool(/obj/effect/mist,loc)
- spawn(250)
- if(src && !on)
- qdel(mymist)
- ismist = 0
+ mymist = new /obj/effect/mist(loc)
+ addtimer(CALLBACK(src, .proc/clear_mist), 250, TIMER_OVERRIDE)
+
+/obj/machinery/shower/proc/clear_mist()
+ if (!on)
+ QDEL_NULL(mymist)
+ ismist = FALSE
/obj/machinery/shower/Crossed(atom/movable/O)
..()
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 83676aeb43d..76f1055ba0a 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -42,7 +42,7 @@ obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0)
obj/structure/windoor_assembly/Destroy()
density = 0
update_nearby_tiles()
- ..()
+ return ..()
/obj/structure/windoor_assembly/update_icon()
icon_state = "[facing]_[secure]windoor_assembly[state]"
@@ -80,7 +80,7 @@ obj/structure/windoor_assembly/Destroy()
user << "You dissasembled the windoor assembly! "
new /obj/item/stack/material/glass/reinforced(get_turf(src), 5)
if(secure)
- getFromPool(/obj/item/stack/rods, get_turf(src), 4)
+ new /obj/item/stack/rods(get_turf(src), 4)
qdel(src)
else
user << "You need more welding fuel to dissassemble the windoor assembly. "
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 262e9414378..c156582e6f5 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -91,15 +91,16 @@
index = 0
while(index < 2)
new shardtype(loc) //todo pooling?
- if(reinf) getFromPool(/obj/item/stack/rods, loc)
+ if(reinf)
+ new /obj/item/stack/rods(loc)
index++
else
new shardtype(loc) //todo pooling?
- if(reinf) getFromPool(/obj/item/stack/rods, loc)
+ if(reinf)
+ new /obj/item/stack/rods(loc)
qdel(src)
return
-
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
var/proj_damage = Proj.get_structure_damage()
@@ -325,8 +326,8 @@
update_nearby_tiles(need_rebuild=1)
return
-/obj/structure/window/New(Loc, start_dir=null, constructed=0)
- ..()
+/obj/structure/window/Initialize(mapload, start_dir = null, constructed=0)
+ . = ..()
//player-constructed windows
if (constructed)
@@ -351,7 +352,7 @@
for(var/obj/structure/window/W in orange(location, 1))
W.update_icon()
loc = location
- ..()
+ return ..()
/obj/structure/window/Move()
diff --git a/code/game/objects/structures/window_spawner.dm b/code/game/objects/structures/window_spawner.dm
index 966d6e8e0e1..d904ed91e94 100644
--- a/code/game/objects/structures/window_spawner.dm
+++ b/code/game/objects/structures/window_spawner.dm
@@ -25,12 +25,15 @@
/obj/effect/wingrille_spawn/attack_generic()
activate()
-/obj/effect/wingrille_spawn/initialize()
+/obj/effect/wingrille_spawn/Initialize(mapload)
+ if (!win_path)
+ return INITIALIZE_HINT_QDEL
+
..()
- if(!win_path)
- return
- if(ticker && ticker.current_state < GAME_STATE_PLAYING)
- activate()
+
+ activate()
+
+ return INITIALIZE_HINT_LATEQDEL
/obj/effect/wingrille_spawn/proc/activate()
if(activated) return
@@ -55,9 +58,6 @@
else
neighbours |= other
activated = 1
- for(var/obj/effect/wingrille_spawn/other in neighbours)
- if(!other.activated) other.activate()
- qdel(src)
/obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W)
return
diff --git a/code/game/periodic_news.dm b/code/game/periodic_news.dm
index d9c96d992cc..a6ef3e49564 100644
--- a/code/game/periodic_news.dm
+++ b/code/game/periodic_news.dm
@@ -118,7 +118,7 @@
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots)
proc/process_newscaster()
- check_for_newscaster_updates(ticker.mode.newscaster_announcements)
+ check_for_newscaster_updates(SSticker.mode.newscaster_announcements)
var/global/tmp/announced_news_types = list()
proc/check_for_newscaster_updates(type)
diff --git a/code/game/response_team.dm b/code/game/response_team.dm
index 2d7121ae1e1..48257198b1c 100644
--- a/code/game/response_team.dm
+++ b/code/game/response_team.dm
@@ -14,10 +14,7 @@ var/can_call_ert
if(!holder)
usr << "Only administrators may use this command. "
return
- if(!ticker)
- usr << "The game hasn't started yet! "
- return
- if(ticker.current_state == 1)
+ if(!ROUND_IS_STARTED)
usr << "The round hasn't started yet! "
return
if(send_emergency_team)
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index 6bd631e88f3..e3236f48c11 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -19,6 +19,12 @@
density = 1
anchored = 1.0
+ CanPass(atom/movable/mover, turf/target, height, air_group)
+ if (!height || air_group)
+ return FALSE
+ else
+ return ..()
+
/obj/structure/shuttle/engine/heater
name = "heater"
icon_state = "heater"
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 2838b934b7f..a4c20342206 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -183,9 +183,9 @@ var/const/FALLOFF_SOUNDS = 0.5
/client/proc/playtitlemusic()
- if(!ticker || !ticker.login_music) return
+ if(!SSticker.login_music) return
if(prefs.toggles & SOUND_LOBBY)
- src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS
+ src << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS
/proc/get_rand_frequency()
return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index d4af3d80e3f..dee50750ce1 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -1,5 +1,5 @@
//Config stuff
-#define SUPPLY_DOCKZ 2 //Z-level of the Dock.
+#define SUPPLY_DOCKZ 3 //Z-level of the Dock.
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
@@ -7,22 +7,6 @@
//Supply packs are in /code/defines/obj/supplypacks.dm
//Computers are in /code/game/machinery/computer/supply.dm
-var/datum/controller/supply/supply_controller = new()
-
-var/list/mechtoys = list(
- /obj/item/toy/prize/ripley,
- /obj/item/toy/prize/fireripley,
- /obj/item/toy/prize/deathripley,
- /obj/item/toy/prize/gygax,
- /obj/item/toy/prize/durand,
- /obj/item/toy/prize/honk,
- /obj/item/toy/prize/marauder,
- /obj/item/toy/prize/seraph,
- /obj/item/toy/prize/mauler,
- /obj/item/toy/prize/odysseus,
- /obj/item/toy/prize/phazon
-)
-
/obj/item/weapon/paper/manifest
name = "supply manifest"
var/is_copy = 1
@@ -31,11 +15,13 @@ var/list/mechtoys = list(
name = "Supply Shuttle"
icon_state = "shuttle3"
requires_power = 0
+ station_area = 1
/area/supply/dock
name = "Supply Shuttle"
icon_state = "shuttle3"
requires_power = 0
+ centcomm_area = 1
/*
@@ -53,168 +39,3 @@ var/list/mechtoys = list(
var/datum/supply_packs/object = null
var/orderedby = null
var/comment = null
-
-/datum/controller/supply
- //supply points
- var/points = 50
- var/points_per_process = 1
- var/points_per_slip = 2
- var/points_per_crate = 5
- var/points_per_platinum = 5 // 5 points per sheet
- var/points_per_phoron = 5
- //control
- var/ordernum
- var/list/shoppinglist = list()
- var/list/requestlist = list()
- var/list/supply_packs = list()
- //shuttle movement
- var/movetime = 1200
- var/datum/shuttle/ferry/supply/shuttle
-
- New()
- ordernum = rand(1,9000)
-
- for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs))
- var/datum/supply_packs/P = new typepath()
- supply_packs[P.name] = P
-
- // Supply shuttle ticker - handles supply point regeneration
- // This is called by the process scheduler every thirty seconds
- proc/process()
- points += points_per_process
-
- //To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types.
- proc/forbidden_atoms_check(atom/A)
- if(istype(A,/mob/living))
- 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/i=1, i<=A.contents.len, i++)
- var/atom/B = A.contents[i]
- if(.(B))
- return 1
-
- //Sellin
- proc/sell()
- var/area/area_shuttle = shuttle.get_location_area()
- if(!area_shuttle) return
-
- var/phoron_count = 0
- var/plat_count = 0
-
- for(var/atom/movable/MA in area_shuttle)
- if(MA.anchored) continue
-
- // Must be in a crate!
- if(istype(MA,/obj/structure/closet/crate))
- callHook("sell_crate", list(MA, area_shuttle))
-
- points += points_per_crate
- var/find_slip = 1
-
- for(var/atom in MA)
- // Sell manifests
- var/atom/A = atom
- if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
- var/obj/item/weapon/paper/manifest/slip = A
- if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
- points += points_per_slip
- find_slip = 0
- continue
-
- // Sell phoron and platinum
- if(istype(A, /obj/item/stack))
- var/obj/item/stack/P = A
- switch(P.get_material_name())
- if("phoron") phoron_count += P.get_amount()
- if("platinum") plat_count += P.get_amount()
- qdel(MA)
-
- if(phoron_count)
- points += phoron_count * points_per_phoron
-
- if(plat_count)
- points += plat_count * points_per_platinum
-
- //Buyin
- proc/buy()
- if(!shoppinglist.len) return
-
- var/area/area_shuttle = shuttle.get_location_area()
- if(!area_shuttle) return
-
- var/list/clear_turfs = list()
-
- for(var/turf/T in area_shuttle)
- if(T.density) continue
- var/contcount
- for(var/atom/A in T.contents)
- if(!A.simulated)
- continue
- contcount++
- if(contcount)
- continue
- clear_turfs += T
-
- for(var/S in shoppinglist)
- if(!clear_turfs.len) break
- var/i = rand(1,clear_turfs.len)
- var/turf/pickedloc = clear_turfs[i]
- clear_turfs.Cut(i,i+1)
-
- var/datum/supply_order/SO = S
- var/datum/supply_packs/SP = SO.object
-
- var/obj/A = new SP.containertype(pickedloc)
- A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
-
- //supply manifest generation begin
-
- var/obj/item/weapon/paper/manifest/slip
- if(!SP.contraband)
- slip = new /obj/item/weapon/paper/manifest(A)
- slip.is_copy = 0
- slip.info = "[command_name()] Shipping Manifest "
- slip.info +="Order #[SO.ordernum] "
- slip.info +="Destination: [station_name] "
- slip.info +="[shoppinglist.len] PACKAGES IN THIS SHIPMENT "
- slip.info +="CONTENTS:"
-
- //spawn the stuff, finish generating the manifest while you're at it
- if(SP.access)
- if(isnum(SP.access))
- A.req_access = list(SP.access)
- else if(islist(SP.access))
- var/list/L = SP.access // access var is a plain var, we need a list
- A.req_access = L.Copy()
- else
- world << "Supply pack with invalid access restriction [SP.access] encountered! "
-
- var/list/contains
- if(istype(SP,/datum/supply_packs/randomised))
- var/datum/supply_packs/randomised/SPR = SP
- contains = list()
- if(SPR.contains.len)
- for(var/j=1,j<=SPR.num_contained,j++)
- contains += pick(SPR.contains)
- else
- contains = SP.contains
-
- for(var/typepath in contains)
- if(!typepath) continue
- var/atom/B2 = new typepath(A)
- if(SP.amount && B2:amount) B2:amount = SP.amount
- if(slip) slip.info += "[B2.name] " //add the item to the manifest
-
- //manifest finalisation
- if(slip)
- slip.info += " "
- slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS "
-
- shoppinglist.Cut()
- return
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index e08eb8ab5de..244492f7063 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -184,3 +184,15 @@ var/list/flooring_types
has_damage_range = 6
flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
can_paint = null
+
+/decl/flooring/reinforced/ramp
+ name = "foot ramp"
+ desc = "An archaic means of locomotion along the Z axis."
+ icon = 'icons/turf/flooring/tiles.dmi'
+ icon_base = "ramptop"
+ build_type = null
+ flags = TURF_ACID_IMMUNE | TURF_CAN_BREAK
+ can_paint = 1
+
+/decl/flooring/reinforced/ramp/bottom
+ icon_base = "rampbot"
\ No newline at end of file
diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm
index 66434456f92..ba9a9794316 100644
--- a/code/game/turfs/flooring/flooring_decals.dm
+++ b/code/game/turfs/flooring/flooring_decals.dm
@@ -9,13 +9,7 @@ var/list/floor_decals = list()
layer = TURF_LAYER + 0.01
var/supplied_dir
-/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour)
- supplied_dir = newdir
- if(newcolour) color = newcolour
- ..(newloc)
-
-/obj/effect/floor_decal/initialize()
- if(supplied_dir) set_dir(supplied_dir)
+/obj/effect/floor_decal/LateInitialize()
var/turf/T = get_turf(src)
if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor))
var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]"
@@ -27,20 +21,36 @@ var/list/floor_decals = list()
floor_decals[cache_key] = I
if(!T.decals) T.decals = list()
T.decals |= floor_decals[cache_key]
- T.overlays |= floor_decals[cache_key]
+ T.add_overlay(floor_decals[cache_key])
+
qdel(src)
- return
+
+/obj/effect/floor_decal/Initialize(mapload, var/newdir, var/newcolour, bypass = FALSE)
+ if (bypass && !mapload)
+ return ..(mapload)
+
+ if (newdir)
+ supplied_dir = newdir
+
+ if(newcolour)
+ color = newcolour
+
+ if (supplied_dir)
+ set_dir(supplied_dir)
+
+ ..()
+ return INITIALIZE_HINT_LATELOAD
/obj/effect/floor_decal/reset
name = "reset marker"
-/obj/effect/floor_decal/reset/initialize()
+/obj/effect/floor_decal/reset/Initialize(mapload)
+ ..(mapload, bypass = TRUE)
var/turf/T = get_turf(src)
- if(T.decals && T.decals.len)
+ if(LAZYLEN(T.decals))
T.decals.Cut()
T.update_icon()
qdel(src)
- return
/obj/effect/floor_decal/corner
icon_state = "corner_white"
@@ -287,9 +297,9 @@ var/list/floor_decals = list()
name = "random asteroid rubble"
icon_state = "asteroid0"
-/obj/effect/floor_decal/asteroid/New()
- icon_state = "asteroid[rand(0,9)]"
+/obj/effect/floor_decal/asteroid/Initialize()
..()
+ icon_state = "asteroid[rand(0,9)]"
/obj/effect/floor_decal/chapel
name = "chapel"
@@ -391,4 +401,4 @@ var/list/floor_decals = list()
icon_state = "white_v"
/obj/effect/floor_decal/sign/p
- icon_state = "white_p"
\ No newline at end of file
+ icon_state = "white_p"
diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm
index 33b54cc38bc..38d2f6fc846 100644
--- a/code/game/turfs/flooring/flooring_premade.dm
+++ b/code/game/turfs/flooring/flooring_premade.dm
@@ -78,10 +78,10 @@
oxygen = 0
nitrogen = 0
-/turf/simulated/floor/reinforced/n20/New()
- ..()
- sleep(-1)
- if(!air) make_air()
+/turf/simulated/floor/reinforced/n20/Initialize()
+ . = ..()
+ if(!air)
+ make_air()
air.adjust_gas("sleeping_agent", ATMOSTANK_NITROUSOXIDE)
/turf/simulated/floor/cult
@@ -130,6 +130,18 @@
icon_state = "freezer"
initial_flooring = /decl/flooring/tiling/freezer
+/turf/simulated/floor/tiled/ramp
+ name = "foot ramp"
+ icon = 'icons/turf/flooring/tiles.dmi'
+ icon_state = "ramptop"
+ initial_flooring = /decl/flooring/reinforced/ramp
+
+/turf/simulated/floor/tiled/ramp/bottom
+ name = "foot ramp"
+ icon = 'icons/turf/flooring/tiles.dmi'
+ icon_state = "rampbot"
+ initial_flooring = /decl/flooring/reinforced/ramp/bottom
+
/turf/simulated/floor/lino
name = "lino"
icon = 'icons/turf/flooring/linoleum.dmi'
@@ -215,6 +227,6 @@
/turf/simulated/floor/beach/water/ocean
icon_state = "seadeep"
-/turf/simulated/floor/beach/water/New()
- ..()
- overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1)
+/turf/simulated/floor/beach/water/Initialize()
+ . = ..()
+ add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water5","layer"=MOB_LAYER+0.1))
diff --git a/code/game/turfs/initialization/init.dm b/code/game/turfs/initialization/init.dm
index eda55c47ae9..d5e6d17cb64 100644
--- a/code/game/turfs/initialization/init.dm
+++ b/code/game/turfs/initialization/init.dm
@@ -4,9 +4,9 @@
/area
var/datum/turf_initializer/turf_initializer = null
-/area/initialize()
- ..()
- for(var/turf/simulated/T in src)
- T.initialize()
+/area/Initialize(mapload)
+ . = ..()
+ if (mapload)
if(turf_initializer)
- turf_initializer.initialize(T)
+ for(var/turf/T in src)
+ turf_initializer.initialize(T)
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 977d25059b5..3075b0e4c30 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -14,7 +14,8 @@
var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to
var/dirt = 0
-// This is not great.
+ var/unwet_timer // Used to keep track of the unwet timer & delete it on turf change so we don't runtime if the new turf is not simulated.
+
/turf/simulated/proc/wet_floor(var/wet_val = 1)
if(wet_val < wet)
return
@@ -22,33 +23,32 @@
if(!wet)
wet = wet_val
wet_overlay = image('icons/effects/water.dmi',src,"wet_floor")
- overlays += wet_overlay
+ add_overlay(wet_overlay, TRUE)
- schedule_task_with_source_in(180 SECONDS, src, .proc/unwet_floor)
+ unwet_timer = addtimer(CALLBACK(src, .proc/unwet_floor), 120 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE)
/turf/simulated/proc/unwet_floor()
--wet
if (wet < 1)
wet = 0
if(wet_overlay)
- overlays -= wet_overlay
+ cut_overlay(wet_overlay, TRUE)
wet_overlay = null
else
- schedule_task_with_source_in(180 SECONDS, src, .proc/unwet_floor)
+ unwet_timer = addtimer(CALLBACK(src, .proc/unwet_floor), 120 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE)
/turf/simulated/clean_blood()
for(var/obj/effect/decal/cleanable/blood/B in contents)
B.clean_blood()
..()
-/turf/simulated/New()
- ..()
- if(istype(loc, /area/chapel))
- holy = 1
- levelupdate()
-
-/turf/simulated/proc/initialize()
- return
+/turf/simulated/Initialize(mapload)
+ if (mapload)
+ if(istype(loc, /area/chapel))
+ holy = 1
+
+ . = ..()
+ levelupdate(mapload)
/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808")
var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src
@@ -161,3 +161,17 @@
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
else if( istype(M, /mob/living/silicon/robot ))
new /obj/effect/decal/cleanable/blood/oil(src)
+
+/turf/simulated/Destroy()
+ //Yeah, we're just going to rebuild the whole thing.
+ //Despite this being called a bunch during explosions,
+ //the zone will only really do heavy lifting once.
+ if (zone)
+ zone.rebuild()
+
+ // Letting this timer continue to exist can cause runtimes, so we delete it.
+ if (unwet_timer)
+ // deltimer will no-op if the timer is already deleted, so we don't need to check the timer still exists.
+ deltimer(unwet_timer)
+
+ return ..()
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index df3be0077f5..9090a743f27 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -26,8 +26,8 @@
/turf/simulated/floor/is_plating()
return !flooring
-/turf/simulated/floor/New(var/newloc, var/floortype)
- ..(newloc)
+/turf/simulated/floor/Initialize(mapload, var/floortype)
+ . = ..()
if(!floortype && initial_flooring)
floortype = initial_flooring
if(floortype)
@@ -43,7 +43,7 @@
//This proc auto corrects the grass tiles' siding.
/turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update)
- overlays.Cut()
+ cut_overlays()
if(islist(decals))
decals.Cut()
decals = null
diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm
index cdde744bd45..c79478dda52 100644
--- a/code/game/turfs/simulated/floor_icon.dm
+++ b/code/game/turfs/simulated/floor_icon.dm
@@ -1,6 +1,7 @@
var/list/flooring_cache = list()
/turf/simulated/floor/update_icon(var/update_neighbors)
+ cut_overlays()
if(lava)
return
@@ -20,24 +21,23 @@ var/list/flooring_cache = list()
flooring_override = icon_state
// Apply edges, corners, and inner corners.
- overlays.Cut()
var/has_border = 0
if(flooring.flags & TURF_HAS_EDGES)
for(var/step_dir in cardinal)
var/turf/simulated/floor/T = get_step(src, step_dir)
if(!istype(T) || !T.flooring || T.flooring.name != flooring.name)
has_border |= step_dir
- overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[step_dir]", "[flooring.icon_base]_edges", step_dir))
// There has to be a concise numerical way to do this but I am too noob.
if((has_border & NORTH) && (has_border & EAST))
- overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHEAST]", "[flooring.icon_base]_edges", NORTHEAST))
if((has_border & NORTH) && (has_border & WEST))
- overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[NORTHWEST]", "[flooring.icon_base]_edges", NORTHWEST))
if((has_border & SOUTH) && (has_border & EAST))
- overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHEAST]", "[flooring.icon_base]_edges", SOUTHEAST))
if((has_border & SOUTH) && (has_border & WEST))
- overlays |= get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-edge-[SOUTHWEST]", "[flooring.icon_base]_edges", SOUTHWEST))
if(flooring.flags & TURF_HAS_CORNERS)
// As above re: concise numerical way to do this.
@@ -45,32 +45,32 @@ var/list/flooring_cache = list()
if(!(has_border & EAST))
var/turf/simulated/floor/T = get_step(src, NORTHEAST)
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
- overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHEAST]", "[flooring.icon_base]_corners", NORTHEAST))
if(!(has_border & WEST))
var/turf/simulated/floor/T = get_step(src, NORTHWEST)
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
- overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[NORTHWEST]", "[flooring.icon_base]_corners", NORTHWEST))
if(!(has_border & SOUTH))
if(!(has_border & EAST))
var/turf/simulated/floor/T = get_step(src, SOUTHEAST)
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
- overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHEAST]", "[flooring.icon_base]_corners", SOUTHEAST))
if(!(has_border & WEST))
var/turf/simulated/floor/T = get_step(src, SOUTHWEST)
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
- overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST))
- if(decals && decals.len)
- overlays |= decals
+ if(LAZYLEN(decals))
+ add_overlay(decals)
if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo
icon = 'icons/turf/flooring/plating.dmi'
icon_state = "dmg[rand(1,4)]"
else if(flooring)
if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK))
- overlays |= get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]_broken[broken]")
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]_broken[broken]"))
if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN))
- overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]")
+ add_overlay(get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]"))
if(update_neighbors)
for(var/turf/simulated/floor/F in range(src, 1))
diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm
index a96acc7d395..ed93bc3da93 100644
--- a/code/game/turfs/simulated/wall_attacks.dm
+++ b/code/game/turfs/simulated/wall_attacks.dm
@@ -129,14 +129,14 @@
thermitemelt(user)
return
- else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
thermitemelt(user)
return
else if( istype(W, /obj/item/weapon/melee/energy/blade) )
var/obj/item/weapon/melee/energy/blade/EB = W
- EB.spark_system.queue()
+ spark(EB, 5)
user << "You slash \the [src] with \the [EB]; the thermite ignites! "
playsound(src, "sparks", 50, 1)
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
@@ -271,7 +271,7 @@
else
user << "You need more welding fuel to complete this task. "
return
- else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ else if (istype(W, /obj/item/weapon/gun/energy/plasmacutter))
cut_cover = 1
if(cut_cover)
user << "You begin slicing through the metal cover. "
@@ -311,7 +311,7 @@
else
user << "You need more welding fuel to complete this task. "
return
- else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter))
+ else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter))
cut_cover = 1
if(cut_cover)
user << "You begin slicing through the support rods. "
diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm
index dc7874b2aaf..7852ebef3e3 100644
--- a/code/game/turfs/simulated/wall_icon.dm
+++ b/code/game/turfs/simulated/wall_icon.dm
@@ -42,36 +42,37 @@
if(!damage_overlays[1]) //list hasn't been populated
generate_overlays()
- overlays.Cut()
+ cut_overlays()
+ var/list/overlays_to_add = list()
var/image/I
if(!density)
I = image('icons/turf/wall_masks.dmi', "[material.icon_base]fwall_open")
I.color = material.icon_colour
- overlays += I
+ add_overlay(I)
return
for(var/i = 1 to 4)
I = image('icons/turf/wall_masks.dmi', "[material.icon_base][wall_connections[i]]", dir = 1<<(i-1))
I.color = material.icon_colour
- overlays += I
+ overlays_to_add += I
if(reinf_material)
if(construction_stage != null && construction_stage < 6)
I = image('icons/turf/wall_masks.dmi', "reinf_construct-[construction_stage]")
I.color = reinf_material.icon_colour
- overlays += I
+ overlays_to_add += I
else
if("[reinf_material.icon_reinf]0" in icon_states('icons/turf/wall_masks.dmi'))
// Directional icon
for(var/i = 1 to 4)
I = image('icons/turf/wall_masks.dmi', "[reinf_material.icon_reinf][wall_connections[i]]", dir = 1<<(i-1))
I.color = reinf_material.icon_colour
- overlays += I
+ overlays_to_add += I
else
I = image('icons/turf/wall_masks.dmi', reinf_material.icon_reinf)
I.color = reinf_material.icon_colour
- overlays += I
+ overlays_to_add += I
if(damage != 0)
var/integrity = material.integrity
@@ -82,8 +83,9 @@
if(overlay > damage_overlays.len)
overlay = damage_overlays.len
- overlays += damage_overlays[overlay]
- return
+ overlays_to_add += damage_overlays[overlay]
+
+ add_overlay(overlays_to_add)
/turf/simulated/wall/proc/generate_overlays()
var/alpha_inc = 256 / damage_overlays.len
diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm
index 46498d9be56..3b5f0246fae 100644
--- a/code/game/turfs/simulated/wall_types.dm
+++ b/code/game/turfs/simulated/wall_types.dm
@@ -1,45 +1,68 @@
/turf/simulated/wall/r_wall
icon_state = "rgeneric"
-/turf/simulated/wall/r_wall/New(var/newloc)
- ..(newloc, "plasteel","plasteel") //3strong
+
+/turf/simulated/wall/r_wall/Initialize(mapload)
+ . = ..(mapload, "plasteel","plasteel") //3strong
/turf/simulated/wall/cult
icon_state = "cult"
-/turf/simulated/wall/cult/New(var/newloc)
- ..(newloc,"cult","cult2")
+
+/turf/simulated/wall/cult/Initialize(mapload)
+ . = ..(mapload,"cult","cult2")
+
/turf/unsimulated/wall/cult
name = "cult wall"
desc = "Hideous images dance beneath the surface."
- icon = 'icons/turf/wall_masks.dmi'
+ icon = 'icons/turf/smooth/cult_wall.dmi'
+ canSmoothWith = null
+ smooth = SMOOTH_TRUE
icon_state = "cult"
-/turf/simulated/wall/iron/New(var/newloc)
- ..(newloc,"iron")
-/turf/simulated/wall/uranium/New(var/newloc)
- ..(newloc,"uranium")
-/turf/simulated/wall/diamond/New(var/newloc)
- ..(newloc,"diamond")
-/turf/simulated/wall/gold/New(var/newloc)
- ..(newloc,"gold")
-/turf/simulated/wall/silver/New(var/newloc)
- ..(newloc,"silver")
-/turf/simulated/wall/phoron/New(var/newloc)
- ..(newloc,"phoron")
-/turf/simulated/wall/sandstone/New(var/newloc)
- ..(newloc,"sandstone")
-/turf/simulated/wall/ironphoron/New(var/newloc)
- ..(newloc,"iron","phoron")
-/turf/simulated/wall/golddiamond/New(var/newloc)
- ..(newloc,"gold","diamond")
-/turf/simulated/wall/silvergold/New(var/newloc)
- ..(newloc,"silver","gold")
-/turf/simulated/wall/sandstonediamond/New(var/newloc)
- ..(newloc,"sandstone","diamond")
+/turf/simulated/wall/rusty
+ icon_state = "arust"
+ desc = "Rust stains this ancient wall."
+/turf/simulated/wall/rusty/Initialize(mapload)
+ ..(mapload,"rust","rust")
+
+/turf/simulated/wall/iron/Initialize(mapload)
+ . = ..(mapload,"iron")
+
+/turf/simulated/wall/uranium/Initialize(mapload)
+ . = ..(mapload,"uranium")
+
+/turf/simulated/wall/diamond/Initialize(mapload)
+ . = ..(mapload,"diamond")
+
+/turf/simulated/wall/gold/Initialize(mapload)
+ . = ..(mapload,"gold")
+
+/turf/simulated/wall/silver/Initialize(mapload)
+ . = ..(mapload,"silver")
+
+/turf/simulated/wall/phoron/Initialize(mapload)
+ . = ..(mapload,"phoron")
+
+/turf/simulated/wall/sandstone/Initialize(mapload)
+ . = ..(mapload,"sandstone")
+
+/turf/simulated/wall/ironphoron/Initialize(mapload)
+ . = ..(mapload,"iron","phoron")
+
+/turf/simulated/wall/golddiamond/Initialize(mapload)
+ . = ..(mapload,"gold","diamond")
+
+/turf/simulated/wall/silvergold/Initialize(mapload)
+ . = ..(mapload,"silver","gold")
+
+/turf/simulated/wall/sandstonediamond/Initialize(mapload)
+ . = ..(mapload,"sandstone","diamond")
// Kind of wondering if this is going to bite me in the butt.
-/turf/simulated/wall/voxshuttle/New(var/newloc)
- ..(newloc,"voxalloy")
+/turf/simulated/wall/voxshuttle/Initialize(mapload)
+ . = ..(mapload,"voxalloy")
+
/turf/simulated/wall/voxshuttle/attackby()
return
-/turf/simulated/wall/titanium/New(var/newloc)
- ..(newloc,"titanium")
+
+/turf/simulated/wall/titanium/Initialize(mapload)
+ . = ..(mapload,"titanium")
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 8c79f20403c..159865778a8 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -22,12 +22,14 @@
var/list/wall_connections = list("0", "0", "0", "0")
// Walls always hide the stuff below them.
-/turf/simulated/wall/levelupdate()
+/turf/simulated/wall/levelupdate(mapload)
+ if (mapload)
+ return // Don't hide stuff during mapload.
for(var/obj/O in src)
O.hide(1)
-/turf/simulated/wall/New(var/newloc, var/materialtype, var/rmaterialtype)
- ..(newloc)
+/turf/simulated/wall/Initialize(mapload, var/materialtype, var/rmaterialtype)
+ . = ..()
icon_state = "blank"
if(!materialtype)
materialtype = DEFAULT_WALL_MATERIAL
@@ -36,17 +38,18 @@
reinf_material = get_material_by_name(rmaterialtype)
update_material()
- processing_turfs |= src
+ if (material.radioactivity || (reinf_material && reinf_material.radioactivity))
+ START_PROCESSING(SSprocessing, src)
/turf/simulated/wall/Destroy()
- processing_turfs -= src
- dismantle_wall(null,null,1)
- ..()
+ STOP_PROCESSING(SSprocessing, src)
+ dismantle_wall(null, null, TRUE, TRUE)
+ return ..()
/turf/simulated/wall/process()
// Calling parent will kill processing
if(!radiate())
- return PROCESS_KILL
+ STOP_PROCESSING(SSprocessing, src)
/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj,/obj/item/projectile/beam))
@@ -154,9 +157,10 @@
return ..()
-/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product)
-
- playsound(src, 'sound/items/Welder.ogg', 100, 1)
+/turf/simulated/wall/proc/dismantle_wall(var/devastated, var/explode, var/no_product, var/no_change = FALSE)
+ if (!no_change) // No change is TRUE when this is called by destroy.
+ playsound(src, 'sound/items/Welder.ogg', 100, 1)
+
if(!no_product)
if(reinf_material)
reinf_material.place_dismantled_girder(src, reinf_material)
@@ -176,7 +180,8 @@
reinf_material = null
update_connections(1)
- ChangeTurf(/turf/simulated/floor/plating)
+ if (!no_change)
+ ChangeTurf(/turf/simulated/floor/plating)
/turf/simulated/wall/ex_act(severity)
switch(severity)
@@ -225,11 +230,7 @@
F.icon_state = "wall_thermite"
user << "The thermite starts melting through the wall. "
- spawn(100)
- if(O)
- qdel(O)
-// F.sd_LumReset() //TODO: ~Carn
- return
+ QDEL_IN(O, 100)
/turf/simulated/wall/proc/radiate()
var/total_radiation = material.radioactivity + (reinf_material ? reinf_material.radioactivity / 2 : 0)
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 617704a667e..f1d162b30b1 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -10,17 +10,46 @@
temperature = T20C
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
-// heat_capacity = 700000 No.
-/turf/space/New()
+ var/static/list/dust_cache
+
+// heat_capacity = 700000 No.
+ is_hole = TRUE
+
+/turf/space/proc/build_dust_cache()
+ LAZYINITLIST(dust_cache)
+ for (var/i in 0 to 25)
+ var/image/im = image('icons/turf/space_parallax1.dmi',"[i]")
+ im.plane = PLANE_SPACE_DUST
+ im.alpha = 80
+ im.blend_mode = BLEND_ADD
+ dust_cache["[i]"] = im
+
+// Copypaste of parent for performance.
+/turf/space/Initialize()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
- var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
- I.plane = PLANE_SPACE_DUST
- I.alpha = 80
- I.blend_mode = BLEND_ADD
- overlays += I
+ if (!dust_cache)
+ build_dust_cache()
+
+ add_overlay(dust_cache[icon_state])
update_starlight()
- ..()
+
+ if (initialized)
+ crash_with("Warning: [src]([type]) initialized multiple times!")
+
+ initialized = TRUE
+
+ for(var/atom/movable/AM as mob|obj in src)
+ src.Entered(AM)
+
+ turfs += src
+
+ if(dynamic_lighting)
+ luminosity = 0
+ else
+ luminosity = 1
+
+ return INITIALIZE_HINT_NORMAL
/turf/space/is_space()
return 1
@@ -31,14 +60,15 @@
O.hide(0)
/turf/space/proc/update_starlight()
- if(!config.starlight)
- return
+ if(config.starlight)
+ for (var/T in RANGE_TURFS(1, src))
+ if (istype(T, /turf/space))
+ continue
- for (var/T in RANGE_TURFS(1, src))
- if (istype(T, /turf/space))
- continue
+ set_light(config.starlight)
+ return
- set_light(config.starlight)
+ set_light(0)
/turf/space/attackby(obj/item/C as obj, mob/user as mob)
@@ -80,7 +110,7 @@
inertial_drift(A)
- if(ticker && ticker.mode)
+ if(SSticker.mode)
// Okay, so let's make it so that people can travel z levels but not nuke disks!
// if(ticker.mode.name == "mercenary") return
diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm
index ec46a81207d..fc54594dfd3 100644
--- a/code/game/turfs/space/transit.dm
+++ b/code/game/turfs/space/transit.dm
@@ -2,8 +2,10 @@
var/pushdirection // push things that get caught in the transit tile this direction
plane = 0
-/turf/space/transit/New()
+/turf/space/transit/Initialize()
update_icon()
+ initialized = TRUE
+ return INITIALIZE_HINT_NORMAL
/turf/space/transit/update_icon()
icon_state = ""
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index fb8ab56af28..a0d5285e3d9 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -26,25 +26,45 @@
var/list/decals
-/turf/New()
- ..()
+ var/is_hole // If true, turf will be treated as space or a hole
+ var/turf/baseturf = /turf/space
+
+// Parent code is duplicated in here instead of ..() for performance reasons.
+/turf/Initialize()
+ if (initialized)
+ crash_with("Warning: [src]([type]) initialized multiple times!")
+
+ initialized = TRUE
+
for(var/atom/movable/AM as mob|obj in src)
- spawn( 0 )
- src.Entered(AM)
- return
- turfs |= src
+ Entered(AM)
+
+ turfs += src
if(dynamic_lighting)
luminosity = 0
else
luminosity = 1
-/turf/proc/update_icon()
- return
+ if (smooth)
+ queue_smooth(src)
+
+ if (light_power && light_range)
+ update_light()
+
+ if (opacity)
+ has_opaque_atom = TRUE
+
+ return INITIALIZE_HINT_NORMAL
/turf/Destroy()
+ if (!changing_turf)
+ crash_with("Improper turf qdeletion.")
+
+ changing_turf = FALSE
turfs -= src
..()
+ return QDEL_HINT_IWILLGC
/turf/ex_act(severity)
return 0
@@ -164,7 +184,7 @@ var/const/enterloopsanity = 100
if(!(A.last_move)) return
if((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1)))
var/mob/M = A
- if(M.Process_Spacemove(1))
+ if(M.Allow_Spacemove(1))
M.inertia_dir = 0
return
spawn(5)
@@ -211,8 +231,8 @@ var/const/enterloopsanity = 100
L.Add(t)
return L
-/turf/proc/process()
- return PROCESS_KILL
+/turf/process()
+ STOP_PROCESSING(SSprocessing, src)
/turf/proc/contains_dense_objects()
if(density)
diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm
index 87a4e96282b..9c533083b40 100644
--- a/code/game/turfs/turf_changing.dm
+++ b/code/game/turfs/turf_changing.dm
@@ -1,3 +1,6 @@
+/turf
+ var/tmp/changing_turf
+
/turf/proc/ReplaceWithLattice()
src.ChangeTurf(get_base_turf_by_area(src))
spawn()
@@ -8,6 +11,12 @@
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L)
qdel(L)
+// Called after turf replaces old one
+/turf/proc/post_change()
+ levelupdate()
+ var/turf/simulated/open/T = GetAbove(src)
+ if(istype(T))
+ T.update_icon()
//Creates a new turf
/turf/proc/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0)
@@ -17,75 +26,68 @@
// This makes sure that turfs are not changed to space when one side is part of a zone
if(N == /turf/space)
var/turf/below = GetBelow(src)
- if(istype(below) && (air_master.has_valid_zone(below) || air_master.has_valid_zone(src)))
- N = /turf/simulated/open
+ if(istype(below) && !istype(below,/turf/space))
+ N = below.density ? /turf/simulated/floor/airless : /turf/simulated/open
var/obj/fire/old_fire = fire
- var/old_opacity = opacity
- var/old_dynamic_lighting = dynamic_lighting
- var/list/old_affecting_lights = affecting_lights
- var/old_lighting_overlay = lighting_overlay
- var/list/old_corners = corners
+ var/old_baseturf = baseturf
- //world << "Replacing [src.type] with [N]"
+// log_debug("Replacing [src.type] with [N]")
- if(connections) connections.erase_all()
+ changing_turf = TRUE
- if(istype(src,/turf/simulated))
- //Yeah, we're just going to rebuild the whole thing.
- //Despite this being called a bunch during explosions,
- //the zone will only really do heavy lifting once.
- var/turf/simulated/S = src
- if(S.zone) S.zone.rebuild()
+ if(connections)
+ connections.erase_all()
- if(ispath(N, /turf/simulated/floor))
- var/turf/simulated/W = new N( locate(src.x, src.y, src.z) )
+ cut_overlays()
+ underlays.Cut()
+
+ // So we call destroy.
+ qdel(src)
+
+ var/turf/simulated/W = new N( locate(src.x, src.y, src.z) )
+
+ if(ispath(N, /turf/simulated))
if(old_fire)
fire = old_fire
-
if (istype(W,/turf/simulated/floor))
W.RemoveLattice()
+ else if(old_fire)
+ old_fire.RemoveFire()
- if(tell_universe)
- universe.OnTurfChange(W)
+ if(tell_universe)
+ universe.OnTurfChange(W)
- if(air_master)
- air_master.mark_for_update(src) //handle the addition of the new turf.
+ SSair.mark_for_update(src) //handle the addition of the new turf.
- for(var/turf/space/S in range(W,1))
- S.update_starlight()
+ W.baseturf = old_baseturf
- W.levelupdate()
- . = W
+ W.post_change()
+
+ . = W
- else
+ queue_smooth(src)
+ queue_smooth_neighbors(src)
- var/turf/W = new N( locate(src.x, src.y, src.z) )
+/turf/proc/transport_properties_from(turf/other)
+ if(!istype(other, src.type))
+ return 0
- if(old_fire)
- old_fire.RemoveFire()
+ src.set_dir(other.dir)
+ src.icon_state = other.icon_state
+ src.icon = other.icon
+ src.overlays = other.overlays.Copy()
+ src.underlays = other.underlays.Copy()
+ return 1
- if(tell_universe)
- universe.OnTurfChange(W)
+//I would name this copy_from() but we remove the other turf from their air zone for some reason
+/turf/simulated/transport_properties_from(turf/simulated/other)
+ if(!..())
+ return 0
- if(air_master)
- air_master.mark_for_update(src)
-
- for(var/turf/space/S in range(W,1))
- S.update_starlight()
-
- W.levelupdate()
- . = W
-
- recalc_atom_opacity()
-
- lighting_overlay = old_lighting_overlay
- affecting_lights = old_affecting_lights
- corners = old_corners
- if(dynamic_lighting != old_dynamic_lighting)
- if(dynamic_lighting)
- lighting_build_overlay()
- else
- lighting_clear_overlay()
- if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting) || force_lighting_update)
- force_update_lights()
+ if(other.zone)
+ if(!src.air)
+ src.make_air()
+ src.air.copy_from(other.zone.air)
+ other.zone.remove(other)
+ return 1
diff --git a/code/game/turfs/turf_flick_animations.dm b/code/game/turfs/turf_flick_animations.dm
index fae622460a0..76c9667699d 100644
--- a/code/game/turfs/turf_flick_animations.dm
+++ b/code/game/turfs/turf_flick_animations.dm
@@ -1,11 +1,12 @@
/proc/anim(turf/location as turf,target as mob|obj,a_icon,a_icon_state as text,flick_anim as text,sleeptime = 0,direction as num)
+ set waitfor = FALSE
//This proc throws up either an icon or an animation for a specified amount of time.
//The variables should be apparent enough.
if(!location && target)
location = get_turf(target)
if(location && !target)
target = location
- var/atom/movable/overlay/animation = getFromPool(/atom/movable/overlay, location)
+ var/atom/movable/overlay/animation = new(location)
if(direction)
animation.set_dir(direction)
animation.icon = a_icon
@@ -16,5 +17,5 @@
animation.icon_state = "blank"
animation.master = target
flick(flick_anim, animation)
- spawn(max(sleeptime, 15))
- qdel(animation)
+
+ QDEL_IN(animation, max(sleeptime, 15))
diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm
index 468e9f9d6ca..7f697ba6ca1 100644
--- a/code/game/turfs/unsimulated/beach.dm
+++ b/code/game/turfs/unsimulated/beach.dm
@@ -19,6 +19,6 @@
icon_state = "water"
footstep_sound = "waterstep"
-/turf/unsimulated/beach/water/New()
- ..()
+/turf/unsimulated/beach/water/Initialize()
+ . = ..()
overlays += image("icon"='icons/misc/beach.dmi',"icon_state"="water2","layer"=MOB_LAYER+0.1)
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index a465edaf518..0a7b241380c 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -1,6 +1,6 @@
/turf/unsimulated/floor
name = "floor"
- icon = 'icons/turf/floors.dmi'
+ icon = 'icons/turf/total_floors.dmi'
icon_state = "Floor3"
/turf/unsimulated/floor/xmas
@@ -13,3 +13,30 @@
name = "mask"
icon = 'icons/turf/walls.dmi'
icon_state = "rockvault"
+
+/turf/unsimulated/mask/ChangeTurf(var/turf/N, var/tell_universe=1, var/force_lighting_update = 0)
+ if (!N)
+ return
+
+ new N(src)
+
+/turf/unsimulated/chasm_mask
+ name = "chasm mask"
+ icon = 'icons/turf/walls.dmi'
+ icon_state = "alienvault"
+ oxygen = 0
+ nitrogen = 0
+ temperature = TCMB
+
+
+// It's a placeholder turf, don't do anything special.
+// These shouldn't exist by the time SSatoms runs.
+/turf/unsimulated/mask/New()
+ return
+
+/turf/unsimulated/mask/Initialize()
+ initialized = TRUE
+ return
+
+/turf/unsimulated/chasm_mask/New()
+ return
diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm
index 12d4d3fadc3..3cc021811f1 100644
--- a/code/game/turfs/unsimulated/walls.dm
+++ b/code/game/turfs/unsimulated/walls.dm
@@ -7,8 +7,27 @@
/turf/unsimulated/wall/fakeglass
name = "window"
+ icon = 'icons/turf/walls.dmi'
icon_state = "fakewindows"
opacity = 0
/turf/unsimulated/wall/other
- icon_state = "r_wall"
\ No newline at end of file
+ icon = 'icons/turf/walls.dmi'
+ icon_state = "r_wall"
+
+// pretty much just a prettier /turf/unsimulated/wall
+/turf/unsimulated/wall/riveted
+ icon = 'icons/turf/smooth/riveted.dmi'
+ icon_state = "riveted"
+ smooth = SMOOTH_TRUE
+ canSmoothWith = list(
+ /turf/unsimulated/wall/riveted,
+ /obj/machinery/door/airlock/centcom,
+ /turf/unsimulated/wall/fakepdoor
+ )
+
+/turf/unsimulated/wall/fakepdoor
+ icon = 'icons/obj/doors/rapid_pdoor.dmi'
+ icon_state = "pdoor1"
+ name = "blast door"
+ desc = "That looks like it doesn't open easily."
diff --git a/code/global.dm b/code/global.dm
index 0be6248f484..561da51effa 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -1,6 +1,6 @@
//#define TESTING
-#if DM_VERSION < 506
-#warn This compiler is out of date. You may experience issues with projectile animations.
+#if DM_VERSION < 510
+#error Your version of BYOND is too old to compile the code. At least BYOND 510 is required.
#endif
@@ -9,9 +9,7 @@ var/global/datum/datacore/data_core = null
var/global/list/all_areas = list()
var/global/list/machines = list()
var/global/list/processing_objects = list()
-var/global/list/processing_modifiers = list()
var/global/list/processing_power_items = list()
-var/global/list/active_diseases = list()
var/global/list/med_hud_users = list() // List of all entities using a medical HUD.
var/global/list/sec_hud_users = list() // List of all entities using a security HUD.
var/global/list/hud_icon_reference = list()
@@ -34,11 +32,11 @@ var/diary = null
var/diary_runtime = null
var/diary_date_string = null
var/href_logfile = null
-var/station_name = "NSS Exodus"
-var/station_short = "Exodus"
+var/station_name = "NSS Aurora II"
+var/station_short = "Aurora"
var/const/dock_name = "NTCC Odin"
var/const/boss_name = "Central Command"
-var/const/boss_short = "Centcomm"
+var/const/boss_short = "Centcom"
var/const/company_name = "NanoTrasen"
var/const/company_short = "NT"
var/game_version = "Aurorastation"
@@ -89,7 +87,6 @@ var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir
)
var/datum/configuration/config = null
-var/datum/sun/sun = null
var/list/combatlog = list()
var/list/IClog = list()
@@ -122,16 +119,21 @@ var/custom_event_msg = null
// Ideally, the connection dies when the server restarts (After feedback logging.).
var/DBConnection/dbcon
-// Reference list for disposal sort junctions. Filled up by sorting junction's New()
-/var/list/tagger_locations = list()
-
// Added for Xenoarchaeology, might be useful for other stuff.
var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
// Used by robots and robot preferences.
var/list/robot_module_types = list(
- "Standard", "Engineering", "Construction", "Medical", "Rescue",
- "Miner", "Custodial", "Service", "Clerical", "Security",
+ "Standard",
+ "Engineering",
+ "Construction",
+ "Medical",
+ "Rescue",
+ "Miner",
+ "Custodial",
+ "Service",
+ "Clerical",
+ "Security",
"Research"
)
@@ -171,8 +173,3 @@ var/global/const/TICKS_IN_SECOND = 10
//List of exosuit tracking beacons, to save performance
var/global/list/exo_beacons = list()
-
-// Global variables to speed up object initialization.
-// Boolean to indicate whether objects should initialize themselves in their New() or wait for the game ticker to do it.
-// Check world.dm for the object list.
-var/global/objects_initialized = 0
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 4c04aab7ff4..ed1fc1e6ba1 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -650,9 +650,6 @@ proc/admin_notice(var/message, var/rights)
feedback_set_details("end_error","admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- if(blackbox)
- blackbox.save_all_data_to_sql()
-
sleep(50)
world.Reboot()
@@ -764,11 +761,11 @@ proc/admin_notice(var/message, var/rights)
set category = "Server"
set desc="Start the round RIGHT NOW"
set name="Start Now"
- if(!ticker)
+ if(Master.initializing)
alert("Unable to start the game as it is not set up.")
return
- if(ticker.current_state == GAME_STATE_PREGAME)
- ticker.current_state = GAME_STATE_SETTING_UP
+ if(SSticker.current_state == GAME_STATE_PREGAME)
+ SSticker.current_state = GAME_STATE_SETTING_UP
log_admin("[usr.key] has started the game.")
message_admins("[usr.key] has started the game. ")
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -842,10 +839,10 @@ proc/admin_notice(var/message, var/rights)
set name="Delay"
if(!check_rights(R_SERVER)) return
- if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
- ticker.delay_end = !ticker.delay_end
- log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
- message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
+ if (ROUND_IS_STARTED)
+ SSticker.delay_end = !SSticker.delay_end
+ log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
+ message_admins("\blue [key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
return //alert("Round end delayed", null, null, null, null, null)
round_progressing = !round_progressing
if (!round_progressing)
@@ -893,9 +890,6 @@ proc/admin_notice(var/message, var/rights)
feedback_set_details("end_error","immediate admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]")
feedback_add_details("admin_verb","IR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- if(blackbox)
- blackbox.save_all_data_to_sql()
-
world.Reboot()
/datum/admins/proc/unprison(var/mob/M in mob_list)
@@ -915,14 +909,14 @@ proc/admin_notice(var/message, var/rights)
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
- if(!ticker || !ticker.mode)
+ if(!SSticker.mode)
return 0
if (!istype(M))
return 0
if(M.mind)
- if(ticker.mode.antag_templates && ticker.mode.antag_templates.len)
- for(var/datum/antagonist/antag in ticker.mode.antag_templates)
+ if(SSticker.mode.antag_templates && SSticker.mode.antag_templates.len)
+ for(var/datum/antagonist/antag in SSticker.mode.antag_templates)
if(antag.is_antagonist(M.mind))
return 2
else if(M.mind.special_role)
@@ -935,16 +929,16 @@ proc/admin_notice(var/message, var/rights)
return 0
-/datum/admins/proc/spawn_fruit(seedtype in plant_controller.seeds)
+/datum/admins/proc/spawn_fruit(seedtype in SSplants.seeds)
set category = "Debug"
set desc = "Spawn the product of a seed."
set name = "Spawn Fruit"
if(!check_rights(R_SPAWN)) return
- if(!seedtype || !plant_controller.seeds[seedtype])
+ if(!seedtype || !SSplants.seeds[seedtype])
return
- var/datum/seed/S = plant_controller.seeds[seedtype]
+ var/datum/seed/S = SSplants.seeds[seedtype]
S.harvest(usr,0,0,1)
log_admin("[key_name(usr)] spawned [seedtype] fruit at ([usr.x],[usr.y],[usr.z])")
@@ -988,16 +982,16 @@ proc/admin_notice(var/message, var/rights)
for(var/datum/custom_item/item in current_items)
usr << "- name: [item.name] icon: [item.item_icon] path: [item.item_path] desc: [item.item_desc]"
-/datum/admins/proc/spawn_plant(seedtype in plant_controller.seeds)
+/datum/admins/proc/spawn_plant(seedtype in SSplants.seeds)
set category = "Debug"
set desc = "Spawn a spreading plant effect."
set name = "Spawn Plant"
if(!check_rights(R_SPAWN)) return
- if(!seedtype || !plant_controller.seeds[seedtype])
+ if(!seedtype || !SSplants.seeds[seedtype])
return
- new /obj/effect/plant(get_turf(usr), plant_controller.seeds[seedtype])
+ new /obj/effect/plant(get_turf(usr), SSplants.seeds[seedtype])
log_admin("[key_name(usr)] spawned [seedtype] vines at ([usr.x],[usr.y],[usr.z])")
/datum/admins/proc/spawn_atom(var/object as text)
@@ -1055,70 +1049,70 @@ proc/admin_notice(var/message, var/rights)
set desc = "Show the current round configuration."
set name = "Show Game Mode"
- if(!ticker || !ticker.mode)
+ if(!ROUND_IS_STARTED)
alert("Not before roundstart!", "Alert")
return
- var/out = "Current mode: [ticker.mode.name] ([ticker.mode.config_tag] ) "
+ var/out = "Current mode: [SSticker.mode.name] ([SSticker.mode.config_tag] ) "
out += " "
- if(ticker.mode.ert_disabled)
- out += "Emergency Response Teams: disabled "
+ if(SSticker.mode.ert_disabled)
+ out += "Emergency Response Teams: disabled "
else
- out += "Emergency Response Teams: enabled "
+ out += "Emergency Response Teams: enabled "
out += " "
- if(ticker.mode.deny_respawn)
- out += "Respawning: disallowed "
+ if(SSticker.mode.deny_respawn)
+ out += "Respawning: disallowed "
else
- out += "Respawning: allowed "
+ out += "Respawning: allowed "
out += " "
- out += "Shuttle delay multiplier: [ticker.mode.shuttle_delay] "
+ out += "Shuttle delay multiplier: [SSticker.mode.shuttle_delay] "
- if(ticker.mode.auto_recall_shuttle)
- out += "Shuttle auto-recall: enabled "
+ if(SSticker.mode.auto_recall_shuttle)
+ out += "Shuttle auto-recall: enabled "
else
- out += "Shuttle auto-recall: disabled "
+ out += "Shuttle auto-recall: disabled "
out += " "
- if(ticker.mode.event_delay_mod_moderate)
- out += "Moderate event time modifier: [ticker.mode.event_delay_mod_moderate] "
+ if(SSticker.mode.event_delay_mod_moderate)
+ out += "Moderate event time modifier: [SSticker.mode.event_delay_mod_moderate] "
else
- out += "Moderate event time modifier: unset "
+ out += "Moderate event time modifier: unset "
- if(ticker.mode.event_delay_mod_major)
- out += "Major event time modifier: [ticker.mode.event_delay_mod_major] "
+ if(SSticker.mode.event_delay_mod_major)
+ out += "Major event time modifier: [SSticker.mode.event_delay_mod_major] "
else
- out += "Major event time modifier: unset "
+ out += "Major event time modifier: unset "
out += " "
- if(ticker.mode.antag_tags && ticker.mode.antag_tags.len)
+ if(LAZYLEN(SSticker.mode.antag_tags))
out += "Core antag templates: "
- for(var/antag_tag in ticker.mode.antag_tags)
- out += "[antag_tag] ."
+ for(var/antag_tag in SSticker.mode.antag_tags)
+ out += "[antag_tag] ."
- if(ticker.mode.round_autoantag)
- out += "Autotraitor enabled ."
- if(ticker.mode.antag_scaling_coeff > 0)
- out += " (scaling with [ticker.mode.antag_scaling_coeff] )"
+ if(SSticker.mode.round_autoantag)
+ out += "Autotraitor enabled ."
+ if(SSticker.mode.antag_scaling_coeff > 0)
+ out += " (scaling with [SSticker.mode.antag_scaling_coeff] )"
else
- out += " (not currently scaling, set a coefficient )"
+ out += " (not currently scaling, set a coefficient )"
out += " "
else
- out += "Autotraitor disabled . "
+ out += "Autotraitor disabled . "
out += "All antag ids: "
- if(ticker.mode.antag_templates && ticker.mode.antag_templates.len).
- for(var/datum/antagonist/antag in ticker.mode.antag_templates)
+ if(LAZYLEN(SSticker.mode.antag_templates)).
+ for(var/datum/antagonist/antag in SSticker.mode.antag_templates)
antag.update_current_antag_max()
- out += " [antag.id] "
+ out += " [antag.id] "
out += " ([antag.get_antag_count()]/[antag.cur_max]) "
- out += " \[-\] "
+ out += " \[-\] "
else
out += " None."
- out += " \[+\] "
+ out += " \[+\] "
usr << browse(out, "window=edit_mode[src]")
feedback_add_details("admin_verb","SGM")
@@ -1278,7 +1272,7 @@ proc/admin_notice(var/message, var/rights)
usr << "Error: you are not an admin!"
return
- if(!ticker || !ticker.mode)
+ if(!SSticker.mode)
usr << "Mode has not started."
return
@@ -1302,12 +1296,12 @@ proc/admin_notice(var/message, var/rights)
usr << "Error: you are not an admin!"
return
- if(!ticker || !ticker.mode)
+ if(!SSticker || !SSticker.mode)
usr << "Mode has not started."
return
log_and_message_admins("attempting to force mode autospawn.")
- ticker.mode.process_autoantag()
+ SSticker.mode.process_autoantag()
/datum/admins/proc/paralyze_mob(mob/living/H as mob)
set category = "Admin"
diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm
index 0dbc8d5efc7..95d02a527ea 100644
--- a/code/modules/admin/admin_secrets.dm
+++ b/code/modules/admin/admin_secrets.dm
@@ -5,7 +5,6 @@ var/datum/admin_secrets/admin_secrets = new()
var/list/datum/admin_secret_item/items
/datum/admin_secrets/New()
- ..()
categories = init_subtypes(/datum/admin_secret_category)
items = list()
var/list/category_assoc = list()
@@ -19,9 +18,12 @@ var/datum/admin_secrets/admin_secrets = new()
var/datum/admin_secret_item/item = new item_type()
var/datum/admin_secret_category/category = category_assoc[item.category]
- dd_insertObjectList(category.items, item)
+ category.items += item
items += item
+ for (var/datum/admin_secret_category/category in categories)
+ sortTim(category.items, /proc/cmp_text_dsc)
+
/datum/admin_secret_category
var/name = ""
var/desc = ""
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 37cd449ebc1..cde7ead90a9 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -99,7 +99,8 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_dev_bst,
/client/proc/clear_toxins,
/client/proc/wipe_ai, // allow admins to force-wipe AIs
- /client/proc/fix_player_list
+ /client/proc/fix_player_list,
+ /client/proc/reset_openturf
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -166,7 +167,9 @@ var/list/admin_verbs_server = list(
/client/proc/check_customitem_activity,
/client/proc/nanomapgen_DumpImage,
/client/proc/admin_edit_motd,
- /client/proc/toggle_recursive_explosions
+ /client/proc/toggle_recursive_explosions,
+ /client/proc/restart_controller,
+ /client/proc/cmd_ss_panic
)
var/list/admin_verbs_debug = list(
/client/proc/getruntimelog, // allows us to access runtime logs to somebody,
@@ -185,7 +188,6 @@ var/list/admin_verbs_debug = list(
/client/proc/air_report,
/client/proc/reload_admins,
/client/proc/reload_mentors,
- /client/proc/restart_controller,
/client/proc/print_random_map,
/client/proc/create_random_map,
/client/proc/apply_random_map,
@@ -206,7 +208,12 @@ var/list/admin_verbs_debug = list(
/client/proc/restart_sql,
/client/proc/debug_pooling,
/client/proc/fix_player_list,
- /client/proc/lighting_show_verbs
+ /client/proc/lighting_show_verbs,
+ /client/proc/restart_controller,
+ /client/proc/cmd_display_del_log,
+ /client/proc/cmd_display_init_log,
+ /client/proc/cmd_ss_panic,
+ /client/proc/reset_openturf
)
var/list/admin_verbs_paranoid_debug = list(
@@ -278,7 +285,6 @@ var/list/admin_verbs_hideable = list(
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
/datum/admins/proc/adjump,
- /client/proc/restart_controller,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/callproc,
/client/proc/callproc_target,
@@ -354,12 +360,13 @@ var/list/admin_verbs_dev = list( //will need to be altered - Ryan784
/client/proc/kill_air,
/client/proc/kill_airgroup,
/client/proc/player_panel,
- /client/proc/restart_controller,
/client/proc/togglebuildmodeself,
/client/proc/toggledebuglogs,
/client/proc/ZASSettings,
/client/proc/cmd_dev_bst,
- /client/proc/lighting_show_verbs
+ /client/proc/lighting_show_verbs,
+ /client/proc/cmd_display_del_log,
+ /client/proc/cmd_display_init_log
)
var/list/admin_verbs_cciaa = list(
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
@@ -695,11 +702,11 @@ var/list/admin_verbs_cciaa = list(
set category = "Debug"
set name = "Kill Air"
set desc = "Toggle Air Processing"
- if(air_processing_killed)
- air_processing_killed = 0
+ if(!SSair.can_fire)
+ SSair.enable()
usr << "Enabled air processing. "
else
- air_processing_killed = 1
+ SSair.disable()
usr << "Disabled air processing. "
feedback_add_details("admin_verb","KA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] used 'kill air'.",admin_key=key_name(usr))
@@ -1084,3 +1091,18 @@ var/list/admin_verbs_cciaa = list(
log_debug(msg)
message_admins(span("danger", msg))
player_list -= M
+
+/client/proc/reset_openturf()
+ set category = "Debug"
+ set name = "Reset Openturfs"
+ set desc = "Deletes and regenerates all openturf overlays in the world."
+
+ if (!check_rights(R_DEBUG|R_ADMIN))
+ return
+
+ if (alert("Rebuild openturfs? Openturfs may look strange while this runs.", "Fix openturf", "No", "No", "DO IT") != "DO IT")
+ return
+
+ log_and_message_admins("has regenerated all openturfs.")
+
+ SSopenturf.hard_reset()
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 0b294e8e2eb..490764f0dd3 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -15,6 +15,8 @@ var/list/admin_datums = list()
var/datum/feed_channel/admincaster_feed_channel = new /datum/feed_channel
var/admincaster_signature //What you'll sign the newsfeeds as
+ var/list/watched_processes // Processes marked to be shown in Status instead of just Processes.
+
/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey)
if(!ckey)
error("Admin datum created without a ckey argument. Datum has been deleted")
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 7313109e73d..39f3b8f9d99 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -389,9 +389,9 @@
/datum/admins/proc/check_antagonists()
- if (ticker && ticker.current_state >= GAME_STATE_PLAYING)
+ if (SSticker.current_state >= GAME_STATE_PLAYING)
var/dat = "Round Status Round Status "
- dat += "Current Game Mode: [ticker.mode.name] "
+ dat += "Current Game Mode: [SSticker.mode.name] "
dat += "Round Duration: [round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10] "
dat += "Emergency shuttle "
if (!emergency_shuttle.online())
@@ -409,7 +409,7 @@
if (emergency_shuttle.shuttle.moving_status == SHUTTLE_WARMUP)
dat += "Launching now..."
- dat += "[ticker.delay_end ? "End Round Normally" : "Delay Round End"] "
+ dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"] "
dat += " "
for(var/antag_type in all_antag_types)
var/datum/antagonist/A = all_antag_types[antag_type]
diff --git a/code/modules/admin/secrets/admin_secrets/prison_warp.dm b/code/modules/admin/secrets/admin_secrets/prison_warp.dm
index eec85c2f04b..2bb562e825e 100644
--- a/code/modules/admin/secrets/admin_secrets/prison_warp.dm
+++ b/code/modules/admin/secrets/admin_secrets/prison_warp.dm
@@ -2,7 +2,7 @@
name = "Prison Warp"
/datum/admin_secret_item/admin_secret/prison_warp/can_execute(var/mob/user)
- if(!ticker) return 0
+ if(!ROUND_IS_STARTED) return 0
return ..()
/datum/admin_secret_item/admin_secret/prison_warp/execute(var/mob/user)
diff --git a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm
index b586e108466..291f5544e8f 100644
--- a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm
+++ b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm
@@ -2,7 +2,7 @@
name = "Show Game Mode"
/datum/admin_secret_item/admin_secret/show_game_mode/can_execute(var/mob/user)
- if(!ticker)
+ if(!ROUND_IS_STARTED)
return 0
return ..()
@@ -10,5 +10,7 @@
. = ..()
if(!.)
return
- if (ticker.mode) alert("The game mode is [ticker.mode.name]")
- else alert("For some reason there's a ticker, but not a game mode")
+ if (SSticker.mode)
+ alert("The game mode is [SSticker.mode.name]")
+ else
+ alert("For some reason there's a ticker, but not a game mode")
diff --git a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm
index 3ec1bacb2c0..4de572cb632 100644
--- a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm
+++ b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm
@@ -2,7 +2,8 @@
name = "Send Strike Team"
/datum/admin_secret_item/fun_secret/send_strike_team/can_execute(var/mob/user)
- if(!ticker) return 0
+ if(!ROUND_IS_STARTED)
+ return 0
return ..()
/datum/admin_secret_item/fun_secret/send_strike_team/execute(var/mob/user)
diff --git a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm
index 81b77eabb64..98df67ab7f7 100644
--- a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm
+++ b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm
@@ -2,7 +2,7 @@
name = "Triple AI Mode"
/datum/admin_secret_item/fun_secret/triple_ai_mode/can_execute(var/mob/user)
- if(ticker && ticker.current_state > GAME_STATE_PREGAME)
+ if(ROUND_IS_STARTED)
return 0
return ..()
diff --git a/code/modules/admin/secrets/random_events/gravity.dm b/code/modules/admin/secrets/random_events/gravity.dm
index 5499cbd9588..60de3a292bd 100644
--- a/code/modules/admin/secrets/random_events/gravity.dm
+++ b/code/modules/admin/secrets/random_events/gravity.dm
@@ -5,7 +5,7 @@
name = "Toggle Station Artificial Gravity"
/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user)
- if(!(ticker && ticker.mode))
+ if(!(SSticker.mode))
return 0
return ..()
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index ebfbd2f7eae..1edf96af036 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -6,7 +6,7 @@
message_admins("[usr.key] has attempted to override the admin panel!")
return
- if(ticker.mode && ticker.mode.check_antagonists_topic(href, href_list))
+ if(SSticker.mode && SSticker.mode.check_antagonists_topic(href, href_list))
check_antagonists()
return
@@ -212,13 +212,13 @@
else if(href_list["call_shuttle"])
if(!check_rights(R_ADMIN)) return
- if( ticker.mode.name == "blob" )
+ if( SSticker.mode.name == "blob" )
alert("You can't call the shuttle during blob!")
return
switch(href_list["call_shuttle"])
if("1")
- if ((!( ticker ) || !emergency_shuttle.location()))
+ if ((!( ROUND_IS_STARTED ) || !emergency_shuttle.location()))
return
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
@@ -226,7 +226,7 @@
message_admins("\blue [key_name_admin(usr)] called the Emergency Shuttle to the station", 1)
if("2")
- if (!( ticker ) || !emergency_shuttle.location())
+ if (!( ROUND_IS_STARTED ) || !emergency_shuttle.location())
return
if (emergency_shuttle.can_call())
emergency_shuttle.call_evac()
@@ -265,9 +265,9 @@
else if(href_list["delay_round_end"])
if(!check_rights(R_SERVER)) return
- ticker.delay_end = !ticker.delay_end
- log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].",admin_key=key_name(usr))
- message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
+ SSticker.delay_end = !SSticker.delay_end
+ log_admin("[key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].",admin_key=key_name(usr))
+ message_admins("\blue [key_name(usr)] [SSticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1)
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["simplemake"])
@@ -919,7 +919,7 @@
else if(href_list["c_mode"])
if(!check_rights(R_ADMIN)) return
- if(ticker && ticker.mode)
+ if(ROUND_IS_STARTED)
return alert(usr, "The game has already started.", null, null, null, null)
var/dat = {"What mode do you wish to play? "}
for(var/mode in config.modes)
@@ -932,7 +932,7 @@
else if(href_list["f_secret"])
if(!check_rights(R_ADMIN)) return
- if(ticker && ticker.mode)
+ if(ROUND_IS_STARTED)
return alert(usr, "The game has already started.", null, null, null, null)
if(master_mode != "secret")
return alert(usr, "The game mode has to be secret!", null, null, null, null)
@@ -946,7 +946,7 @@
else if(href_list["c_mode2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
- if (ticker && ticker.mode)
+ if (ROUND_IS_STARTED)
return alert(usr, "The game has already started.", null, null, null, null)
master_mode = href_list["c_mode2"]
log_admin("[key_name(usr)] set the mode as [master_mode].",admin_key=key_name(usr))
@@ -959,7 +959,7 @@
else if(href_list["f_secret2"])
if(!check_rights(R_ADMIN|R_SERVER)) return
- if(ticker && ticker.mode)
+ if(ROUND_IS_STARTED)
return alert(usr, "The game has already started.", null, null, null, null)
if(master_mode != "secret")
return alert(usr, "The game mode has to be secret!", null, null, null, null)
@@ -1348,12 +1348,10 @@
log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]",admin_key=key_name(src.owner),ckey=key_name(M))
message_admins("[key_name(M)] has been hit by Bluespace Artillery fired by [src.owner]")
- var/obj/effect/stop/S
- S = new /obj/effect/stop
- S.victim = M
- S.loc = M.loc
+ M.canmove = FALSE
spawn(20)
- qdel(S)
+ if (M)
+ M.canmove = initial(M.canmove)
var/turf/simulated/floor/T = get_turf(M)
if(istype(T))
@@ -1535,7 +1533,7 @@
else if(href_list["traitor"])
if(!check_rights(R_ADMIN|R_MOD)) return
- if(!ticker || !ticker.mode)
+ if(!ROUND_IS_STARTED)
alert("The game hasn't started yet!")
return
diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm
index 7ee71ad63ea..3bea49678b5 100644
--- a/code/modules/admin/verbs/bluespacetech.dm
+++ b/code/modules/admin/verbs/bluespacetech.dm
@@ -9,24 +9,32 @@
// - SoundScopes
*/
+/client
+ var/bst_cooldown // So people can't spam BSTs.
+
+/client/proc/bst_spawn_cooldown()
+ bst_cooldown = null
+
/client/proc/cmd_dev_bst()
set category = "Debug"
set name = "Spawn Bluespace Tech"
set desc = "Spawns a Bluespace Tech to debug stuff"
+ if (bst_cooldown)
+ src << "You've used this verb too recently, please wait a moment before trying again."
+ return
+
if(!check_rights(R_DEV|R_ADMIN)) return
if(!holder)
return //how did they get here?
- if(!ticker)
- alert("Wait until the game starts")
- return
-
- if(ticker.current_state < GAME_STATE_PLAYING)
+ if(!ROUND_IS_STARTED)
src << span("alert", "The game hasn't started yet!")
return
+ bst_cooldown = TRUE
+
if(istype(mob, /mob/living))
if(!holder.original_mob)
holder.original_mob = mob
@@ -68,8 +76,8 @@
new /obj/item/weapon/reagent_containers/pill/adminordrazine(pills)
bst.equip_to_slot_or_del(pills, slot_in_backpack)
- //Implant because access
- bst.implant_loyalty(bst,TRUE)
+ //Implant because access
+ bst.implant_loyalty(bst,TRUE)
//Sort out ID
var/obj/item/weapon/card/id/bst/id = new/obj/item/weapon/card/id/bst(bst)
@@ -111,15 +119,18 @@
bst.add_language(LANGUAGE_CHANGELING)
bst.add_language(LANGUAGE_BORER)
- spawn(5)
- spark(T, 3, alldirs)
- bst.anchored = 0
+ addtimer(CALLBACK(src, .proc/bst_post_spawn, bst), 5)
+ addtimer(CALLBACK(src, .proc/bst_spawn_cooldown), 5 SECONDS)
log_debug("Bluespace Tech Spawned: X:[bst.x] Y:[bst.y] Z:[bst.z] User:[src]")
feedback_add_details("admin_verb","BST")
return 1
+/client/proc/bst_post_spawn(mob/living/carbon/human/bst/bst)
+ spark(bst, 3, alldirs)
+ bst.anchored = FALSE
+
/mob/living/carbon/human/bst
universal_understand = 1
status_flags = GODMODE
@@ -150,20 +161,19 @@
return
src.custom_emote(1,"presses a button on their suit, followed by a polite bow.")
- spawn(10)
- spark(src, 5, alldirs)
- if(key)
- if(client.holder && client.holder.original_mob)
- client.holder.original_mob.key = key
- else
- var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
- ghost.key = key
- ghost.mind.name = "[ghost.key] BSTech"
- ghost.name = "[ghost.key] BSTech"
- ghost.real_name = "[ghost.key] BSTech"
- ghost.voice_name = "[ghost.key] BSTech"
- qdel(src)
- return
+ spark(src, 5, alldirs)
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, src), 10, TIMER_CLIENT_TIME)
+ animate(src, alpha = 0, time = 9, easing = QUAD_EASING)
+ if(key)
+ if(client.holder && client.holder.original_mob)
+ client.holder.original_mob.key = key
+ else
+ var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
+ ghost.key = key
+ ghost.mind.name = "[ghost.key] BSTech"
+ ghost.name = "[ghost.key] BSTech"
+ ghost.real_name = "[ghost.key] BSTech"
+ ghost.voice_name = "[ghost.key] BSTech"
/mob/living/carbon/human/bst/proc/bsc() //because we all have our unrealistic snowflakes right?
if(set_species("Tajara"))
diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm
index 915a1e000f5..197c3a88910 100644
--- a/code/modules/admin/verbs/cinematic.dm
+++ b/code/modules/admin/verbs/cinematic.dm
@@ -7,7 +7,7 @@
return
if(alert("Are you sure you want to run [cinematic]?","Confirmation","Yes","No")=="No") return
- if(!ticker) return
+ if(!ROUND_IS_STARTED) return
switch(cinematic)
if("explosion")
if(alert("The game will be over. Are you really sure?", "Confirmation" ,"Continue", "Cancel") == "Cancel")
@@ -19,9 +19,9 @@
override = input(src,"mode = ?","Enter Parameter",null) as anything in list("mercenary","no override")
if(0)
override = input(src,"mode = ?","Enter Parameter",null) as anything in list("blob","mercenary","AI malfunction","no override")
- ticker.station_explosion_cinematic(parameter,override)
+ SSticker.station_explosion_cinematic(parameter,override)
log_admin("[key_name(src)] launched cinematic \"[cinematic]\"",admin_key=key_name(usr))
message_admins("[key_name_admin(src)] launched cinematic \"[cinematic]\"", 1)
- return
\ No newline at end of file
+ return
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 37e07e96ba3..3be602c53c9 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -42,7 +42,7 @@
set category = "Fun"
set name = "Make Robot"
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon/human))
@@ -57,7 +57,7 @@
set category = "Fun"
set name = "Make Simple Animal"
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
@@ -78,7 +78,7 @@
set category = "Fun"
set name = "Make Alien"
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if(ishuman(M))
@@ -95,16 +95,14 @@
set category = "Fun"
set name = "Make slime"
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if(ishuman(M))
- log_admin("[key_name(src)] has slimeized [M.key].",admin_key=key_name(usr))
+ log_and_message_admins("has slimeized [key_name(M)].", user = usr)
spawn(10)
M:slimeize()
feedback_add_details("admin_verb","MKMET") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- log_admin("[key_name(usr)] made [key_name(M)] into a slime.",admin_key=key_name(usr),ckey=key_name(M))
- message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into a slime.", 1)
else
alert("Invalid mob")
@@ -113,7 +111,7 @@
set category = "Fun"
set name = "Make Monkey"
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon/human))
@@ -128,7 +126,7 @@
set category = "Fun"
set name = "Make Changeling"
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon/human))
@@ -148,7 +146,7 @@
usr << "Ruby Mode disabled. Command aborted."
return
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts.")
return
if(istype(M, /mob/living/carbon/human))
@@ -166,7 +164,7 @@
if(!cultwords["travel"])
runerandom()
if(M)
- if(M.mind in ticker.mode.cult)
+ if(M.mind in SSticker.mode.cult)
return
else
if(alert("Spawn that person a tome?",,"Yes","No")=="Yes")
@@ -195,7 +193,7 @@
if(M.mind)
M.mind.special_role = "Cultist"
- ticker.mode.cult += M.mind
+ SSticker.mode.cult += M.mind
src << "Made [M] a cultist."
*/
@@ -210,9 +208,9 @@
if(hsbitem)
for(var/atom/O in world)
if(istype(O, hsbitem))
- qdel(O)
- log_admin("[key_name(src)] has deleted all instances of [hsbitem].",admin_key=key_name(usr))
- message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0)
+ qdel(O, TRUE)
+ CHECK_TICK
+ log_and_message_admins("has deleted all instances of [hsbitem].")
feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_debug_make_powernets()
@@ -236,7 +234,7 @@
set category = "Admin"
set name = "Grant Full Access"
- if (!ticker)
+ if (!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if (istype(M, /mob/living/carbon/human))
@@ -957,7 +955,7 @@
// DNA2 - Admin Hax
/client/proc/cmd_admin_toggle_block(var/mob/M,var/block)
- if(!ticker)
+ if(!ROUND_IS_STARTED)
alert("Wait until the game starts")
return
if(istype(M, /mob/living/carbon))
@@ -970,3 +968,29 @@
log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!",admin_key=key_name(src),ckey=key_name(M))
else
alert("Invalid mob")
+
+/client/proc/cmd_display_del_log()
+ set category = "Debug"
+ set name = "Display del() Log"
+ set desc = "Displays a list of things that have failed to GC this round"
+
+ var/dat = "List of things that failed to GC this round "
+ for(var/path in SSgarbage.didntgc)
+ dat += "[path] - [SSgarbage.didntgc[path]] times "
+
+ dat += "List of paths that did not return a qdel hint in Destroy() "
+ for(var/path in SSgarbage.noqdelhint)
+ dat += "[path] "
+
+ dat += "List of paths that slept in Destroy() "
+ for(var/path in SSgarbage.sleptDestroy)
+ dat += "[path] "
+
+ usr << browse(dat, "window=dellog")
+
+/client/proc/cmd_display_init_log()
+ set category = "Debug"
+ set name = "Display Initialize() Log"
+ set desc = "Displays a list of things that didn't handle Initialize() properly"
+
+ usr << browse(replacetext(SSatoms.InitLog(), "\n", " "), "window=initlog")
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index 246692f8824..8b54f797be4 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -2,12 +2,12 @@
set category = "Debug"
set name = "Show Air Report"
- if(!master_controller || !air_master)
- alert(usr,"Master_controller or air_master not found.","Air Report")
+ if(!Master || !SSair)
+ alert(usr,"Master_controller or SSair not found.","Air Report")
return
- var/active_groups = air_master.active_zones
- var/inactive_groups = air_master.zones.len - active_groups
+ var/active_groups = SSair.active_zones
+ var/inactive_groups = SSair.zones.len - active_groups
var/hotspots = 0
for(var/obj/fire/hotspot in world)
@@ -15,7 +15,7 @@
var/active_on_main_station = 0
var/inactive_on_main_station = 0
- for(var/zone/zone in air_master.zones)
+ for(var/zone/zone in SSair.zones)
var/turf/simulated/turf = locate() in zone.contents
if(turf && turf.z in config.station_levels)
if(zone.needs_update)
@@ -25,8 +25,8 @@
var/output = {"AIR SYSTEMS REPORT
General Processing Data
- Cycle: [air_master.current_cycle]
- Groups: [air_master.zones.len]
+ Cycle: [SSair.times_fired]
+ Groups: [SSair.zones.len]
---- Active: [active_groups]
---- Inactive: [inactive_groups]
---- Active on station: [active_on_main_station]
@@ -36,7 +36,7 @@
Hotspot Processing: [hotspots]
Geometry Processing Data
- Tile Update: [air_master.tiles_to_update.len]
+ Tile Update: [SSair.tiles_to_update.len]
"}
usr << browse(output,"window=airreport")
@@ -77,9 +77,9 @@
set name = "Radio report"
var/output = "Radio Report "
- for (var/fq in radio_controller.frequencies)
+ for (var/fq in SSradio.frequencies)
output += "Freq: [fq] "
- var/list/datum/radio_frequency/fqs = radio_controller.frequencies[fq]
+ var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq]
if (!fqs)
output += " ERROR "
continue
@@ -127,11 +127,11 @@
src << "Only administrators may use this command."
return
- if(!air_master)
+ if(!SSair)
usr << "Cannot find air_system"
return
var/datum/air_group/dead_groups = list()
- for(var/datum/air_group/group in air_master.air_groups)
+ for(var/datum/air_group/group in SSair.air_groups)
if (!group.group_processing)
dead_groups += group
var/datum/air_group/dest_group = pick(dead_groups)
@@ -149,7 +149,7 @@
src << "Only administrators may use this command."
return
- if(!air_master)
+ if(!SSair)
usr << "Cannot find air_system"
return
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 64f5d759769..790b73f9d70 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -68,7 +68,7 @@ var/intercom_range_display_status = 0
set category = "Mapping"
set name = "Camera Report"
- if(!master_controller)
+ if(!Master)
alert(usr,"Master_controller not found.","Sec Camera Report")
return 0
@@ -155,7 +155,7 @@ var/list/debug_verbs = list (
,/client/proc/disable_movement
,/client/proc/Zone_Info
,/client/proc/Test_ZAS_Connection
- ,/client/proc/ZoneTick
+ //,/client/proc/ZoneTick
,/client/proc/rebootAirMaster
,/client/proc/hide_debug_verbs
,/client/proc/testZAScolors
@@ -163,6 +163,8 @@ var/list/debug_verbs = list (
,/datum/admins/proc/setup_supermatter
,/client/proc/atmos_toggle_debug
,/client/proc/spawn_tanktransferbomb
+ ,/client/proc/get_bad_fdoors
+ ,/client/proc/get_bad_doors
)
@@ -274,14 +276,7 @@ var/list/debug_verbs = list (
set name = "Reboot ZAS"
if(alert("This will destroy and remake all zone geometry on the whole map.","Reboot ZAS","Reboot ZAS","Nevermind") == "Reboot ZAS")
- var/datum/controller/air_system/old_air = air_master
- for(var/zone/zone in old_air.zones)
- zone.c_invalidate()
- qdel(old_air)
- air_master = new
- air_master.Setup()
- spawn air_master.Start()
-
+ SSair.reboot()
/client/proc/count_objects_on_z_level()
set category = "Mapping"
@@ -361,7 +356,7 @@ var/global/prevent_airgroup_regroup = 0
set name = "Break All Airgroups"
/*prevent_airgroup_regroup = 1
- for(var/datum/air_group/AG in air_master.air_groups)
+ for(var/datum/air_group/AG in SSair.air_groups)
AG.suspend_group_processing()
message_admins("[src.ckey] used 'Break All Airgroups'")*/
@@ -372,7 +367,7 @@ var/global/prevent_airgroup_regroup = 0
usr << "\red Proc disabled."
/*prevent_airgroup_regroup = 0
- for(var/datum/air_group/AG in air_master.air_groups)
+ for(var/datum/air_group/AG in SSair.air_groups)
AG.check_regroup()
message_admins("[src.ckey] used 'Regroup All Airgroups Attempt'")*/
@@ -394,12 +389,6 @@ var/global/prevent_airgroup_regroup = 0
usr << "\red Proc disabled."
- /*air_processing_killed = !air_processing_killed
- if(air_processing_killed)
- message_admins("[src.ckey] used 'kill air processing', stopping all air processing.")
- else
- message_admins("[src.ckey] used 'kill air processing', restoring all air processing.")*/
-
//This proc is intended to detect lag problems relating to communication procs
var/global/say_disabled = 0
/client/proc/disable_communication()
@@ -429,3 +418,24 @@ var/global/movement_disabled_exception //This is the client that calls the proc,
movement_disabled_exception = usr.ckey
else
message_admins("[src.ckey] used 'Disable all movement', restoring all movement.")*/
+
+/client/proc/get_bad_doors()
+ set category = "Mapping"
+ set name = "Find Bad Doors"
+
+ for(var/obj/machinery/door/airlock/A in machines)
+ var/turf/T = get_turf(A)
+ if(istype(T, /turf/space) || istype(T, /turf/simulated/floor/asteroid) || istype(T, /turf/simulated/open) || T.density)
+ usr << "Airlock [A] with bad turf at ([A.x],[A.y],[A.z]) in [T.loc]."
+
+/client/proc/get_bad_fdoors()
+ set category = "Mapping"
+ set name = "Find Bad Fire Doors"
+
+ for(var/obj/machinery/door/firedoor/F in machines)
+ var/turf/T = get_turf(F)
+ var/firelock_increment = 0
+ for(var/obj/machinery/door/firedoor/FD in T)
+ firelock_increment += 1
+ if(firelock_increment > 1)
+ usr << "Double firedoor [F] at ([F.x],[F.y],[F.z]) in [T.loc]."
diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm
index af3b30e81ed..fb5a3ecdbb2 100644
--- a/code/modules/admin/verbs/modifyvariables.dm
+++ b/code/modules/admin/verbs/modifyvariables.dm
@@ -1,9 +1,9 @@
var/list/forbidden_varedit_object_types = list(
- /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea.
- /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering
- /datum/feedback_variable, //Prevents people messing with feedback gathering
- /datum/discord_bot //Nope.jpg. Stop it.
- )
+ /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea.
+ /datum/controller/subsystem/statistics, //Prevents people messing with feedback gathering
+ /datum/feedback_variable, //Prevents people messing with feedback gathering
+ /datum/discord_bot //Nope.jpg. Stop it.
+)
var/list/VVlocked = list("vars", "holder", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending")
var/list/VVicon_edit_lock = list("icon", "icon_state", "overlays", "underlays")
@@ -18,16 +18,6 @@ var/list/VVckey_edit = list("key", "ckey")
feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
*/
-/client/proc/cmd_modify_ticker_variables()
- set category = "Debug"
- set name = "Edit Ticker Variables"
-
- if (ticker == null)
- src << "Game hasn't started yet."
- else
- src.modify_variables(ticker)
- feedback_add_details("admin_verb","ETV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
/client/proc/mod_list_add_ass() //haha
var/class = "text"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 3a6f51ce0d9..ff93d537781 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -604,10 +604,16 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] deleted [O] at ([O.x],[O.y],[O.z])", 1)
feedback_add_details("admin_verb","DEL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ if (isturf(O)) // Can't qdel a turf.
+ var/turf/T = O
+ T.ChangeTurf(/turf/space)
+ return
+
if (action == "Yes")
- qdel(O)
+ qdel(O, TRUE)
else
// This is naughty, but sometimes necessary.
+ O.Destroy(TRUE) // Because direct del without this breaks things.
del(O)
/client/proc/cmd_admin_list_open_jobs()
@@ -829,7 +835,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Admin"
set name = "Call Shuttle"
- if ((!( ticker ) || !emergency_shuttle.location()))
+ if ((!( ROUND_IS_STARTED ) || !emergency_shuttle.location()))
return
if(!check_rights(R_ADMIN)) return
@@ -838,7 +844,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(confirm != "Yes") return
var/choice
- if(ticker.mode.auto_recall_shuttle)
+ if(SSticker.mode.auto_recall_shuttle)
choice = input("The shuttle will just return if you call it. Call anyway?") in list("Confirm", "Cancel")
if(choice == "Confirm")
emergency_shuttle.auto_recall = 1 //enable auto-recall
@@ -865,7 +871,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") return
- if(!ticker || !emergency_shuttle.can_recall())
+ if(!ROUND_IS_STARTED || !emergency_shuttle.can_recall())
return
emergency_shuttle.recall()
@@ -879,7 +885,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Admin"
set name = "Toggle Deny Shuttle"
- if (!ticker)
+ if (!ROUND_IS_STARTED)
return
if(!check_rights(R_ADMIN)) return
@@ -906,12 +912,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_FUN)) return
- if (ticker && ticker.mode)
+ if (SSticker.mode)
usr << "Nope you can't do this, the game's already started. This only works before rounds!"
return
- if(ticker.random_players)
- ticker.random_players = 0
+ if(SSticker.random_players)
+ SSticker.random_players = 0
message_admins("Admin [key_name_admin(usr)] has disabled \"Everyone is Special\" mode.", 1)
usr << "Disabled."
return
@@ -929,7 +935,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
usr << "Remember: you can always disable the randomness by using the verb again, assuming the round hasn't started yet ."
- ticker.random_players = 1
+ SSticker.random_players = 1
feedback_add_details("admin_verb","MER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -963,15 +969,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!input)
return
- if(!ticker)
- return
-
- ticker.selected_tip = input
+ SSticker.selected_tip = input
// If we've already tipped, then send it straight away.
- if(ticker.tipped)
- ticker.send_tip_of_the_round()
- ticker.selected_tip = initial(ticker.selected_tip)
+ if(SSticker.tipped)
+ SSticker.send_tip_of_the_round()
+ SSticker.selected_tip = initial(SSticker.selected_tip)
message_admins("[key_name_admin(usr)] sent a tip of the round.")
@@ -987,12 +990,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!holder)
return
- if(!ticker)
- return
-
- ticker.send_tip_of_the_round()
+ SSticker.send_tip_of_the_round()
message_admins("[key_name_admin(usr)] sent a pregenerated tip of the round.")
log_admin("[key_name(usr)] sent a pregenerated Tip of the Round.",admin_key=key_name(usr))
- feedback_add_details("admin_verb","FAP")
\ No newline at end of file
+ feedback_add_details("admin_verb","FAP")
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index 37fc52eda80..ae3f78eb7f5 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -10,7 +10,7 @@ var/const/commandos_possible = 6 //if more Commandos are needed in the future
src << "Only administrators may use this command."
return
- if(!ticker)
+ if(!ROUND_IS_STARTED)
usr << "The game hasn't started yet! "
return
diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm
index 5e5ccbb1237..8154c1e12b3 100644
--- a/code/modules/admin/verbs/tripAI.dm
+++ b/code/modules/admin/verbs/tripAI.dm
@@ -2,21 +2,21 @@
set category = "Fun"
set name = "Create AI Triumvirate"
- if(ticker.current_state > GAME_STATE_PREGAME)
+ if(ROUND_IS_STARTED)
usr << "This option is currently only usable during pregame. This may change at a later date."
return
- if(job_master && ticker)
+ if(job_master)
var/datum/job/job = job_master.GetJob("AI")
if(!job)
usr << "Unable to locate the AI job"
return
- if(ticker.triai)
- ticker.triai = 0
+ if(SSticker.triai)
+ SSticker.triai = 0
usr << "Only one AI will be spawned at round start."
message_admins("\blue [key_name_admin(usr)] has toggled off triple AIs at round start.", 1)
else
- ticker.triai = 1
+ SSticker.triai = 1
usr << "There will be an AI Triumvirate at round start."
message_admins("\blue [key_name_admin(usr)] has toggled on triple AIs at round start.", 1)
return
diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm
index 44d524e06d3..f4c71ed5c37 100644
--- a/code/modules/admin/view_variables/helpers.dm
+++ b/code/modules/admin/view_variables/helpers.dm
@@ -1,8 +1,3 @@
-
-// Keep these two together, they *must* be defined on both
-// If /client ever becomes /datum/client or similar, they can be merged
-/client/proc/get_view_variables_header()
- return "[src] "
/datum/proc/get_view_variables_header()
return "[src] "
@@ -31,9 +26,6 @@
"}
-// Same for these as for get_view_variables_header() above
-/client/proc/get_view_variables_options()
- return ""
/datum/proc/get_view_variables_options()
return ""
diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm
index 68c259f5c34..fe62baf82eb 100644
--- a/code/modules/admin/view_variables/topic.dm
+++ b/code/modules/admin/view_variables/topic.dm
@@ -194,6 +194,7 @@
if(Obj.type == O_type)
i++
if (del_action == "Hard Delete")
+ Obj.Destroy(TRUE)
del(Obj)
else
qdel(Obj)
@@ -208,9 +209,10 @@
if(istype(Obj,O_type))
i++
if (del_action == "Hard Delete")
+ Obj.Destroy(TRUE)
del(Obj)
else
- qdel(Obj)
+ qdel(Obj, TRUE)
if(!i)
usr << "No objects of this type exist"
return
@@ -486,12 +488,13 @@
usr << "This can only be done on mobs with clients"
return
- nanomanager.send_resources(H.client)
+ usr << span("alert", "This command is temporarily disabled.")
+ //nanomanager.send_resources(H.client)
- usr << "Resource files sent"
- H << "Your NanoUI Resource files have been refreshed"
+ //usr << "Resource files sent"
+ //H << "Your NanoUI Resource files have been refreshed"
- log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ", admin_key=key_name(usr), ckey=key_name(H))
+ //log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ", admin_key=key_name(usr), ckey=key_name(H))
else if(href_list["regenerateicons"])
if(!check_rights(0)) return
diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm
index b20b2481d3e..8ffdf8b9b4a 100644
--- a/code/modules/admin/view_variables/view_variables.dm
+++ b/code/modules/admin/view_variables/view_variables.dm
@@ -4,7 +4,7 @@
// parent_type is here because it's pointless to show in VV.
/var/list/view_variables_hide_vars = list("bound_x", "bound_y", "bound_height", "bound_width", "bounds", "parent_type", "step_x", "step_y", "step_size")
// Variables not to expand the lists of. Vars is pointless to expand, and overlays/underlays cannot be expanded.
-/var/list/view_variables_dont_expand = list("overlays", "underlays", "vars")
+/var/list/view_variables_dont_expand = list("overlays", "underlays", "vars", "screen", "our_overlays", "priority_overlays", "queued_overlays")
// Variables that runtime if you try to test associativity of the lists they contain by indexing
/var/list/view_variables_no_assoc = list("verbs", "contents")
diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm
index d0a6a8be4c2..e39a0b15fa1 100644
--- a/code/modules/alarm/alarm.dm
+++ b/code/modules/alarm/alarm.dm
@@ -30,7 +30,7 @@
cameras() // Sets up both cameras and last alarm area.
set_source_data(source, duration, severity)
-/datum/alarm/proc/process()
+/datum/alarm/process()
// Has origin gone missing?
if(!origin && !end_time)
end_time = world.time + ALARM_RESET_DELAY
diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm
index 9cf52add77b..8837d08fa41 100644
--- a/code/modules/alarm/alarm_handler.dm
+++ b/code/modules/alarm/alarm_handler.dm
@@ -7,7 +7,7 @@
var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin.
var/list/listeners = new // A list of all objects interested in alarm changes.
-/datum/alarm_handler/proc/process()
+/datum/alarm_handler/process()
for(var/datum/alarm/A in alarms)
A.process()
check_alarm_cleared(A)
@@ -31,7 +31,7 @@
alarms |= existing
alarms_assoc[origin] = existing
if(new_alarm)
- alarms = dd_sortedObjectList(alarms)
+ sortTim(alarms, /proc/cmp_alarm, FALSE)
on_alarm_change(existing, ALARM_RAISED)
return new_alarm
diff --git a/code/modules/antag_contest/contest_objective.dm b/code/modules/antag_contest/contest_objective.dm
index abad0999fae..113ed523516 100644
--- a/code/modules/antag_contest/contest_objective.dm
+++ b/code/modules/antag_contest/contest_objective.dm
@@ -18,7 +18,7 @@
/datum/objective/competition/find_target(var/require_synth = 0)
var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2))
if (require_synth)
if (isipc(possible_target.current))
@@ -31,7 +31,7 @@
target = pick(possible_targets)
/datum/objective/competition/find_target_by_role(role, role_type = 0, var/require_synth = 0)
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role))
if (require_synth && !(isipc(possible_target.current)))
continue
@@ -74,7 +74,7 @@
*/
/datum/objective/competition/assassinate_supporter/find_target()
var/list/possible_targets = list()
- for(var/datum/mind/possible_target in ticker.minds)
+ for(var/datum/mind/possible_target in SSticker.minds)
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2))
if (possible_target.current.client && possible_target.current.client.prefs && possible_target.current.client.prefs.antag_contest_side != side)
possible_targets += possible_target
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 09b15fe7750..65e82ff8fa8 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -51,8 +51,7 @@
process_cooldown()
cooldown--
if(cooldown <= 0) return 0
- spawn(10)
- process_cooldown()
+ addtimer(CALLBACK(src, .proc/process_cooldown), 10)
return 1
@@ -77,8 +76,7 @@
activate()
if(!secured || (cooldown > 0)) return 0
cooldown = 2
- spawn(10)
- process_cooldown()
+ addtimer(CALLBACK(src, .proc/process_cooldown), 10)
return 1
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index a78126bedc5..5e9dbaa9a00 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -19,9 +19,8 @@
if(bombtank)
icon_state = bombtank.icon_state
if(bombassembly)
- overlays += bombassembly.icon_state
- overlays += bombassembly.overlays
- overlays += "bomb_assembly"
+ add_overlay(bombassembly)
+ add_overlay("bomb_assembly")
/obj/item/device/onetankbomb/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/analyzer))
@@ -152,4 +151,4 @@
var/turf/simulated/T = get_turf(src)
if(!T)
return
- T.assume_air(removed)
\ No newline at end of file
+ T.assume_air(removed)
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index c29731c677f..5e8a6e13b81 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -64,15 +64,15 @@
update_icon()
- overlays.Cut()
+ cut_overlays()
if(a_left)
- overlays += "[a_left.icon_state]_left"
+ add_overlay("[a_left.icon_state]_left")
for(var/O in a_left.attached_overlays)
- overlays += "[O]_l"
+ add_overlay("[O]_l")
if(a_right)
- src.overlays += "[a_right.icon_state]_right"
+ add_overlay("[a_right.icon_state]_right")
for(var/O in a_right.attached_overlays)
- overlays += "[O]_r"
+ add_overlay("[O]_r")
if(master)
master.update_icon()
@@ -189,8 +189,7 @@
if(a_right)
a_right:holder = null
a_right.loc = T
- spawn(0)
- qdel(src)
+ QDEL_IN(src, 0)
return
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index edbc87c4809..654b62cbdeb 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -6,8 +6,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
secured = 1
- wires = WIRE_RECEIVE
- var/datum/effect_system/sparks/spark_system
+ wires = WIRE_RECEIVE
/obj/item/device/assembly/igniter/activate()
if(!..()) return 0//Cooldown check
@@ -24,15 +23,11 @@
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
if (tank && tank.modded)
tank.explode()
-
- spark_system.queue()
+
+ spark(src, 4, cardinal)
return 1
/obj/item/device/assembly/igniter/attack_self(mob/user as mob)
activate()
add_fingerprint(user)
return
-
-/obj/item/device/assembly/igniter/New()
- . = ..()
- spark_system = bind_spark(src, 4, cardinal)
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 06acb04d7ec..2216354d97c 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -39,10 +39,10 @@
update_icon()
- overlays.Cut()
+ cut_overlays()
attached_overlays = list()
if(on)
- overlays += "infrared_on"
+ add_overlay("infrared_on")
attached_overlays += "infrared_on"
if(holder)
@@ -103,8 +103,7 @@
if(!holder)
visible_message("\icon[src] *beep* *beep*")
cooldown = 2
- spawn(10)
- process_cooldown()
+ addtimer(CALLBACK(src, .proc/process_cooldown), 10)
return
@@ -261,4 +260,4 @@
if(next)
qdel(next)
next = null
- ..()
+ return ..()
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index e0e2b0dbe6d..7aa068234cf 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -57,9 +57,7 @@
if(!holder)
mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
cooldown = 2
- spawn(10)
- process_cooldown()
- return
+ addtimer(CALLBACK(src, .proc/process_cooldown), 10)
process()
@@ -93,13 +91,13 @@
update_icon()
- overlays.Cut()
+ cut_overlays()
attached_overlays = list()
if(timing)
- overlays += "prox_timing"
+ add_overlay("prox_timing")
attached_overlays += "prox_timing"
if(scanning)
- overlays += "prox_scanning"
+ add_overlay("prox_scanning")
attached_overlays += "prox_scanning"
if(holder)
holder.update_icon()
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 8ba62cdc371..ba3103418ce 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -11,8 +11,8 @@
/obj/item/assembly/shock_kit/Destroy()
qdel(part1)
qdel(part2)
- ..()
- return
+
+ return ..()
/obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench) && !status)
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 3fc26cb2a94..00964f78b33 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -17,18 +17,14 @@
var/datum/radio_frequency/radio_connection
var/deadman = 0
- New()
- ..()
- spawn(40)
- set_frequency(frequency)
- return
-
+ Initialize()
+ . = ..()
+ set_frequency(frequency)
activate()
if(cooldown > 0) return 0
cooldown = 2
- spawn(10)
- process_cooldown()
+ addtimer(CALLBACK(src, .proc/process_cooldown), 10)
signal()
return 1
@@ -156,13 +152,13 @@
proc/set_frequency(new_frequency)
if(!frequency)
return
- if(!radio_controller)
+ if(!SSradio)
sleep(20)
- if(!radio_controller)
+ if(!SSradio)
return
- radio_controller.remove_object(src, frequency)
+ SSradio.remove_object(src, frequency)
frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
+ radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT)
return
process()
@@ -188,7 +184,7 @@
usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
/obj/item/device/assembly/signaler/Destroy()
- if(radio_controller)
- radio_controller.remove_object(src,frequency)
+ if(SSradio)
+ SSradio.remove_object(src,frequency)
frequency = 0
- ..()
+ return ..()
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index 565a8ea160d..59af8749460 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -2,8 +2,8 @@
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
- origin_tech = list(TECH_MAGNET = 1)
- matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
wires = WIRE_PULSE
@@ -42,8 +42,7 @@
if(!holder)
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
cooldown = 2
- spawn(10)
- process_cooldown()
+ addtimer(CALLBACK(src, .proc/process_cooldown), 10)
return
@@ -58,10 +57,10 @@
update_icon()
- overlays.Cut()
+ cut_overlays()
attached_overlays = list()
if(timing)
- overlays += "timer_timing"
+ add_overlay("timer_timing")
attached_overlays += "timer_timing"
if(holder)
holder.update_icon()
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 09fd236be0d..dcba4b2afaa 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -25,7 +25,8 @@
var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID
var/species = "Human"
-/obj/effect/landmark/corpse/initialize()
+/obj/effect/landmark/corpse/Initialize()
+ . = ..()
createCorpse()
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
@@ -34,7 +35,9 @@
M.real_name = src.name
M.death(1) //Kills the new mob
if(src.corpseuniform)
- M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
+ var/obj/item/clothing/under/cuniform = new corpseuniform(M)
+ cuniform.sensor_mode = 0
+ M.equip_to_slot_or_del(cuniform, slot_w_uniform)
if(src.corpsesuit)
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
if(src.corpseshoes)
@@ -164,6 +167,11 @@
corpsemask = /obj/item/clothing/mask/breath
corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering
+/obj/effect/landmark/corpse/engineer/rotten
+ name = "unidentifiable corpse"
+ species = "Skeleton"
+ corpseid = 0
+
/obj/effect/landmark/corpse/clown
name = "Clown"
corpseuniform = /obj/item/clothing/under/rank/clown
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 04c255b94eb..d7c7a498ab5 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -8,7 +8,8 @@
var/active = 0
-/obj/machinery/gateway/initialize()
+/obj/machinery/gateway/Initialize()
+ . = ..()
update_icon()
if(dir == 2)
density = 0
@@ -34,7 +35,8 @@
var/wait = 0 //this just grabs world.time at world start
var/obj/machinery/gateway/centeraway/awaygate = null
-/obj/machinery/gateway/centerstation/initialize()
+/obj/machinery/gateway/centerstation/Initialize()
+ . = ..()
update_icon()
wait = world.time + config.gateway_delay //+ thirty minutes default
awaygate = locate(/obj/machinery/gateway/centeraway)
@@ -149,7 +151,8 @@ obj/machinery/gateway/centerstation/process()
var/obj/machinery/gateway/centeraway/stationgate = null
-/obj/machinery/gateway/centeraway/initialize()
+/obj/machinery/gateway/centeraway/Initialize()
+ . = ..()
update_icon()
stationgate = locate(/obj/machinery/gateway/centerstation)
@@ -233,4 +236,4 @@ obj/machinery/gateway/centerstation/process()
else
user << "\blue Recalibration successful! : \black This gate's systems have been fine tuned. Travel to this gate will now be on target."
calibrated = 1
- return
\ No newline at end of file
+ return
diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm
index 5aeb9651d2b..2a45c4c0de4 100644
--- a/code/modules/awaymissions/loot.dm
+++ b/code/modules/awaymissions/loot.dm
@@ -5,7 +5,8 @@
var/lootdoubles = 0 //if the same item can be spawned twice
var/loot = "" //a list of possible items to spawn- a string of paths
-/obj/effect/spawner/lootdrop/initialize()
+/obj/effect/spawner/lootdrop/Initialize()
+ ..()
var/list/things = params2list(loot)
if(things && things.len)
@@ -21,4 +22,5 @@
continue
new loot_path(get_turf(src))
- qdel(src)
+
+ return INITIALIZE_HINT_QDEL
diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm
index 78cbe78f8d2..42d4471d0e8 100644
--- a/code/modules/blob/blob.dm
+++ b/code/modules/blob/blob.dm
@@ -26,7 +26,7 @@
var/blob_cost = 1 //point cost of the blob tile
/obj/effect/blob/New(loc)
- processing_objects.Add(src)
+ START_PROCESSING(SScalamity, src)
health = maxHealth
var/matrix/M = matrix()
M.Turn(90 * pick(0,1,2,3))
@@ -40,7 +40,9 @@
parent_core.blob_count -= blob_cost
parent_core = null
- ..()
+ STOP_PROCESSING(SScalamity, src)
+
+ return ..()
/obj/effect/blob/process()
if(!parent_core)
@@ -50,7 +52,7 @@
return
// Make deleting the parent more responsive.
- if(!isnull(parent_core.gcDestroyed))
+ if(QDELING(parent_core))
parent_core = null
return
@@ -303,7 +305,6 @@
expandType = /obj/effect/blob
/obj/effect/blob/core/secondary/New()
- processing_objects.Add(src)
health = maxHealth
update_icon()
return ..(loc)
@@ -311,7 +312,7 @@
/obj/effect/blob/core/secondary/Destroy()
if(parent_core)
parent_core.core_count -= 1
- ..()
+ return ..()
/obj/effect/blob/shield
name = "strong blob"
@@ -330,7 +331,7 @@
/obj/effect/blob/shield/Destroy()
density = 0
update_nearby_tiles()
- ..()
+ return ..()
/obj/effect/blob/shield/update_icon()
if(health > maxHealth * 2 / 3)
diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm
index 28d625c9fef..fd3e0c5fa3b 100644
--- a/code/modules/cargo/randomstock.dm
+++ b/code/modules/cargo/randomstock.dm
@@ -300,7 +300,6 @@ var/list/global/random_stock_large = list(
)
/datum/cargospawner/New()
-
//First lets get the reference to our warehouse
for(var/areapath in typesof(/area/quartermaster/storage))
warehouse = locate(areapath)
@@ -312,6 +311,7 @@ var/list/global/random_stock_large = list(
for (var/obj/structure/table/B in warehouse)
tables |= B
+/datum/cargospawner/proc/start()
if (!warehouse || !warehouseturfs.len)
admin_notice("ERROR: Cargo spawner failed to locate warehouse. Terminating. ", R_DEBUG)
qdel(src)
diff --git a/code/modules/cciaa/cciaa.dm b/code/modules/cciaa/cciaa.dm
index 1767933b35d..d9ead7b329e 100644
--- a/code/modules/cciaa/cciaa.dm
+++ b/code/modules/cciaa/cciaa.dm
@@ -8,11 +8,7 @@
if(!holder)
return //how did they get here?
- if(!ticker)
- alert("Wait until the game starts")
- return
-
- if(ticker.current_state < GAME_STATE_PLAYING)
+ if(!ROUND_IS_STARTED)
src << "The game hasn't started yet! "
return
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
new file mode 100644
index 00000000000..219adb408fd
--- /dev/null
+++ b/code/modules/client/asset_cache.dm
@@ -0,0 +1,212 @@
+/*
+Asset cache quick users guide:
+
+Make a datum at the bottom of this file with your assets for your thing.
+The simple subsystem will most like be of use for most cases.
+Then call get_asset_datum() with the type of the datum you created and store the return
+Then call .send(client) on that stored return value.
+
+You can set verify to TRUE if you want send() to sleep until the client has the assets.
+*/
+
+
+// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping.
+// This is doubled for the first asset, then added per asset after
+#define ASSET_CACHE_SEND_TIMEOUT 7
+
+//When sending mutiple assets, how many before we give the client a quaint little sending resources message
+#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8
+
+/client
+ var/list/cache = list() // List of all assets sent to this client by the asset cache.
+ var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement.
+ var/list/sending = list()
+ var/last_asset_job = 0 // Last job done.
+
+//This proc sends the asset to the client, but only if it needs it.
+//This proc blocks(sleeps) unless verify is set to false
+/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE)
+ if(!istype(client))
+ if(ismob(client))
+ var/mob/M = client
+ if(M.client)
+ client = M.client
+
+ else
+ return 0
+
+ else
+ return 0
+
+ if(client.cache.Find(asset_name) || client.sending.Find(asset_name))
+ return 0
+
+ client << browse_rsc(SSassets.cache[asset_name], asset_name)
+ if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip.
+ if (client)
+ client.cache += asset_name
+ return 1
+ if (!client)
+ return 0
+
+ client.sending |= asset_name
+ var/job = ++client.last_asset_job
+
+ client << browse({"
+
+ "}, "window=asset_cache_browser")
+
+ var/t = 0
+ var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT
+ while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic()
+ sleep(1) // Lock up the caller until this is received.
+ t++
+
+ if(client)
+ client.sending -= asset_name
+ client.cache |= asset_name
+ client.completed_asset_jobs -= job
+
+ return 1
+
+//This proc blocks(sleeps) unless verify is set to false
+/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE)
+ if(!istype(client))
+ if(ismob(client))
+ var/mob/M = client
+ if(M.client)
+ client = M.client
+
+ else
+ return 0
+
+ else
+ return 0
+
+ var/list/unreceived = asset_list - (client.cache + client.sending)
+ if(!unreceived || !unreceived.len)
+ return 0
+ if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT)
+ to_chat(client, "Sending Resources...")
+ for(var/asset in unreceived)
+ if (asset in SSassets.cache)
+ client << browse_rsc(SSassets.cache[asset], asset)
+
+ if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip.
+ if (client)
+ client.cache += unreceived
+ return 1
+ if (!client)
+ return 0
+ client.sending |= unreceived
+ var/job = ++client.last_asset_job
+
+ client << browse({"
+
+ "}, "window=asset_cache_browser")
+
+ var/t = 0
+ var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len
+ while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic()
+ sleep(1) // Lock up the caller until this is received.
+ t++
+
+ if(client)
+ client.sending -= unreceived
+ client.cache |= unreceived
+ client.completed_asset_jobs -= job
+
+ return 1
+
+//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start.
+//The proc calls procs that sleep for long times.
+/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE)
+ for(var/file in files)
+ if (!client)
+ break
+ if (register_asset)
+ register_asset(file,files[file])
+ send_asset(client,file)
+ sleep(0) //queuing calls like this too quickly can cause issues in some client versions
+
+//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up.
+//if it's an icon or something be careful, you'll have to copy it before further use.
+/proc/register_asset(var/asset_name, var/asset)
+ SSassets.cache[asset_name] = asset
+
+//These datums are used to populate the asset cache, the proc "register()" does this.
+
+//all of our asset datums, used for referring to these later
+var/list/asset_datums = list()
+
+//get a assetdatum or make a new one
+/proc/get_asset_datum(var/type)
+ if (!(type in asset_datums))
+ return new type()
+ return asset_datums[type]
+
+/datum/asset/New()
+ asset_datums[type] = src
+
+/datum/asset/proc/register()
+ return
+
+/datum/asset/proc/send(client)
+ return
+
+//If you don't need anything complicated.
+/datum/asset/simple
+ var/assets = list()
+ var/verify = FALSE
+
+/datum/asset/simple/register()
+ for(var/asset_name in assets)
+ register_asset(asset_name, assets[asset_name])
+
+/datum/asset/simple/send(client)
+ send_asset_list(client,assets,verify)
+
+/datum/asset/simple/misc
+ assets = list(
+ "search.js" = 'html/search.js',
+ "panels.css" = 'html/panels.css',
+ "loading.gif" = 'html/images/loading.gif',
+ "bootstrap.min.css" = 'html/bootstrap/css/bootstrap.min.css',
+ "bootstrap.min.js" = 'html/bootstrap/js/bootstrap.min.js',
+ "jquery-2.0.0.min.js" = 'html/jquery/jquery-2.0.0.min.js',
+ "ie-truth.min.js" = 'html/iestats/ie-truth.min.js'
+ )
+
+/datum/asset/simple/paper
+ assets = list(
+ "talisman.png" = 'html/images/talisman.png',
+ "barcode0.png" = 'html/images/barcode0.png',
+ "barcode1.png" = 'html/images/barcode1.png',
+ "barcode2.png" = 'html/images/barcode2.png',
+ "barcode3.png" = 'html/images/barcode3.png'
+ )
+
+/datum/asset/simple/changelog
+ assets = list(
+ "88x31.png" = 'html/88x31.png',
+ "bug-minus.png" = 'html/bug-minus.png',
+ "cross-circle.png" = 'html/cross-circle.png',
+ "hard-hat-exclamation.png" = 'html/hard-hat-exclamation.png',
+ "image-minus.png" = 'html/image-minus.png',
+ "image-plus.png" = 'html/image-plus.png',
+ "map-pencil.png" = 'html/map-pencil.png',
+ "music-minus.png" = 'html/music-minus.png',
+ "music-plus.png" = 'html/music-plus.png',
+ "tick-circle.png" = 'html/tick-circle.png',
+ "wrench-screwdriver.png" = 'html/wrench-screwdriver.png',
+ "spell-check.png" = 'html/spell-check.png',
+ "burn-exclamation.png" = 'html/burn-exclamation.png',
+ "chevron.png" = 'html/chevron.png',
+ "chevron-expand.png" = 'html/chevron-expand.png',
+ "changelog.css" = 'html/changelog.css',
+ "changelog.js" = 'html/changelog.js'
+ )
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 2478287170d..bf996843542 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -1,4 +1,6 @@
/client
+ parent_type = /datum
+
////////////////
//ADMIN THINGS//
////////////////
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index b2edde4e29b..ee0cbb7dc30 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -24,6 +24,16 @@
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
return
+ // asset_cache
+ if(href_list["asset_cache_confirm_arrival"])
+ //to_chat(src, "ASSET JOB [href_list["asset_cache_confirm_arrival"]] ARRIVED.")
+ var/job = text2num(href_list["asset_cache_confirm_arrival"])
+ //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us
+ // into letting append to a list without limit.
+ if (job && job <= last_asset_job && !(job in completed_asset_jobs))
+ completed_asset_jobs += job
+ return
+
if (href_list["EMERG"] && href_list["EMERG"] == "action")
if (!info_sent)
handle_connection_info(src, href_list["data"])
@@ -157,7 +167,7 @@
if ("dismiss")
if (href_list["notification"])
var/datum/client_notification/a = locate(href_list["notification"])
- if (a && isnull(a.gcDestroyed))
+ if (!QDELETED(a))
a.dismiss()
// Forum link from various panels.
@@ -322,7 +332,6 @@
winset(src, null, "command=\".configure graphics-hwmode on\"")
send_resources()
- nanomanager.send_resources(src)
// Server greeting shenanigans.
if (server_greeting.find_outdated_info(src, 1))
@@ -441,22 +450,9 @@
//send resources to the client. It's here in its own proc so we can move it around easiliy if need be
/client/proc/send_resources()
-
- getFiles(
- 'html/search.js',
- 'html/panels.css',
- 'html/images/loading.gif',
- 'html/images/ntlogo.png',
- 'html/images/talisman.png',
- 'html/images/barcode0.png',
- 'html/images/barcode1.png',
- 'html/images/barcode2.png',
- 'html/images/barcode3.png',
- 'html/bootstrap/css/bootstrap.min.css',
- 'html/bootstrap/js/bootstrap.min.js',
- 'html/jquery/jquery-2.0.0.min.js',
- 'html/iestats/ie-truth.min.js'
- )
+ spawn (10) //removing this spawn causes all clients to not get verbs.
+ //Precache the client with all other assets slowly, so as to not block other browse() calls
+ getFilesSlow(src, SSassets.cache, register_asset = FALSE)
/mob/proc/MayRespawn()
return 0
diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm
index 01e5b3a8665..b48ccb962cd 100644
--- a/code/modules/client/preference_setup/global/02_settings.dm
+++ b/code/modules/client/preference_setup/global/02_settings.dm
@@ -71,7 +71,7 @@
pref.toggles ^= toggle_flag
if(toggle_flag == SOUND_LOBBY && isnewplayer(user))
if(pref.toggles & SOUND_LOBBY)
- user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
+ user << sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
else
user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)
return TOPIC_REFRESH
diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm
index bbb94611fed..7a9743a3838 100644
--- a/code/modules/client/preference_setup/loadout/loadout.dm
+++ b/code/modules/client/preference_setup/loadout/loadout.dm
@@ -10,9 +10,9 @@ var/list/gear_datums = list()
..()
/hook/startup/proc/populate_gear_list()
-
+ // Setup custom loadout.
//create a list of gear datums to sort
- for(var/geartype in typesof(/datum/gear)-/datum/gear)
+ for(var/geartype in subtypesof(/datum/gear))
var/datum/gear/G = geartype
var/use_name = initial(G.display_name)
@@ -24,11 +24,12 @@ var/list/gear_datums = list()
gear_datums[use_name] = new geartype
LC.gear[use_name] = gear_datums[use_name]
- loadout_categories = sortAssoc(loadout_categories)
+ sortTim(loadout_categories, /proc/cmp_text_asc, FALSE)
for(var/loadout_category in loadout_categories)
var/datum/loadout_category/LC = loadout_categories[loadout_category]
- LC.gear = sortAssoc(LC.gear)
- return 1
+ sortTim(LC.gear, /proc/cmp_text_asc, FALSE)
+
+ return TRUE
/datum/category_item/player_setup_item/loadout
name = "Loadout"
@@ -74,6 +75,7 @@ var/list/gear_datums = list()
pref.gear = json_decode(pref.gear)
catch
log_debug("SQL CHARACTER LOAD: Unable to load custom loadout for client [pref.client ? pref.client.ckey : "UNKNOWN"].")
+
pref.gear = list()
gear_reset = TRUE
else
diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm
index 4e70450faa1..27f4b7ef043 100644
--- a/code/modules/client/preference_setup/loadout/loadout_general.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_general.dm
@@ -55,5 +55,6 @@
var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type
if(!initial(lunchbox.filled))
lunchboxes[initial(lunchbox.name)] = lunchbox_type
- gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes))
+ sortTim(lunchboxes, /proc/cmp_text_asc)
+ gear_tweaks += new/datum/gear_tweak/path(lunchboxes)
gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks())
diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm
index 99af44e65eb..b04284df81d 100644
--- a/code/modules/client/preference_setup/preference_setup.dm
+++ b/code/modules/client/preference_setup/preference_setup.dm
@@ -122,9 +122,6 @@
var/sql_role = SQL_CHARACTER
var/modified = 0
-/datum/category_group/player_setup_category/dd_SortValue()
- return sort_order
-
/datum/category_group/player_setup_category/proc/sanitize_setup()
for(var/datum/category_item/player_setup_item/PI in items)
PI.sanitize_preferences()
@@ -214,9 +211,6 @@
pref = null
return ..()
-/datum/category_item/player_setup_item/dd_SortValue()
- return sort_order
-
/*
* Called when the item is asked to load per character settings - Only called when sql saves are disabled or unavailable
*/
diff --git a/code/modules/client/preferences_notification.dm b/code/modules/client/preferences_notification.dm
index ac42be96411..8d58401dd26 100644
--- a/code/modules/client/preferences_notification.dm
+++ b/code/modules/client/preferences_notification.dm
@@ -42,7 +42,7 @@
owner.notifications -= src
owner = null
- ..()
+ return ..()
/*
* Associates a callback to be executed whenever a notification is dismissed.
diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm
index ac0d5447e64..cb97fd588d4 100644
--- a/code/modules/client/preferences_spawnpoints.dm
+++ b/code/modules/client/preferences_spawnpoints.dm
@@ -24,20 +24,13 @@ var/list/spawntypes = list()
/datum/spawnpoint/arrivals
display_name = "Arrivals Shuttle"
- msg = "has arrived on the station"
+ msg = "is inbound from the NTCC Odin"
+
/datum/spawnpoint/arrivals/New()
..()
turfs = latejoin
-/datum/spawnpoint/gateway
- display_name = "Gateway"
- msg = "has completed translation from offsite gateway"
-
-/datum/spawnpoint/gateway/New()
- ..()
- turfs = latejoin_gateway
-
/datum/spawnpoint/cryo
display_name = "Cryogenic Storage"
msg = "has completed cryogenic revival"
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 91b3f1c84cd..35ea159a3b7 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -461,9 +461,9 @@ BLIND // can't see anything
return ..()
/obj/item/clothing/shoes/update_icon()
- overlays.Cut()
+ cut_overlays()
if(holding)
- overlays += image(icon, "[icon_state]_knife")
+ add_overlay("[icon_state]_knife")
return ..()
/obj/item/clothing/shoes/proc/handle_movement(var/turf/walking, var/running)
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 4f8e69479e7..5f0c6d0a06b 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -45,8 +45,8 @@
vision_flags = SEE_TURFS
see_invisible = SEE_INVISIBLE_NOLIGHTING
-/obj/item/clothing/glasses/meson/New()
- ..()
+/obj/item/clothing/glasses/meson/Initialize()
+ . = ..()
overlay = global_hud.meson
/obj/item/clothing/glasses/meson/prescription
@@ -62,8 +62,8 @@
toggleable = 1
unacidable = 1
-/obj/item/clothing/glasses/science/New()
- ..()
+/obj/item/clothing/glasses/science/Initialize()
+ . = ..()
overlay = global_hud.science
/obj/item/clothing/glasses/night
@@ -77,8 +77,8 @@
see_invisible = SEE_INVISIBLE_NOLIGHTING
off_state = "denight"
-/obj/item/clothing/glasses/night/New()
- ..()
+/obj/item/clothing/glasses/night/Initialize()
+ . = ..()
overlay = global_hud.nvg
/obj/item/clothing/glasses/eyepatch
@@ -248,8 +248,8 @@
desc = "Sunglasses with a HUD."
icon_state = "sunhud"
- New()
- ..()
+ Initialize()
+ . = ..()
src.hud = new/obj/item/clothing/glasses/hud/security(src)
return
@@ -284,8 +284,8 @@
M.disabilities &= ~NEARSIGHTED
..()
-/obj/item/clothing/glasses/thermal/New()
- ..()
+/obj/item/clothing/glasses/thermal/Initialize()
+ . = ..()
overlay = global_hud.thermal
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index dd7e421e6ac..d1e215c9474 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -35,7 +35,7 @@
new /obj/item/clothing/glasses/hud/health(T)
new /obj/item/clothing/glasses/regular(T)
user.drop_item(src)
- del(src)
+ qdel(src)
/obj/item/clothing/glasses/hud/security
name = "security HUD"
@@ -57,7 +57,7 @@
new /obj/item/clothing/glasses/hud/health(T)
new /obj/item/clothing/glasses/regular(T)
user.drop_item(src)
- del(src)
+ qdel(src)
/obj/item/clothing/glasses/hud/security/jensenshades
name = "augmented shades"
diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm
index ad14ed6ad31..88a5b376abe 100644
--- a/code/modules/clothing/gloves/stungloves.dm
+++ b/code/modules/clothing/gloves/stungloves.dm
@@ -87,8 +87,8 @@
/obj/item/clothing/gloves/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
if(wired)
- overlays += "gloves_wire"
+ add_overlay("gloves_wire")
if(cell)
- overlays += "gloves_cell"
+ add_overlay("gloves_cell")
diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm
index 15e51154d88..8748d7b61e5 100644
--- a/code/modules/clothing/spacesuits/rig/modules/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm
@@ -174,7 +174,7 @@
interface_desc = "A shoulder-mounted cell-powered taser."
gun_type = /obj/item/weapon/gun/energy/taser/mounted
-
+
/obj/item/rig_module/mounted/pulse
name = "mounted pulse rifle"
@@ -185,7 +185,7 @@
interface_desc = "A shoulder-mounted cell-powered pulse rifle."
gun_type = /obj/item/weapon/gun/energy/pulse
-
+
/obj/item/rig_module/mounted/smg
name = "mounted submachine gun"
@@ -196,7 +196,7 @@
interface_desc = "A forearm-mounted suit-powered ballistic submachine gun."
gun_type = /obj/item/weapon/gun/energy/mountedsmg
-
+
/obj/item/rig_module/mounted/xray
name = "mounted xray laser gun"
@@ -207,7 +207,7 @@
interface_desc = "A forearm-mounted suit-powered xray laser gun."
gun_type = /obj/item/weapon/gun/energy/xray/mounted
-
+
/obj/item/rig_module/mounted/ion
name = "mounted ion rifle"
@@ -219,6 +219,38 @@
gun_type = /obj/item/weapon/gun/energy/ionrifle/mounted
+/obj/item/rig_module/mounted/plasmacutter
+ name = "hardsuit plasma cutter"
+ desc = "A forearm mounted kinetic accelerator"
+ icon_state = "plasmacutter"
+ interface_name = "plasma cutter"
+ interface_desc = "A self-sustaining plasma arc capable of cutting through walls."
+ suit_overlay_active = "plasmacutter"
+ suit_overlay_inactive = "plasmacutter"
+ construction_cost = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250)
+ construction_time = 300
+
+ gun_type = /obj/item/weapon/gun/energy/plasmacutter/mounted
+
+/obj/item/rig_module/mounted/kinetic_accelerator
+ name = "hardsuit kinetic accelerator"
+ desc = "A lethal-looking industrial cutter."
+ icon_state = "kineticgun"
+ interface_name = "kinetic accelerator"
+ interface_desc = "A ranged mining tool that does increased damage in low pressure."
+
+ gun_type = /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
+
+/obj/item/rig_module/mounted/thermalldrill
+ name = "hardsuit thermal drill"
+ desc = "An incredibly lethal looking thermal drill."
+ icon_state = "thermaldrill"
+ interface_name = "thermal drill"
+ interface_desc = "A potent drill that can pierce rock walls over long distances."
+
+ gun_type = /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill
+
+
/obj/item/rig_module/mounted/energy_blade
name = "energy blade projector"
diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm
index 11c9a713d42..6743c9b488d 100644
--- a/code/modules/clothing/spacesuits/rig/modules/modules.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm
@@ -261,6 +261,10 @@
..()
src.module = module
+/stat_rig_module/Destroy()
+ module = null
+ return ..()
+
/stat_rig_module/proc/AddHref(var/list/href_list)
return
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index 4f4fab6f600..16c89569fc0 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -1,6 +1,5 @@
/* Contains:
* /obj/item/rig_module/device
- * /obj/item/rig_module/device/plasmacutter
* /obj/item/rig_module/device/healthscanner
* /obj/item/rig_module/device/drill
* /obj/item/rig_module/device/orescanner
@@ -28,20 +27,6 @@
var/device_type
var/obj/item/device
-/obj/item/rig_module/device/plasmacutter
- name = "hardsuit plasma cutter"
- desc = "A lethal-looking industrial cutter."
- icon_state = "plasmacutter"
- interface_name = "plasma cutter"
- interface_desc = "A self-sustaining plasma arc capable of cutting through walls."
- suit_overlay_active = "plasmacutter"
- suit_overlay_inactive = "plasmacutter"
- use_power_cost = 0.5
- construction_cost = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250)
- construction_time = 300
-
- device_type = /obj/item/weapon/pickaxe/plasmacutter
-
/obj/item/rig_module/device/healthscanner
name = "health scanner module"
desc = "A hardsuit-mounted health scanner."
@@ -54,7 +39,7 @@
device_type = /obj/item/device/healthanalyzer
/obj/item/rig_module/device/drill
- name = "hardsuit drill mount"
+ name = "hardsuit diamond drill mount"
desc = "A very heavy diamond-tipped drill."
icon_state = "drill"
interface_name = "mounted drill"
@@ -67,6 +52,18 @@
device_type = /obj/item/weapon/pickaxe/diamonddrill
+/obj/item/rig_module/device/basicdrill
+ name = "hardsuit drill mount"
+ desc = "A very heavy basic drill."
+ icon_state = "drill"
+ interface_name = "mounted drill"
+ interface_desc = "A basic industrial drill."
+ suit_overlay_active = "mounted-drill"
+ suit_overlay_inactive = "mounted-drill"
+ use_power_cost = 0.1
+
+ device_type = /obj/item/weapon/pickaxe/drill
+
/obj/item/rig_module/device/anomaly_scanner
name = "hardsuit anomaly scanner"
desc = "You think it's called an Elder Sarsparilla or something."
diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm
index 53695df857f..0e643aa05ed 100644
--- a/code/modules/clothing/spacesuits/rig/modules/vision.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/vision.dm
@@ -28,6 +28,11 @@
/datum/rig_vision/meson/New()
glasses = new /obj/item/clothing/glasses/meson
+/datum/rig_vision/material
+ mode = "meson scanner"
+/datum/rig_vision/material/New()
+ glasses = new /obj/item/clothing/glasses/material
+
/datum/rig_vision/sechud
mode = "security HUD"
/datum/rig_vision/sechud/New()
@@ -83,7 +88,7 @@
/obj/item/rig_module/vision/meson
- name = "hardsuit meson scanner"
+ name = "hardsuit meson/material scanner"
desc = "A layered, translucent visor system for a hardsuit."
icon_state = "meson"
@@ -92,10 +97,11 @@
construction_cost = list("glass"=5000,DEFAULT_WALL_MATERIAL=1500)
construction_time = 300
- interface_name = "meson scanner"
- interface_desc = "An integrated meson scanner."
+ interface_name = "meson/material scanner"
+ interface_desc = "An integrated meson/material scanner."
- vision_modes = list(/datum/rig_vision/meson)
+ vision_modes = list(/datum/rig_vision/meson,
+ /datum/rig_vision/material)
/obj/item/rig_module/vision/thermal
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 743041f3c48..1d4c14838f6 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -94,18 +94,18 @@
usr << "The maintenance panel is [open ? "open" : "closed"]."
usr << "Hardsuit systems are [offline ? "offline " : "online "]."
-/obj/item/weapon/rig/New()
- ..()
+/obj/item/weapon/rig/Initialize()
+ . = ..()
item_state = icon_state
wires = new(src)
- if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len))
+ if(!LAZYLEN(req_access) && !LAZYLEN(req_one_access))
locked = 0
spark_system = bind_spark(src, 5)
- processing_objects |= src
+ START_PROCESSING(SSprocessing, src)
if(initial_modules && initial_modules.len)
for(var/path in initial_modules)
@@ -158,7 +158,7 @@
if(istype(M))
M.drop_from_inventory(piece)
qdel(piece)
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
qdel(wires)
wires = null
qdel(spark_system)
@@ -844,9 +844,14 @@
if(!wearer.lastarea)
wearer.lastarea = get_area(wearer.loc)
- if((istype(wearer.loc, /turf/space)) || (wearer.lastarea.has_gravity == 0))
- if(!wearer.Process_Spacemove(0))
+ if(!wearer.check_solid_ground())
+ var/allowmove = wearer.Allow_Spacemove(0)
+ if(!allowmove)
return 0
+ else if(allowmove == -1 && wearer.handle_spaceslipping()) //Check to see if we slipped
+ return 0
+ else
+ wearer.inertia_dir = 0 //If not then we can reset inertia and move
if(malfunctioning)
direction = pick(cardinal)
diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm
index 6e2461e6e31..0b54c3986c2 100644
--- a/code/modules/clothing/spacesuits/rig/suits/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm
@@ -67,5 +67,5 @@
/obj/item/rig_module/power_sink,
/obj/item/rig_module/chem_dispenser/combat,
/obj/item/rig_module/chem_dispenser/injector,
- /obj/item/rig_module/device/plasmacutter
+ /obj/item/rig_module/mounted/plasmacutter
)
diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm
index 678657626a8..de59cfdcfcb 100644
--- a/code/modules/clothing/spacesuits/rig/suits/ert.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm
@@ -39,7 +39,7 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/vision/meson,
/obj/item/rig_module/maneuvering_jets,
- /obj/item/rig_module/device/plasmacutter,
+ /obj/item/rig_module/mounted/plasmacutter,
/obj/item/rig_module/device/rcd
)
@@ -104,7 +104,7 @@
/obj/item/rig_module/mounted/pulse,
/obj/item/rig_module/chem_dispenser/combat,
/obj/item/rig_module/chem_dispenser/injector,
- /obj/item/rig_module/device/plasmacutter,
+ /obj/item/rig_module/mounted/plasmacutter,
/obj/item/rig_module/device/rcd,
/obj/item/rig_module/datajack
)
diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm
index b80d456359e..3b56e45540b 100644
--- a/code/modules/clothing/spacesuits/rig/suits/station.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/station.dm
@@ -77,7 +77,7 @@
/obj/item/weapon/rig/industrial/equipped
initial_modules = list(
- /obj/item/rig_module/device/plasmacutter,
+ /obj/item/rig_module/mounted/plasmacutter,
/obj/item/rig_module/device/drill,
/obj/item/rig_module/device/orescanner,
/obj/item/rig_module/device/rcd,
@@ -109,7 +109,7 @@
/obj/item/weapon/rig/eva/equipped
initial_modules = list(
- /obj/item/rig_module/device/plasmacutter,
+ /obj/item/rig_module/mounted/plasmacutter,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/device/rcd,
/obj/item/rig_module/vision/meson
@@ -145,7 +145,7 @@
initial_modules = list(
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
- /obj/item/rig_module/device/plasmacutter,
+ /obj/item/rig_module/mounted/plasmacutter,
/obj/item/rig_module/device/rcd,
/obj/item/rig_module/vision/meson
)
diff --git a/code/modules/clothing/spacesuits/rig/suits/terminator.dm b/code/modules/clothing/spacesuits/rig/suits/terminator.dm
index d450537a5c4..f1ac57db98c 100644
--- a/code/modules/clothing/spacesuits/rig/suits/terminator.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/terminator.dm
@@ -25,7 +25,7 @@
/obj/item/rig_module/vision,
/obj/item/rig_module/voice,
/obj/item/rig_module/datajack,
- /obj/item/rig_module/device/plasmacutter
+ /obj/item/rig_module/mounted/plasmacutter
)
/obj/item/clothing/head/helmet/space/rig/terminator
@@ -52,5 +52,5 @@
/obj/item/rig_module/vision,
/obj/item/rig_module/voice,
/obj/item/rig_module/datajack,
- /obj/item/rig_module/device/plasmacutter
+ /obj/item/rig_module/mounted/plasmacutter
)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index 423cb7ee10a..235808b9c7e 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -31,8 +31,8 @@
light_wedge = LIGHT_WIDE
on = 0
-/obj/item/clothing/head/helmet/space/initialize()
- ..()
+/obj/item/clothing/head/helmet/space/Initialize()
+ . = ..()
if(camera_networks && camera_networks.len)
verbs += /obj/item/clothing/head/helmet/space/proc/toggle_camera
diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index d7ca80e760b..0919fcca4d3 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -6,6 +6,7 @@
desc = "A crimson helmet sporting clean lines and durable plating. Engineered to look menacing."
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.3
+ brightness_on = 6
/obj/item/clothing/suit/space/syndicate
name = "red space suit"
diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm
index 941338dae88..7247d28960d 100644
--- a/code/modules/clothing/spacesuits/void/merc.dm
+++ b/code/modules/clothing/spacesuits/void/merc.dm
@@ -13,6 +13,7 @@
species_restricted = list("Human", "Vaurca", "Machine")
camera_networks = list(NETWORK_MERCENARY)
light_overlay = "helmet_light_green" //todo: species-specific light overlays
+ brightness_on = 6
/obj/item/clothing/suit/space/void/merc
icon_state = "rig-syndie"
diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm
index f6fb0ae6b0b..4813055a981 100644
--- a/code/modules/clothing/spacesuits/void/station.dm
+++ b/code/modules/clothing/spacesuits/void/station.dm
@@ -9,6 +9,7 @@
slot_r_hand_str = "eng_helm"
)
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80)
+ brightness_on = 6
/obj/item/clothing/suit/space/void/engineering
name = "engineering voidsuit"
@@ -34,6 +35,7 @@
)
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
light_overlay = "helmet_light_dual"
+ brightness_on = 6
/obj/item/clothing/suit/space/void/mining
icon_state = "rig-mining"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 9fb30b498f1..12fbb7642bb 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -27,7 +27,7 @@
if (pockets)
qdel(pockets)
pockets = null
- ..()
+ return ..()
/obj/item/clothing/suit/armor/attack_hand(mob/user as mob)
if (pockets)
diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm
index 2bac0f9ee6c..2fcbf17ce04 100644
--- a/code/modules/clothing/suits/storage.dm
+++ b/code/modules/clothing/suits/storage.dm
@@ -11,7 +11,7 @@
/obj/item/clothing/suit/storage/Destroy()
qdel(pockets)
pockets = null
- ..()
+ return ..()
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
if (pockets.handle_attack_hand(user))
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index a8423bd1b44..72546649e1a 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -151,7 +151,7 @@
/obj/item/clothing/suit/bomb_suit/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/clothing/head/bomb_hood/security
diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm
index 480cb22092d..163afc3ee79 100644
--- a/code/modules/detectivework/tools/rag.dm
+++ b/code/modules/detectivework/tools/rag.dm
@@ -35,7 +35,7 @@
/obj/item/weapon/reagent_containers/glass/rag/Destroy()
processing_objects -= src //so we don't continue turning to ash while gc'd
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob)
if(on_fire)
diff --git a/code/modules/detectivework/tools/swabs.dm b/code/modules/detectivework/tools/swabs.dm
index 696e3994b08..7faaa6d39f1 100644
--- a/code/modules/detectivework/tools/swabs.dm
+++ b/code/modules/detectivework/tools/swabs.dm
@@ -82,7 +82,7 @@
choices |= "Blood"
if(istype(A, /obj/item/clothing))
choices |= "Gunshot Residue"
- if(A.other_DNA && A.other_DNA_type == "saliva")
+ if(LAZYLEN(A.other_DNA) && A.other_DNA_type == "saliva")
choices |= "Saliva"
var/choice
@@ -113,7 +113,7 @@
sample_type = "residue"
if ("Saliva")
- if (!A.other_DNA || !length(A.other_DNA)) return
+ if (!LAZYLEN(A.other_DNA)) return
dna = A.other_DNA.Copy()
sample_type = "saliva"
diff --git a/code/modules/detectivework/tools/uvlight.dm b/code/modules/detectivework/tools/uvlight.dm
index b2e62477855..22bb84301d7 100644
--- a/code/modules/detectivework/tools/uvlight.dm
+++ b/code/modules/detectivework/tools/uvlight.dm
@@ -40,7 +40,7 @@
stored_alpha.Cut()
if(reset_objects.len)
for(var/obj/item/I in reset_objects)
- I.overlays -= I.blood_overlay
+ I.cut_overlay(I.blood_overlay, TRUE)
if(I.fluorescent == 2) I.fluorescent = 1
reset_objects.Cut()
@@ -64,5 +64,5 @@
if(istype(A, /obj/item))
var/obj/item/O = A
if(O.was_bloodied && !(O.blood_overlay in O.overlays))
- O.overlays |= O.blood_overlay
+ O.add_overlay(O.blood_overlay, TRUE)
reset_objects |= O
diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm
index 85edb8f37e7..73aeb647bcb 100644
--- a/code/modules/economy/ATM.dm
+++ b/code/modules/economy/ATM.dm
@@ -33,8 +33,8 @@ log transactions
var/editing_security_level = 0
var/view_screen = NO_SCREEN
-/obj/machinery/atm/initialize()
- ..()
+/obj/machinery/atm/Initialize()
+ . = ..()
machine_id = "[station_name()] RT #[num_financial_terminals++]"
/obj/machinery/atm/Destroy()
diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm
index ef89fd62ae4..2d1a2fb36ae 100644
--- a/code/modules/economy/cash.dm
+++ b/code/modules/economy/cash.dm
@@ -161,4 +161,39 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob)
/obj/item/weapon/spacecash/ewallet/examine(mob/user)
..(user)
if (!(user in view(2)) && user!=src.loc) return
- user << "\blue Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth]."
+ user << "Charge card's owner: [src.owner_name]. Credit chips remaining: [src.worth]. "
+
+/obj/item/weapon/spacecash/ewallet/lotto
+ name = "lottery card"
+ desc = "A scratch-action charge card that contains a variable amount of money."
+ worth = 0
+ var/scratched = 0
+
+/obj/item/weapon/spacecash/ewallet/lotto/attack_self(mob/user)
+ if(!scratched)
+ user << "You initiate the simulated scratch action process on the charge card. . . "
+ if(do_after(user,5))
+ switch(rand(1,100))
+ if(1 to 29)
+ worth = rand(0,200)
+ user << "The card reads [worth]. Not your lucky day! "
+ if(30 to 59)
+ worth = 200
+ user << "The card reads [worth]. At least you broke even. "
+ if(60 to 79)
+ worth = pick(200,300,400,500)
+ user << "The card reads [worth]. That's a pretty penny! "
+ if(80 to 95)
+ worth = pick(500,600,700,800,900,1000)
+ user << "The card reads [worth]. Your luck is running high! "
+ if(95 to 99)
+ worth = pick(1000,2000,3000,4000,5000,6000,7000,8000,9000)
+ user << "The card reads [worth]. You're rich! "
+ if(100)
+ worth = pick(10000,20000,30000,40000,50000)
+ user << "The card reads [worth]. You're blessed! "
+ else
+ worth = 0
+ user << "The card reads [worth]. Not your lucky day! "
+ scratched = 1
+ owner_name = user.name
\ No newline at end of file
diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm
index 6f5d1b57962..f9b7ca07740 100644
--- a/code/modules/economy/economy_misc.dm
+++ b/code/modules/economy/economy_misc.dm
@@ -48,12 +48,13 @@
/var/list/economic_species_modifier = list(
- /datum/species/human = 10,
- /datum/species/skrell = 12,
+ /datum/species/human = 12,
+ /datum/species/skrell = 10,
/datum/species/tajaran = 7,
/datum/species/unathi = 7,
- /datum/species/diona = 5,
- /datum/species/vox = 1
+ /datum/species/diona = 3,
+ /datum/species/machine = 3,
+ /datum/species/bug = 1
)
//---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel:
diff --git a/code/modules/effects/_effect_system_docs.dm b/code/modules/effects/_effect_system_docs.dm
index f8e830c9bd3..a99f90396ea 100644
--- a/code/modules/effects/_effect_system_docs.dm
+++ b/code/modules/effects/_effect_system_docs.dm
@@ -13,7 +13,7 @@
/datum/effect_system/proc/queue()
- Called when the object is queued for update. Overriding procs should call ..()
-/datum/effect_system/proc/process()
+/datum/effect_system/process()
- Called when the processor processes this effect.
Return ..() to allow default behavior of self-destroying after one tick.
Alternately; EFFECT_HALT, EFFECT_CONTINUE, and EFFECT_DESTROY can be used to tell the processor what to do with the object.
diff --git a/code/modules/effects/effect_system.dm b/code/modules/effects/effect_system.dm
index a68dcecb1ca..e6ac6507b97 100644
--- a/code/modules/effects/effect_system.dm
+++ b/code/modules/effects/effect_system.dm
@@ -12,16 +12,19 @@
/datum/effect_system/Destroy()
if (holder)
holder = null
- ..()
+ STOP_EFFECT(src)
+ return ..()
// Queues an effect.
/datum/effect_system/proc/queue()
- if (effect_master)
- effect_master.queue(src)
+ if (holder)
+ set_loc(holder)
+ if (SSeffects)
+ QUEUE_EFFECT(src)
return TRUE
return FALSE
-/datum/effect_system/proc/process()
+/datum/effect_system/process(elapsed)
if (holder)
location = get_turf(holder)
return EFFECT_HALT
@@ -31,7 +34,7 @@
holder = target
/datum/effect_system/proc/set_loc(var/atom/movable/loc)
- if (istype(loc, /turf/))
+ if (isturf(loc))
location = loc
else
location = get_turf(loc)
diff --git a/code/modules/effects/sparks/procs.dm b/code/modules/effects/sparks/procs.dm
index 910e991c160..e0bb9101b9c 100644
--- a/code/modules/effects/sparks/procs.dm
+++ b/code/modules/effects/sparks/procs.dm
@@ -3,7 +3,7 @@
new /datum/effect_system/sparks(get_turf(loc), TRUE, amount, spread_dirs)
/proc/bind_spark(var/atom/movable/loc, var/amount = 1, var/spread_dirs = cardinal)
- var/datum/effect_system/sparks/S = new /datum/effect_system/sparks(loc, FALSE, amount, spread_dirs)
+ var/datum/effect_system/sparks/S = new(loc, FALSE, amount, spread_dirs)
S.bind(loc)
return S
diff --git a/code/modules/effects/sparks/spawner.dm b/code/modules/effects/sparks/spawner.dm
index 1ed6b8db2ff..843424c6d1e 100644
--- a/code/modules/effects/sparks/spawner.dm
+++ b/code/modules/effects/sparks/spawner.dm
@@ -20,32 +20,26 @@
..(start_immediately)
-/datum/effect_system/sparks/queue()
- if (holder)
- location = get_turf(holder)
-
- return ..()
-
/datum/effect_system/sparks/process()
. = ..()
var/total_sparks = 1
if (location)
- var/obj/visual_effect/sparks/S = getFromPool(/obj/visual_effect/sparks, location, src, 0) //Trigger one on the tile it's on
+ var/obj/visual_effect/sparks/S = new(location, src, 0) //Trigger one on the tile it's on
S.start()
playsound(location, "sparks", 100, 1)
- effects_visuals += S // Queue it.
+ QUEUE_VISUAL(S) // Queue it.
while (total_sparks <= src.amount)
playsound(location, "sparks", 100, 1)
var/direction = 0
- if (src.spread && src.spread.len)
- direction = 0
- else
+ if (LAZYLEN(src.spread))
direction = pick(src.spread)
+ else
+ direction = 0
- S = getFromPool(/obj/visual_effect/sparks, location, src)
+ S = new /obj/visual_effect/sparks(location, src)
S.start(direction)
- effects_visuals += S
+ QUEUE_VISUAL(S)
total_sparks++
diff --git a/code/modules/effects/sparks/visuals.dm b/code/modules/effects/sparks/visuals.dm
index 7e55170e3d1..f83cd1b426e 100644
--- a/code/modules/effects/sparks/visuals.dm
+++ b/code/modules/effects/sparks/visuals.dm
@@ -20,7 +20,8 @@
animate(src, alpha = 0, time = 2, easing = SINE_EASING | EASE_IN)
/obj/visual_effect/sparks/start(var/direction)
- ..()
if (direction)
- spawn (5)
- step(src, direction)
+ addtimer(CALLBACK(src, .proc/do_step, direction), 5)
+
+/obj/visual_effect/sparks/proc/do_step(direction)
+ step(src, direction)
diff --git a/code/modules/effects/visual_effect.dm b/code/modules/effects/visual_effect.dm
index 454d1e3c2fe..9bf33ce91f2 100644
--- a/code/modules/effects/visual_effect.dm
+++ b/code/modules/effects/visual_effect.dm
@@ -4,7 +4,9 @@
anchored = 1
simulated = 0
mouse_opacity = 0
- var/life_ticks // How many ticks this effect will life before it stops processing.
+ var/life_ticks // How many ticks this effect will live before it stops processing.
+ // Will be set to a random number between life_ticks_min and life_ticks_max if unspecified.
+
var/life_ticks_max // The high limit for the random tick picker.
var/life_ticks_min // The low limit for the random tick picker.
@@ -12,8 +14,8 @@
..()
life_ticks_min = life_min
life_ticks_max = life_max
- life_ticks = rand(life_ticks_min, life_ticks_max)
- flick(icon_state, src)
+ if (!life_ticks)
+ life_ticks = rand(life_ticks_min, life_ticks_max)
// Called when the visual_effect is manifested.
/obj/visual_effect/proc/start()
@@ -26,10 +28,6 @@
life_ticks--
return EFFECT_CONTINUE
-// Called just before the visual_effect is returned to the pool.
-/obj/visual_effect/proc/end()
- loc = null
-
/obj/visual_effect/Destroy()
- // ¯\_(ツ)_/¯
- // This runtimes in expansions.dm if ..() is called.
+ STOP_VISUAL(src)
+ return ..()
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index 2442f13677d..4957c41184c 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -20,8 +20,10 @@
/datum/event/carp_migration/start()
if(severity == EVENT_LEVEL_MAJOR)
spawn_fish(landmarks_list.len)
+ spawn_caverndweller(landmarks_list.len)
else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups
+ spawn_caverndweller(rand(1, 2)) //less of those, also don't happen in the regular event
else
spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs
@@ -38,13 +40,28 @@
while (i <= num_groups)
var/group_size = rand(group_size_min, group_size_max)
for (var/j = 1, j <= group_size, j++)
- spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
+ var/mob/living/simple_animal/hostile/carp/carp = new(spawn_locations[i])
+ spawned_carp += "\ref[carp]"
+ i++
+
+/datum/event/carp_migration/proc/spawn_caverndweller(var/num_groups, var/group_size_min=3, var/group_size_max=5)
+ var/list/spawn_locations = list()
+
+ for(var/obj/effect/landmark/C in landmarks_list)
+ if(C.name == "cavernspawn")
+ spawn_locations.Add(C.loc)
+ spawn_locations = shuffle(spawn_locations)
+ num_groups = min(num_groups, spawn_locations.len)
+
+ var/i = 1
+ while (i <= num_groups)
+ var/group_size = rand(group_size_min, group_size_max)
+ for (var/j = 1, j <= group_size, j++)
+ spawned_carp.Add(new /mob/living/simple_animal/hostile/retaliate/cavern_dweller(spawn_locations[i]))
i++
/datum/event/carp_migration/end()
- for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
- if(!C.stat)
- var/turf/T = get_turf(C)
- if(istype(T, /turf/space))
- if(!prob(50))
- qdel(C)
+ for (var/carp_ref in spawned_carp)
+ var/mob/living/simple_animal/hostile/carp/fish = locate(carp_ref)
+ if (fish && istype(fish.loc, /turf/space) && prob(50))
+ qdel(fish)
diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm
index d1df5889e87..ae94c88719f 100644
--- a/code/modules/events/event.dm
+++ b/code/modules/events/event.dm
@@ -29,7 +29,7 @@
if(!enabled)
return 0
- if(excluded_gamemodes.len && (ticker.mode in excluded_gamemodes))
+ if(excluded_gamemodes.len && (SSticker.mode in excluded_gamemodes))
// There's no way it'll be run this round anyways.
enabled = 0
return 0
@@ -116,7 +116,7 @@
//Do not override this proc, instead use the appropiate procs.
//This proc will handle the calls to the appropiate procs.
-/datum/event/proc/process()
+/datum/event/process()
if(activeFor > startWhen && activeFor < endWhen)
tick()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 6e502275277..4857108eadb 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -21,7 +21,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
var/last_world_time = 0
-/datum/event_container/proc/process()
+/datum/event_container/process()
if(!next_event_time)
set_event_delay()
@@ -164,7 +164,6 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 100),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 1),0,10,125, list("Extended")),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 50, list(ASSIGNMENT_SECURITY = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 50, list(ASSIGNMENT_ENGINEER = 7)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 50, list(ASSIGNMENT_SECURITY = 25)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 12), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Major Vermin Infestation", /datum/event/infestation, 60, list(ASSIGNMENT_JANITOR = 15, ASSIGNMENT_SECURITY = 15))
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index 9b5425fe3ca..9fdbbd935e3 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -172,7 +172,7 @@
num--
if(vermin == VERM_SPIDERS)
- var/obj/effect/spider/spiderling/S = new(T)
+ var/obj/effect/spider/spiderling/S = new /obj/effect/spider/spiderling(T)
S.amount_grown = 1
S.growth_rate = (rand(50,300)/1000)//At most, they grow at 30% the usual rate. As low as 1/20th
if (severity == EVENT_LEVEL_MODERATE)
@@ -213,4 +213,4 @@
#undef VERM_DIYAAB
#undef VERM_BATS
#undef VERM_YITHIAN
-#undef VERM_TINDALOS
\ No newline at end of file
+#undef VERM_TINDALOS
diff --git a/code/modules/events/shipping_error.dm b/code/modules/events/shipping_error.dm
index ba1492e65ac..45d6bdcfeaa 100644
--- a/code/modules/events/shipping_error.dm
+++ b/code/modules/events/shipping_error.dm
@@ -1,6 +1,6 @@
/datum/event/shipping_error/start()
var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_controller.ordernum
- O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)]
+ O.ordernum = SScargo.ordernum
+ O.object = SScargo.supply_packs[pick(SScargo.supply_packs)]
O.orderedby = random_name(pick(MALE,FEMALE), species = "Human")
- supply_controller.shoppinglist += O
\ No newline at end of file
+ SScargo.shoppinglist += O
diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm
index d64ebbfcb15..9577157e2b5 100644
--- a/code/modules/events/wallrot.dm
+++ b/code/modules/events/wallrot.dm
@@ -6,26 +6,27 @@ datum/event/wallrot/announce()
command_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
datum/event/wallrot/start()
- spawn()
- var/turf/simulated/wall/center = null
+ set waitfor = FALSE
+
+ var/turf/simulated/wall/center = null
- // 100 attempts
- for(var/i=0, i<100, i++)
- var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1)
- if(istype(candidate, /turf/simulated/wall))
- center = candidate
+ // 100 attempts
+ for(var/i=0, i<100, i++)
+ var/turf/candidate = locate(rand(1, world.maxx), rand(1, world.maxy), 1)
+ if(istype(candidate, /turf/simulated/wall))
+ center = candidate
- if(center)
- // Make sure at least one piece of wall rots!
- center.rot()
+ if(center)
+ // Make sure at least one piece of wall rots!
+ center.rot()
- // Have a chance to rot lots of other walls.
- var/rotcount = 0
- var/actual_severity = severity * rand(10, 20)
- for(var/turf/simulated/wall/W in range(12, center)) if(prob(30))
- W.rot()
- rotcount++
+ // Have a chance to rot lots of other walls.
+ var/rotcount = 0
+ var/actual_severity = severity * rand(10, 20)
+ for(var/turf/simulated/wall/W in range(12, center)) if(prob(30))
+ W.rot()
+ rotcount++
- // Only rot up to severity walls
- if(rotcount >= actual_severity)
- break
\ No newline at end of file
+ // Only rot up to severity walls
+ if(rotcount >= actual_severity)
+ break
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 757d692c3a0..998b563a38b 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -261,35 +261,34 @@ proc/check_panel(mob/M)
New()
..()
- spawn(300)
- if(my_target)
- my_target.hallucinations -= src
- qdel(src)
+ addtimer(CALLBACK(src, .proc/end), 300)
step_away(src,my_target,2)
spawn attack_loop()
+ proc/end()
+ if (my_target)
+ my_target.hallucinations -= src
+
+ walk(src, 0)
+ qdel(src)
proc/updateimage()
- // qdel(src.currentimage)
-
-
if(src.dir == NORTH)
- qdel(src.currentimage)
+ del currentimage // Can't qdel images.
src.currentimage = new /image(up,src)
else if(src.dir == SOUTH)
- qdel(src.currentimage)
+ del currentimage
src.currentimage = new /image(down,src)
else if(src.dir == EAST)
- qdel(src.currentimage)
+ del currentimage
src.currentimage = new /image(right,src)
else if(src.dir == WEST)
- qdel(src.currentimage)
+ del currentimage
src.currentimage = new /image(left,src)
my_target << currentimage
-
proc/attack_loop()
- while(1)
+ while(!QDELETED(src))
sleep(rand(5,10))
if(src.health < 0)
collapse()
@@ -328,9 +327,7 @@ proc/check_panel(mob/M)
O.name = "blood"
var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1)
target << I
- spawn(300)
- qdel(O)
- return
+ QDEL_IN(O, 300)
var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/item/ammo_magazine/a357,\
/obj/item/weapon/gun/energy/crossbow, /obj/item/weapon/melee/energy/sword,\
diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm
index 2917f8c2ceb..a2431f5e95e 100644
--- a/code/modules/holodeck/HolodeckControl.dm
+++ b/code/modules/holodeck/HolodeckControl.dm
@@ -161,7 +161,7 @@
//This could all be done better, but it works for now.
/obj/machinery/computer/HolodeckControl/Destroy()
emergencyShutdown()
- ..()
+ return ..()
/obj/machinery/computer/HolodeckControl/ex_act(severity)
emergencyShutdown()
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index ca092df49f8..b7eed760381 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -74,13 +74,14 @@
plane = PLANE_SPACE_BACKGROUND
dynamic_lighting = 0
-/turf/simulated/floor/holofloor/space/New()
+/turf/simulated/floor/holofloor/space/Initialize()
+ . = ..()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
I.plane = PLANE_SPACE_DUST
I.alpha = 80
I.blend_mode = BLEND_ADD
- overlays += I
+ add_overlay(I)
/turf/simulated/floor/holofloor/beach
desc = "Uncomfortably gritty for a hologram."
@@ -120,10 +121,10 @@
initial_flooring = null
footstep_sound = "gravelstep"
-/turf/simulated/floor/holofloor/desert/New()
- ..()
+/turf/simulated/floor/holofloor/desert/Initialize()
+ . = ..()
if(prob(10))
- overlays += "asteroid[rand(0,9)]"
+ add_overlay("asteroid[rand(0,9)]")
/obj/structure/holostool
name = "stool"
@@ -139,7 +140,7 @@
item_state = "boxing"
/obj/structure/window/reinforced/holowindow/Destroy()
- ..()
+ return ..()
/obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob)
if(!istype(W)) return//I really wish I did not need this
@@ -195,10 +196,10 @@
return
/obj/structure/window/reinforced/holowindow/disappearing/Destroy()
- ..()
+ return ..()
/obj/machinery/door/window/holowindoor/Destroy()
- ..()
+ return ..()
/obj/machinery/door/window/holowindoor/attackby(obj/item/weapon/I as obj, mob/user as mob)
@@ -236,7 +237,7 @@
qdel(src)
/obj/structure/bed/chair/holochair/Destroy()
- ..()
+ return ..()
/obj/structure/bed/chair/holochair/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/wrench))
diff --git a/code/modules/hydroponics/beekeeping/net.dm b/code/modules/hydroponics/beekeeping/net.dm
index a07e35d6e7d..ed789df002b 100644
--- a/code/modules/hydroponics/beekeeping/net.dm
+++ b/code/modules/hydroponics/beekeeping/net.dm
@@ -90,7 +90,7 @@
if (target.strength <= 0)
qdel(target)
- if (target && !target.gcDestroyed)
+ if (!QDELETED(target))
target.update_icons()
@@ -141,4 +141,4 @@
B.update_icons()
caught_bees = 0
- feralbees = 0
\ No newline at end of file
+ feralbees = 0
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 995e372de8a..a202813a21e 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -11,8 +11,7 @@
var/datum/seed/seed
var/potency = -1
-/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc,planttype)
-
+/obj/item/weapon/reagent_containers/food/snacks/grown/New(loca, planttype)
..()
if(!dried_type)
dried_type = type
@@ -26,14 +25,12 @@
if(!plantname)
return
- if(!plant_controller)
- sleep(250) // ugly hack, should mean roundstart plants are fine.
- if(!plant_controller)
+ if(!SSplants)
world << "Plant controller does not exist and [src] requires it. Aborting. "
qdel(src)
return
- seed = plant_controller.seeds[plantname]
+ seed = SSplants.seeds[plantname]
if(!seed)
return
@@ -63,15 +60,13 @@
if(!seed)
return
- if(!plant_controller)
- sleep(250) // ugly hack, should mean roundstart plants are fine.
- if(!plant_controller)
+ if(!SSplants)
world << "Plant controller does not exist and [src] requires it. Aborting. "
qdel(src)
return
- if(plant_controller.product_descs["[seed.uid]"])
- desc = plant_controller.product_descs["[seed.uid]"]
+ if(SSplants.product_descs["[seed.uid]"])
+ desc = SSplants.product_descs["[seed.uid]"]
else
var/list/descriptors = list()
if(reagents.has_reagent("sugar") || reagents.has_reagent("cherryjelly") || reagents.has_reagent("honey") || reagents.has_reagent("berryjuice"))
@@ -123,17 +118,17 @@
desc += " mushroom"
else
desc += " fruit"
- plant_controller.product_descs["[seed.uid]"] = desc
+ SSplants.product_descs["[seed.uid]"] = desc
desc += ". Delicious! Probably."
/obj/item/weapon/reagent_containers/food/snacks/grown/update_icon()
- if(!seed || !plant_controller || !plant_controller.plant_icon_cache)
+ if(!seed || !SSplants || !SSplants.plant_icon_cache)
return
- overlays.Cut()
+ cut_overlays()
var/image/plant_icon
var/icon_key = "fruit-[seed.get_trait(TRAIT_PRODUCT_ICON)]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"
- if(plant_controller.plant_icon_cache[icon_key])
- plant_icon = plant_controller.plant_icon_cache[icon_key]
+ if(SSplants.plant_icon_cache[icon_key])
+ plant_icon = SSplants.plant_icon_cache[icon_key]
else
plant_icon = image('icons/obj/hydroponics_products.dmi',"blank")
var/image/fruit_base = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-product")
@@ -143,8 +138,8 @@
var/image/fruit_leaves = image('icons/obj/hydroponics_products.dmi',"[seed.get_trait(TRAIT_PRODUCT_ICON)]-leaf")
fruit_leaves.color = "[seed.get_trait(TRAIT_PLANT_COLOUR)]"
plant_icon.overlays |= fruit_leaves
- plant_controller.plant_icon_cache[icon_key] = plant_icon
- overlays |= plant_icon
+ SSplants.plant_icon_cache[icon_key] = plant_icon
+ add_overlay(plant_icon)
/obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M)
if(seed && seed.get_trait(TRAIT_JUICY) == 2)
@@ -339,8 +334,8 @@
var/list/fruit_icon_cache = list()
-/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/New(var/newloc, var/datum/seed/S)
- ..(newloc)
+/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/Initialize(mapload, datum/seed/S)
+ . = ..()
// Need to go through and make a general image caching controller. Todo.
if(!istype(S))
qdel(src)
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index 01fd8764d83..f0797a61063 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -8,9 +8,8 @@
var/plantname
var/potency = 1
-/obj/item/weapon/grown/New(newloc,planttype)
-
- ..()
+/obj/item/weapon/grown/Initialize(newloc,planttype)
+ . = ..()
var/datum/reagents/R = new/datum/reagents(50)
reagents = R
@@ -19,7 +18,7 @@
//Handle some post-spawn var stuff.
if(planttype)
plantname = planttype
- var/datum/seed/S = plant_controller.seeds[plantname]
+ var/datum/seed/S = SSplants.seeds[plantname]
if(!S || !S.chems)
return
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index cd9fd93f325..a3300f23f00 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -62,9 +62,7 @@
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick.
set_trait(TRAIT_PLANT_COLOUR, "#46B543") // Colour of the plant icon.
- spawn(5)
- sleep(-1)
- update_growth_stages()
+ addtimer(CALLBACK(src, .proc/update_growth_stages), 5)
/datum/seed/proc/get_trait(var/trait)
return traits["[trait]"]
@@ -335,8 +333,8 @@
seed_noun = pick("spores","nodes","cuttings","seeds")
set_trait(TRAIT_POTENCY,rand(5,30),200,0)
- set_trait(TRAIT_PRODUCT_ICON,pick(plant_controller.plant_product_sprites))
- set_trait(TRAIT_PLANT_ICON,pick(plant_controller.plant_sprites))
+ set_trait(TRAIT_PRODUCT_ICON,pick(SSplants.plant_product_sprites))
+ set_trait(TRAIT_PLANT_ICON,pick(SSplants.plant_sprites))
set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]")
set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]")
update_growth_stages()
@@ -662,10 +660,10 @@
if(istype(user)) user << "You [harvest_sample ? "take a sample" : "harvest"] from the [display_name]."
//This may be a new line. Update the global if it is.
- if(name == "new line" || !(name in plant_controller.seeds))
- uid = plant_controller.seeds.len + 1
+ if(name == "new line" || !(name in SSplants.seeds))
+ uid = SSplants.seeds.len + 1
name = "[uid]"
- plant_controller.seeds[name] = src
+ SSplants.seeds[name] = src
if(harvest_sample)
var/obj/item/seeds/seeds = new(get_turf(user))
@@ -747,6 +745,6 @@
/datum/seed/proc/update_growth_stages()
if(get_trait(TRAIT_PLANT_ICON))
- growth_stages = plant_controller.plant_sprites[get_trait(TRAIT_PLANT_ICON)]
+ growth_stages = SSplants.plant_sprites[get_trait(TRAIT_PLANT_ICON)]
else
growth_stages = 0
diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm
index b1d31343444..2fd3b580ece 100644
--- a/code/modules/hydroponics/seed_machines.dm
+++ b/code/modules/hydroponics/seed_machines.dm
@@ -144,8 +144,8 @@
var/list/data = list()
var/list/geneMasks[0]
- for(var/gene_tag in plant_controller.gene_tag_masks)
- geneMasks.Add(list(list("tag" = gene_tag, "mask" = plant_controller.gene_tag_masks[gene_tag])))
+ for(var/gene_tag in SSplants.gene_tag_masks)
+ geneMasks.Add(list(list("tag" = gene_tag, "mask" = SSplants.gene_tag_masks[gene_tag])))
data["geneMasks"] = geneMasks
data["activity"] = active
@@ -186,10 +186,10 @@
if(!seed) return
seed.loc = get_turf(src)
- if(seed.seed.name == "new line" || isnull(plant_controller.seeds[seed.seed.name]))
- seed.seed.uid = plant_controller.seeds.len + 1
+ if(seed.seed.name == "new line" || isnull(SSplants.seeds[seed.seed.name]))
+ seed.seed.uid = SSplants.seeds.len + 1
seed.seed.name = "[seed.seed.uid]"
- plant_controller.seeds[seed.seed.name] = seed.seed
+ SSplants.seeds[seed.seed.name] = seed.seed
seed.update_seed()
visible_message("\icon[src] [src] beeps and spits out [seed].")
@@ -242,8 +242,8 @@
if(!genetics.roundstart)
loaded_disk.genesource += " (variety #[genetics.uid])"
- loaded_disk.name += " ([plant_controller.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])"
- loaded_disk.desc += " The label reads \'gene [plant_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'."
+ loaded_disk.name += " ([SSplants.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])"
+ loaded_disk.desc += " The label reads \'gene [SSplants.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'."
eject_disk = 1
degradation += rand(20,60)
@@ -288,7 +288,7 @@
for(var/datum/plantgene/P in loaded_disk.genes)
if(data["locus"] != "") data["locus"] += ", "
- data["locus"] += "[plant_controller.gene_tag_masks[P.genetype]]"
+ data["locus"] += "[SSplants.gene_tag_masks[P.genetype]]"
else
data["disk"] = 0
@@ -318,7 +318,7 @@
last_action = world.time
active = 1
- if(!isnull(plant_controller.seeds[seed.seed.name]))
+ if(!isnull(SSplants.seeds[seed.seed.name]))
seed.seed = seed.seed.diverge(1)
seed.seed_type = seed.seed.name
seed.update_seed()
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index f033c8d08cf..7d35cd0322b 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -11,16 +11,14 @@ var/global/list/plant_seed_sprites = list()
var/datum/seed/seed
var/modified = 0
-/obj/item/seeds/New()
- while(!plant_controller)
- sleep(30)
+/obj/item/seeds/Initialize()
update_seed()
- ..()
+ . = ..()
//Grabs the appropriate seed datum from the global list.
/obj/item/seeds/proc/update_seed()
- if(!seed && seed_type && !isnull(plant_controller.seeds) && plant_controller.seeds[seed_type])
- seed = plant_controller.seeds[seed_type]
+ if(!seed && seed_type && !isnull(SSplants.seeds) && SSplants.seeds[seed_type])
+ seed = SSplants.seeds[seed_type]
update_appearance()
//Updates strings and icon appropriately based on seed datum.
@@ -28,7 +26,7 @@ var/global/list/plant_seed_sprites = list()
if(!seed) return
// Update icon.
- overlays.Cut()
+ cut_overlays()
var/is_seeds = ((seed.seed_noun in list("seeds","pits","nodes")) ? 1 : 0)
var/image/seed_mask
var/seed_base_key = "base-[is_seeds ? seed.get_trait(TRAIT_PLANT_COLOUR) : "spores"]"
@@ -49,8 +47,8 @@ var/global/list/plant_seed_sprites = list()
seed_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
plant_seed_sprites[seed_overlay_key] = seed_overlay
- overlays |= seed_mask
- overlays |= seed_overlay
+ add_overlay(seed_mask)
+ add_overlay(seed_overlay)
if(is_seeds)
src.name = "packet of [seed.seed_name] [seed.seed_noun]"
@@ -75,10 +73,10 @@ var/global/list/plant_seed_sprites = list()
/obj/item/seeds/random
seed_type = null
-/obj/item/seeds/random/New()
- seed = plant_controller.create_random_seed()
+/obj/item/seeds/random/Initialize()
+ seed = SSplants.create_random_seed()
seed_type = seed.name
- update_seed()
+ . = ..()
/obj/item/seeds/replicapod
seed_type = "diona"
diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm
index 84ed688e5f4..634b10655f7 100644
--- a/code/modules/hydroponics/seed_storage.dm
+++ b/code/modules/hydroponics/seed_storage.dm
@@ -27,7 +27,6 @@
use_power = 1
idle_power_usage = 100
- var/initialized = 0 // Map-placed ones break if seeds are loaded right at the start of the round, so we do it on the first interaction
var/list/datum/seed_pile/piles = list()
var/list/starting_seeds = list()
var/list/scanner = list() // What properties we can view
@@ -40,31 +39,110 @@
/obj/machinery/seed_storage/garden
name = "Garden seed storage"
scanner = list("stats")
- starting_seeds = list(/obj/item/seeds/appleseed = 3, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3, /obj/item/seeds/koisspore = 3)
+ starting_seeds = list(
+ /obj/item/seeds/appleseed = 3,
+ /obj/item/seeds/bananaseed = 3,
+ /obj/item/seeds/berryseed = 3,
+ /obj/item/seeds/cabbageseed = 3,
+ /obj/item/seeds/carrotseed = 3,
+ /obj/item/seeds/chantermycelium = 3,
+ /obj/item/seeds/cherryseed = 3,
+ /obj/item/seeds/chiliseed = 3,
+ /obj/item/seeds/cocoapodseed = 3,
+ /obj/item/seeds/cornseed = 3,
+ /obj/item/seeds/eggplantseed = 3,
+ /obj/item/seeds/grapeseed = 3,
+ /obj/item/seeds/grassseed = 3,
+ /obj/item/seeds/replicapod = 3,
+ /obj/item/seeds/lemonseed = 3,
+ /obj/item/seeds/limeseed = 3,
+ /obj/item/seeds/mtearseed = 2,
+ /obj/item/seeds/orangeseed = 3,
+ /obj/item/seeds/peanutseed = 3,
+ /obj/item/seeds/plumpmycelium = 3,
+ /obj/item/seeds/poppyseed = 3,
+ /obj/item/seeds/potatoseed = 3,
+ /obj/item/seeds/pumpkinseed = 3,
+ /obj/item/seeds/riceseed = 3,
+ /obj/item/seeds/soyaseed = 3,
+ /obj/item/seeds/sugarcaneseed = 3,
+ /obj/item/seeds/sunflowerseed = 3,
+ /obj/item/seeds/shandseed = 2,
+ /obj/item/seeds/tobaccoseed = 3,
+ /obj/item/seeds/tomatoseed = 3,
+ /obj/item/seeds/towermycelium = 3,
+ /obj/item/seeds/watermelonseed = 3,
+ /obj/item/seeds/wheatseed = 3,
+ /obj/item/seeds/whitebeetseed = 3,
+ /obj/item/seeds/koisspore = 3
+ )
/obj/machinery/seed_storage/xenobotany
name = "Xenobotany seed storage"
scanner = list("stats", "produce", "soil", "temperature", "light")
- starting_seeds = list(/obj/item/seeds/ambrosiavulgarisseed = 3, /obj/item/seeds/appleseed = 3, /obj/item/seeds/amanitamycelium = 2, /obj/item/seeds/bananaseed = 3, /obj/item/seeds/berryseed = 3, /obj/item/seeds/cabbageseed = 3, /obj/item/seeds/carrotseed = 3, /obj/item/seeds/chantermycelium = 3, /obj/item/seeds/cherryseed = 3, /obj/item/seeds/chiliseed = 3, /obj/item/seeds/cocoapodseed = 3, /obj/item/seeds/cornseed = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/grapeseed = 3, /obj/item/seeds/grassseed = 3, /obj/item/seeds/lemonseed = 3, /obj/item/seeds/libertymycelium = 2, /obj/item/seeds/limeseed = 3, /obj/item/seeds/mtearseed = 2, /obj/item/seeds/nettleseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/pumpkinseed = 3, /obj/item/seeds/reishimycelium = 2, /obj/item/seeds/riceseed = 3, /obj/item/seeds/soyaseed = 3, /obj/item/seeds/sugarcaneseed = 3, /obj/item/seeds/sunflowerseed = 3, /obj/item/seeds/shandseed = 2, /obj/item/seeds/tobaccoseed = 3, /obj/item/seeds/tomatoseed = 3, /obj/item/seeds/towermycelium = 3, /obj/item/seeds/watermelonseed = 3, /obj/item/seeds/wheatseed = 3, /obj/item/seeds/whitebeetseed = 3, /obj/item/seeds/koisspore = 3)
+ starting_seeds = list(
+ /obj/item/seeds/ambrosiavulgarisseed = 3,
+ /obj/item/seeds/appleseed = 3,
+ /obj/item/seeds/amanitamycelium = 2,
+ /obj/item/seeds/bananaseed = 3,
+ /obj/item/seeds/berryseed = 3,
+ /obj/item/seeds/cabbageseed = 3,
+ /obj/item/seeds/carrotseed = 3,
+ /obj/item/seeds/chantermycelium = 3,
+ /obj/item/seeds/cherryseed = 3,
+ /obj/item/seeds/chiliseed = 3,
+ /obj/item/seeds/cocoapodseed = 3,
+ /obj/item/seeds/cornseed = 3,
+ /obj/item/seeds/replicapod = 3,
+ /obj/item/seeds/eggplantseed = 3,
+ /obj/item/seeds/glowshroom = 2,
+ /obj/item/seeds/grapeseed = 3,
+ /obj/item/seeds/grassseed = 3,
+ /obj/item/seeds/lemonseed = 3,
+ /obj/item/seeds/libertymycelium = 2,
+ /obj/item/seeds/limeseed = 3,
+ /obj/item/seeds/mtearseed = 2,
+ /obj/item/seeds/nettleseed = 2,
+ /obj/item/seeds/orangeseed = 3,
+ /obj/item/seeds/peanutseed = 3,
+ /obj/item/seeds/plastiseed = 3,
+ /obj/item/seeds/plumpmycelium = 3,
+ /obj/item/seeds/poppyseed = 3,
+ /obj/item/seeds/potatoseed = 3,
+ /obj/item/seeds/pumpkinseed = 3,
+ /obj/item/seeds/reishimycelium = 2,
+ /obj/item/seeds/riceseed = 3,
+ /obj/item/seeds/soyaseed = 3,
+ /obj/item/seeds/sugarcaneseed = 3,
+ /obj/item/seeds/sunflowerseed = 3,
+ /obj/item/seeds/shandseed = 2,
+ /obj/item/seeds/tobaccoseed = 3,
+ /obj/item/seeds/tomatoseed = 3,
+ /obj/item/seeds/towermycelium = 3,
+ /obj/item/seeds/watermelonseed = 3,
+ /obj/item/seeds/wheatseed = 3,
+ /obj/item/seeds/whitebeetseed = 3,
+ /obj/item/seeds/koisspore = 3
+ )
/obj/machinery/seed_storage/attack_hand(mob/user as mob)
user.set_machine(src)
interact(user)
+/obj/machinery/seed_storage/Initialize()
+ . = ..()
+ for(var/typepath in starting_seeds)
+ var/amount = starting_seeds[typepath]
+ if(isnull(amount)) amount = 1
+
+ for (var/i = 1 to amount)
+ var/O = new typepath
+ add(O)
+
/obj/machinery/seed_storage/interact(mob/user as mob)
if (..())
return
- if (!initialized)
- for(var/typepath in starting_seeds)
- var/amount = starting_seeds[typepath]
- if(isnull(amount)) amount = 1
-
- for (var/i = 1 to amount)
- var/O = new typepath
- add(O)
- initialized = 1
-
var/dat = "Seed storage contents "
if (piles.len == 0)
dat += "No seeds "
diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm
index d76cdce7e6b..5b35a7347ab 100644
--- a/code/modules/hydroponics/spreading/spreading.dm
+++ b/code/modules/hydroponics/spreading/spreading.dm
@@ -2,23 +2,25 @@
#define VINE_GROWTH_STAGES 5
/proc/spacevine_infestation(var/potency_min=70, var/potency_max=100, var/maturation_min=5, var/maturation_max=15)
- spawn() //to stop the secrets panel hanging
- var/turf/T = pick_area_turf(/area/hallway, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects))
- if(T)
- var/datum/seed/seed = plant_controller.create_random_seed(1)
- seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines.
- seed.set_trait(TRAIT_POTENCY,rand(potency_min, potency_max)) // 70-100 potency will help guarantee a wide spread and powerful effects.
- seed.set_trait(TRAIT_MATURATION,rand(maturation_min, maturation_max))
+ set waitfor = FALSE
- //make vine zero start off fully matured
- var/obj/effect/plant/vine = new(T,seed)
- vine.health = vine.max_health
- vine.mature_time = 0
- vine.process()
+ var/turf/T = pick_area_turf(/area/hallway, list(/proc/is_station_turf, /proc/not_turf_contains_dense_objects))
+ if(T)
+ var/datum/seed/seed = SSplants.create_random_seed(1)
+ seed.set_trait(TRAIT_SPREAD,2) // So it will function properly as vines.
+ seed.set_trait(TRAIT_POTENCY,rand(potency_min, potency_max)) // 70-100 potency will help guarantee a wide spread and powerful effects.
+ seed.set_trait(TRAIT_MATURATION,rand(maturation_min, maturation_max))
- log_and_message_admins("Spacevines spawned at \the [get_area(T)]", location = T)
- return
- log_and_message_admins("Event: Spacevines failed to find a viable turf. ")
+ //make vine zero start off fully matured
+ var/obj/effect/plant/vine = new(T,seed)
+ vine.health = vine.max_health
+ vine.mature_time = 0
+ vine.process()
+
+ log_and_message_admins("Spacevines spawned at \the [get_area(T)]", location = T)
+ return
+
+ log_and_message_admins("Event: Spacevines failed to find a viable turf. ")
/obj/effect/dead_plant
anchored = 1
@@ -65,31 +67,32 @@
var/last_biolum = null
/obj/effect/plant/Destroy()
- if(plant_controller)
- plant_controller.remove_plant(src)
+ if(SSplants)
+ STOP_PROCESSING(SSplants, src)
for(var/obj/effect/plant/neighbor in range(1,src))
- plant_controller.add_plant(neighbor)
- ..()
+ if (!QDELETED(neighbor))
+ START_PROCESSING(SSplants, neighbor)
+ return ..()
+
/obj/effect/plant/single
spread_chance = 0
-/obj/effect/plant/New(var/newloc, var/datum/seed/newseed, var/obj/effect/plant/newparent)
- ..()
+
+/obj/effect/plant/Initialize(mapload, datum/seed/newseed, obj/effect/plant/newparent)
+ . = ..()
if(!newparent)
parent = src
else
parent = newparent
- if(!plant_controller)
- sleep(250) // ugly hack, should mean roundstart plants are fine.
- if(!plant_controller)
+ if(!SSplants)
world << "Plant controller does not exist and [src] requires it. Aborting. "
qdel(src)
return
if(!istype(newseed))
- newseed = plant_controller.seeds[DEFAULT_SEED]
+ newseed = SSplants.seeds[DEFAULT_SEED]
seed = newseed
if(!seed)
qdel(src)
@@ -118,17 +121,19 @@
mature_time = world.time + seed.get_trait(TRAIT_MATURATION) + 15 //prevent vines from maturing until at least a few seconds after they've been created.
spread_chance = seed.get_trait(TRAIT_POTENCY)
- spread_distance = ((growth_type>0) ? round(spread_chance*0.6) : round(spread_chance*0.3))
+ spread_distance = ((growth_type > 0) ? round(spread_chance * 0.6) : round(spread_chance * 0.3))
update_icon()
+ addtimer(CALLBACK(src, .proc/post_initialize), 1)
- spawn(1) // Plants will sometimes be spawned in the turf adjacent to the one they need to end up in, for the sake of correct dir/etc being set.
- set_dir(calc_dir())
- update_icon()
- plant_controller.add_plant(src)
- // Some plants eat through plating.
- if(islist(seed.chems) && !isnull(seed.chems["pacid"]))
- var/turf/T = get_turf(src)
- T.ex_act(prob(80) ? 3 : 2)
+// Plants will sometimes be spawned in the turf adjacent to the one they need to end up in, for the sake of correct dir/etc being set.
+/obj/effect/plant/proc/post_initialize()
+ set_dir(calc_dir())
+ update_icon()
+ START_PROCESSING(SSplants, src)
+ // Some plants eat through plating.
+ if(islist(seed.chems) && !isnull(seed.chems["pacid"]))
+ var/turf/T = get_turf(src)
+ T.ex_act(prob(80) ? 3 : 2)
/obj/effect/plant/update_icon()
//TODO: should really be caching this.
@@ -234,7 +239,7 @@
/obj/effect/plant/attackby(var/obj/item/weapon/W, var/mob/user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- plant_controller.add_plant(src)
+ START_PROCESSING(SSplants, src)
if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
if(sampled)
diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm
index 0b8ead04763..9c99d25756d 100644
--- a/code/modules/hydroponics/spreading/spreading_growth.dm
+++ b/code/modules/hydroponics/spreading/spreading_growth.dm
@@ -18,7 +18,7 @@
continue
if(floor.density)
if(!isnull(seed.chems["pacid"]))
- spawn(rand(5,25)) floor.ex_act(3)
+ addtimer(CALLBACK(floor, /atom/.proc/ex_act, 3), rand(5, 25))
continue
if(!Adjacent(floor) || !floor.Enter(src))
continue
@@ -29,7 +29,6 @@
neighbor.neighbors -= T
/obj/effect/plant/process()
-
// Something is very wrong, kill ourselves.
if(!seed)
die_off()
@@ -79,24 +78,31 @@
//spread to 1-3 adjacent turfs depending on yield trait.
var/max_spread = between(1, round(seed.get_trait(TRAIT_YIELD)*3/14), 3)
- for(var/i in 1 to max_spread)
- if(prob(spread_chance))
- sleep(rand(3,5))
- if(!neighbors.len)
- break
- var/turf/target_turf = pick(neighbors)
- var/obj/effect/plant/child = new(get_turf(src),seed,parent)
- spawn(1) // This should do a little bit of animation.
- child.loc = target_turf
- child.update_icon()
- // Update neighboring squares.
- for(var/obj/effect/plant/neighbor in range(1,target_turf))
- neighbor.neighbors -= target_turf
+ addtimer(CALLBACK(src, .proc/do_spread, spread_chance, max_spread), 1)
// We shouldn't have spawned if the controller doesn't exist.
check_health()
if(neighbors.len || health != max_health)
- plant_controller.add_plant(src)
+ START_PROCESSING(SSplants, src)
+
+/obj/effect/plant/proc/do_spread(spread_chance, max_spread)
+ for(var/i in 1 to max_spread)
+ if(prob(spread_chance))
+ sleep(rand(3,5))
+ if(!neighbors.len)
+ return
+
+ var/turf/target_turf = pick(neighbors)
+ var/obj/effect/plant/child = new(get_turf(src),seed,parent)
+ // This should do a little bit of animation.
+ addtimer(CALLBACK(src, .proc/do_move, target_turf, child), 1)
+ // Update neighboring squares.
+ for(var/obj/effect/plant/neighbor in range(1,target_turf))
+ neighbor.neighbors -= target_turf
+
+/obj/effect/plant/proc/do_move(turf/target, obj/effect/plant/child)
+ child.loc = target
+ child.update_icon()
/obj/effect/plant/proc/die_off()
// Kill off our plant.
@@ -107,7 +113,8 @@
continue
for(var/obj/effect/plant/neighbor in check_turf.contents)
neighbor.neighbors |= check_turf
- plant_controller.add_plant(neighbor)
- spawn(1) if(src) qdel(src)
+ START_PROCESSING(SSplants, neighbor)
-#undef NEIGHBOR_REFRESH_TIME
\ No newline at end of file
+ QDEL_IN(src, 1)
+
+#undef NEIGHBOR_REFRESH_TIME
diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm
index 2b9407aecd0..6fd167f6bf8 100644
--- a/code/modules/hydroponics/spreading/spreading_response.dm
+++ b/code/modules/hydroponics/spreading/spreading_response.dm
@@ -10,8 +10,7 @@
if(!buckled_mob && !M.buckled && !M.anchored && (issmall(M) || prob(round(seed.get_trait(TRAIT_POTENCY)/6))))
//wait a tick for the Entered() proc that called HasProximity() to finish (and thus the moving animation),
//so we don't appear to teleport from two tiles away when moving into a turf adjacent to vines.
- spawn(1)
- entangle(M)
+ addtimer(CALLBACK(src, .proc/entangle, M), 1)
/obj/effect/plant/attack_hand(var/mob/user)
manual_unbuckle(user)
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 7a025071f95..3c8117f7f7b 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -340,7 +340,7 @@
//Remove the seed if something is already planted.
if(seed) seed = null
- seed = plant_controller.seeds[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))]
+ seed = SSplants.seeds[pick(list("reishi","nettles","amanita","mushrooms","plumphelmet","towercap","harebells","weeds"))]
if(!seed) return //Weed does not exist, someone fucked up.
dead = 0
@@ -370,7 +370,7 @@
// We need to make sure we're not modifying one of the global seed datums.
// If it's not in the global list, then no products of the line have been
// harvested yet and it's safe to assume it's restricted to this tray.
- if(!isnull(plant_controller.seeds[seed.name]))
+ if(!isnull(SSplants.seeds[seed.name]))
seed = seed.diverge()
seed.mutate(severity,get_turf(src))
@@ -426,8 +426,8 @@
var/previous_plant = seed.display_name
var/newseed = seed.get_mutant_variant()
- if(newseed in plant_controller.seeds)
- seed = plant_controller.seeds[newseed]
+ if(newseed in SSplants.seeds)
+ seed = SSplants.seeds[newseed]
else
return
diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm
index 90bc1ec986b..2b8fedd3723 100644
--- a/code/modules/hydroponics/trays/tray_soil.dm
+++ b/code/modules/hydroponics/trays/tray_soil.dm
@@ -78,4 +78,4 @@
for(var/obj/effect/plant/plant in get_turf(src))
if(plant.invisibility == INVISIBILITY_MAXIMUM)
plant.invisibility = initial(plant.invisibility)
- ..()
+ return ..()
diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm
index acac05f0f3c..2d1e78d8ea6 100644
--- a/code/modules/hydroponics/trays/tray_tools.dm
+++ b/code/modules/hydroponics/trays/tray_tools.dm
@@ -52,13 +52,13 @@
else if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target
- grown_seed = plant_controller.seeds[G.plantname]
+ grown_seed = SSplants.seeds[G.plantname]
grown_reagents = G.reagents
else if(istype(target,/obj/item/weapon/grown))
var/obj/item/weapon/grown/G = target
- grown_seed = plant_controller.seeds[G.plantname]
+ grown_seed = SSplants.seeds[G.plantname]
grown_reagents = G.reagents
else if(istype(target,/obj/item/seeds))
diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm
index bcee0352797..a4d1c19ee91 100644
--- a/code/modules/hydroponics/trays/tray_update_icons.dm
+++ b/code/modules/hydroponics/trays/tray_update_icons.dm
@@ -12,20 +12,20 @@
if(labelled)
name += " ([labelled])"
- overlays.Cut()
+ cut_overlays()
// Updates the plant overlay.
if(!isnull(seed))
if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2))
- overlays += "over_lowhealth3"
+ add_overlay("over_lowhealth3")
if(dead)
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead"
- var/image/dead_overlay = plant_controller.plant_icon_cache["[ikey]"]
+ var/image/dead_overlay = SSplants.plant_icon_cache["[ikey]"]
if(!dead_overlay)
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
dead_overlay.color = DEAD_PLANT_COLOUR
- overlays |= dead_overlay
+ add_overlay(dead_overlay)
else
if(!seed.growth_stages)
seed.update_growth_stages()
@@ -41,36 +41,37 @@
maturation = 1
overlay_stage = maturation ? max(1,round(age/maturation)) : 1
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-[overlay_stage]"
- var/image/plant_overlay = plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
+ var/image/plant_overlay = SSplants.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
if(!plant_overlay)
plant_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
plant_overlay.color = seed.get_trait(TRAIT_PLANT_COLOUR)
- plant_controller.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay
- overlays |= plant_overlay
+ SSplants.plant_icon_cache["[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"] = plant_overlay
+
+ add_overlay(plant_overlay)
if(harvest && overlay_stage == seed.growth_stages)
ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]"
- var/image/harvest_overlay = plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
+ var/image/harvest_overlay = SSplants.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"]
if(!harvest_overlay)
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
- plant_controller.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
- overlays |= harvest_overlay
+ SSplants.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
+ add_overlay(harvest_overlay)
//Draw the cover.
if(closed_system)
- overlays += "hydrocover"
+ add_overlay("hydrocover")
//Updated the various alert icons.
if(mechanical)
if(waterlevel <= 10)
- overlays += "over_lowwater3"
+ add_overlay("over_lowwater3")
if(nutrilevel <= 2)
- overlays += "over_lownutri3"
+ add_overlay("over_lownutri3")
if(weedlevel >= 5 || pestlevel >= 5 || toxins >= 40)
- overlays += "over_alert3"
+ add_overlay("over_alert3")
if(harvest)
- overlays += "over_harvest3"
+ add_overlay("over_harvest3")
// Update bioluminescence.
if(seed && seed.get_trait(TRAIT_BIOLUM))
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index ef11e5e69fa..0d1793adbf1 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -19,7 +19,8 @@
density = 1
opacity = 1
-/obj/structure/bookcase/initialize()
+/obj/structure/bookcase/Initialize()
+ . = ..()
for(var/obj/item/I in loc)
if(istype(I, /obj/item/weapon/book))
I.loc = src
@@ -295,4 +296,4 @@
user << "Computer has been associated with this unit. "
else
user << "No associated computer found. Only local scans will function properly. "
- user << "\n"
\ No newline at end of file
+ user << "\n"
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 7d78916525e..f3b5ef515f7 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -276,11 +276,11 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
if(!bibledelay)
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(src.loc)
- if(ticker && ( ticker.Bible_icon_state && ticker.Bible_item_state) )
- B.icon_state = ticker.Bible_icon_state
- B.item_state = ticker.Bible_item_state
- B.name = ticker.Bible_name
- B.deity_name = ticker.Bible_deity_name
+ if((SSticker.Bible_icon_state && SSticker.Bible_item_state) )
+ B.icon_state = SSticker.Bible_icon_state
+ B.item_state = SSticker.Bible_item_state
+ B.name = SSticker.Bible_name
+ B.deity_name = SSticker.Bible_deity_name
bibledelay = 1
spawn(60)
diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm
index 437c1d680e4..2309e367dc0 100644
--- a/code/modules/lighting/lighting_atom.dm
+++ b/code/modules/lighting/lighting_atom.dm
@@ -57,15 +57,13 @@
// Creates or destroys it if needed, makes it update values, makes sure it's got the correct source turf...
/atom/proc/update_light()
set waitfor = FALSE
- if (gcDestroyed)
+ if (QDELING(src))
return
L_PROF(src, "atom_update")
if (!light_power || !light_range) // We won't emit light anyways, destroy the light source.
- if(light)
- light.destroy()
- light = null
+ QDEL_NULL(light)
else
if (!istype(loc, /atom/movable)) // We choose what atom should be the top atom of the light here.
. = src
@@ -77,24 +75,6 @@
else
light = new/datum/light_source(src, .)
-// Incase any lighting vars are on in the typepath we turn the light on in New().
-/atom/New()
- . = ..()
-
- if (light_power && light_range)
- update_light()
-
- if (opacity && isturf(loc))
- var/turf/T = loc
- T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways.
-
-// Destroy our light source so we GC correctly.
-/atom/Destroy()
- if (light)
- light.destroy()
- light = null
- . = ..()
-
// If we have opacity, make sure to tell (potentially) affected light sources.
/atom/movable/Destroy()
var/turf/T = loc
@@ -131,14 +111,14 @@
/atom/Entered(var/atom/movable/Obj, var/atom/OldLoc) //Implemented here because forceMove() doesn't call Move()
. = ..()
- if (Obj && OldLoc != src)
+ if (Obj && OldLoc != src && Obj.light_sources && Obj.light_sources.len)
for (var/datum/light_source/L in Obj.light_sources) // Cycle through the light sources on this atom and tell them to update.
L.source_atom.update_light()
/atom/Exited(var/atom/movable/Obj, var/atom/newloc)
. = ..()
- if (!newloc && Obj && newloc != src) // Incase the atom is being moved to nullspace, we handle queuing for a lighting update here.
+ if (!newloc && Obj && newloc != src && Obj.light_sources && Obj.light_sources.len) // Incase the atom is being moved to nullspace, we handle queuing for a lighting update here.
for (var/datum/light_source/L in Obj.light_sources) // Cycle through the light sources on this atom and tell them to update.
L.source_atom.update_light()
@@ -148,3 +128,4 @@
for (var/datum/light_source/L in src.light_sources)
if (L.light_angle)
L.source_atom.update_light()
+
diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm
index 917ac1625b0..7a3e45e89d8 100644
--- a/code/modules/lighting/lighting_corner.dm
+++ b/code/modules/lighting/lighting_corner.dm
@@ -1,4 +1,3 @@
-/var/list/datum/lighting_corner/all_lighting_corners = list()
/var/datum/lighting_corner/dummy/dummy_lighting_corner = new
// Because we can control each corner of every lighting overlay.
// And corners get shared between multiple turfs (unless you're on the corners of the map, then 1 corner doesn't).
@@ -34,7 +33,7 @@
/datum/lighting_corner/New(var/turf/new_turf, var/diagonal)
. = ..()
- all_lighting_corners += src
+ SSlighting.lighting_corners += src
masters[new_turf] = turn(diagonal, 180)
z = new_turf.z
@@ -102,7 +101,7 @@
if (!now)
needs_update = TRUE
update_overlays(FALSE)
- lighting_update_corners += src
+ SSlighting.corner_queue += src
else
update_overlays(TRUE)
@@ -117,11 +116,19 @@
else if (mx < LIGHTING_SOFT_THRESHOLD)
. = 0 // 0 means soft lighting.
+#ifdef LIGHTING_USE_MEMORY_HACK
cache_r = lum_r * . + (rand(1,999)/100000) || LIGHTING_SOFT_THRESHOLD
cache_g = lum_g * . + (rand(1,999)/100000) || LIGHTING_SOFT_THRESHOLD
cache_b = lum_b * . + (rand(1,999)/100000) || LIGHTING_SOFT_THRESHOLD
cache_u = lum_u * . || LIGHTING_SOFT_THRESHOLD
cache_mx = mx
+#else
+ cache_r = round(lum_r * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD
+ cache_g = round(lum_g * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD
+ cache_b = round(lum_b * ., LIGHTING_ROUND_VALUE) || LIGHTING_SOFT_THRESHOLD
+ cache_u = lum_u * . || LIGHTING_SOFT_THRESHOLD
+ cache_mx = round(mx, LIGHTING_ROUND_VALUE)
+#endif
for (var/TT in masters)
var/turf/T = TT
@@ -130,7 +137,15 @@
T.lighting_overlay.update_overlay()
else if (!T.lighting_overlay.needs_update)
T.lighting_overlay.needs_update = TRUE
- lighting_update_overlays += T.lighting_overlay
+ SSlighting.overlay_queue += T.lighting_overlay
+
+/datum/lighting_corner/Destroy(force = FALSE)
+ crash_with("Some fuck [force ? "force-" : ""]deleted a lighting corner.")
+ if (!force)
+ return QDEL_HINT_LETMELIVE
+
+ SSlighting.lighting_corners -= src
+ return ..()
/datum/lighting_corner/dummy/New()
return
diff --git a/code/modules/lighting/lighting_overlay.dm b/code/modules/lighting/lighting_overlay.dm
index 724b09df019..20a5aa8bc04 100644
--- a/code/modules/lighting/lighting_overlay.dm
+++ b/code/modules/lighting/lighting_overlay.dm
@@ -1,5 +1,3 @@
-/var/list/all_lighting_overlays = list() // Global list of lighting overlays.
-
/atom/movable/lighting_overlay
name = ""
anchored = TRUE
@@ -21,7 +19,7 @@
/atom/movable/lighting_overlay/New(atom/loc, no_update = FALSE)
. = ..()
verbs.Cut()
- global.all_lighting_overlays += src
+ SSlighting.lighting_overlays += src
var/turf/T = loc // If this runtimes atleast we'll know what's creating overlays in things that aren't turfs.
T.lighting_overlay = src
@@ -34,17 +32,20 @@
/atom/movable/lighting_overlay/Destroy()
L_PROF(loc, "overlay_destroy")
- global.all_lighting_overlays -= src
- global.lighting_update_overlays -= src
+ SSlighting.lighting_overlays -= src
+ SSlighting.overlay_queue -= src
var/turf/T = loc
if (istype(T))
T.lighting_overlay = null
T.luminosity = 1
-
- ..()
+
+ return ..()
/atom/movable/lighting_overlay/proc/update_overlay()
+ if (QDELING(src)) // This shouldn't happen.
+ return
+
var/turf/T = loc
if (!istype(T)) // Erm...
if (loc)
@@ -78,15 +79,53 @@
var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner
var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx)
+ luminosity = max > LIGHTING_SOFT_THRESHOLD
- color = list(
+// The RNG introduced by LIGHTING_USE_MEMORY_HACK makes this shortcut ineffective.
+#ifndef LIGHTING_USE_MEMORY_HACK
+ var/rr = cr.cache_r
+ var/rg = cr.cache_g
+ var/rb = cr.cache_b
+
+ var/gr = cg.cache_r
+ var/gg = cg.cache_g
+ var/gb = cg.cache_b
+
+ var/br = cb.cache_r
+ var/bg = cb.cache_g
+ var/bb = cb.cache_b
+
+ var/ar = ca.cache_r
+ var/ag = ca.cache_g
+ var/ab = ca.cache_b
+
+ // Check for a common value first so we can skip expensive color matrixes if possible.
+ var/all_equal = ((rr == gr && gr == br && br == ar) && (rg == gg && gg == bg && bg == ag) && (rb == gb && gb == bb && bb == ab))
+
+ if (!luminosity)
+ icon_state = LIGHTING_DARKNESS_ICON_STATE
+ color = null
+ else if (all_equal && rr == LIGHTING_DEFAULT_TUBE_R && rg == LIGHTING_DEFAULT_TUBE_G && rb == LIGHTING_DEFAULT_TUBE_B)
+ icon_state = LIGHTING_STATION_ICON_STATE
+ color = null
+ else
+ icon_state = LIGHTING_BASE_ICON_STATE
+ color = list(
+ rr, rg, rb, 0,
+ gr, gg, gb, 0,
+ br, bg, bb, 0,
+ ar, ag, ab, 0,
+ 0, 0, 0, 1
+ )
+#else
+ color = list(
cr.cache_r, cr.cache_g, cr.cache_b, 0,
cg.cache_r, cg.cache_g, cg.cache_b, 0,
cb.cache_r, cb.cache_g, cb.cache_b, 0,
ca.cache_r, ca.cache_g, ca.cache_b, 0,
0, 0, 0, 1
)
- luminosity = max > LIGHTING_SOFT_THRESHOLD
+#endif
// Variety of overrides so the overlays don't get affected by weird things.
@@ -102,6 +141,9 @@
/atom/movable/lighting_overlay/singuloCanEat()
return FALSE
+/atom/movable/lighting_overlay/can_fall()
+ return FALSE
+
// Override here to prevent things accidentally moving around overlays.
/atom/movable/lighting_overlay/forceMove(atom/destination, no_tp = FALSE, harderforce = FALSE)
if(harderforce)
diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm
deleted file mode 100644
index c38b768cfd7..00000000000
--- a/code/modules/lighting/lighting_setup.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/proc/create_lighting_overlays_zlevel(var/zlevel)
- ASSERT(zlevel)
-
- for (var/turf/T in block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)))
- if (!T.dynamic_lighting)
- continue
-
- var/area/A = T.loc
- if (!A.dynamic_lighting)
- continue
-
- new /atom/movable/lighting_overlay(T, TRUE)
-
-// This repeats a bit of code from the lighting process.
-/proc/initialize_lighting()
- admin_notice(span("danger", "Generating lighting overlays (1/4)..."), R_DEBUG)
- for (var/zlevel = 1 to world.maxz)
- create_lighting_overlays_zlevel(zlevel)
- CHECK_TICK
-
- admin_notice(span("danger", "Initializing light sources (2/4)..."), R_DEBUG)
- var/num_lights = 0
- var/list/lights = lighting_update_lights
- lighting_update_lights = list()
-
- while (lights.len)
- var/datum/light_source/L = lights[lights.len]
- lights.len--
-
- if (!L) continue
-
- if (L.destroyed || L.check() || L.force_update)
- L.remove_lum()
- if(!L.destroyed)
- L.apply_lum()
-
- else if(L.vis_update) //We smartly update only tiles that became (in) visible to use.
- L.smart_vis_update()
-
- L.vis_update = FALSE
- L.force_update = FALSE
- L.needs_update = FALSE
- num_lights++
- CHECK_TICK
-
- admin_notice(span("danger", "Processed [num_lights] light sources."), R_DEBUG)
-
- admin_notice(span("danger", "Initializing lighting corners (3/4)..."), R_DEBUG)
- var/num_corners = 0
- var/list/corners = lighting_update_corners
- lighting_update_corners = list()
-
- while (corners.len)
- var/datum/lighting_corner/C = corners[corners.len]
- corners.len--
-
- if (!C) continue
-
- C.update_overlays()
-
- C.needs_update = FALSE
- num_corners++
-
- CHECK_TICK
-
- admin_notice(span("danger", "Processed [num_corners] light corners."), R_DEBUG)
- admin_notice(span("danger", "Initializing lighting overlays (4/4)..."), R_DEBUG)
- var/num_overlays = 0
- var/list/overlays = lighting_update_overlays
- lighting_update_overlays = list()
-
- while (overlays.len)
- var/atom/movable/lighting_overlay/O = overlays[overlays.len]
- overlays.len--
-
- if (!O) continue
-
- O.update_overlay()
- O.needs_update = FALSE
-
- num_overlays++
- CHECK_TICK
-
- admin_notice(span("danger", "Processed [num_overlays] light overlays."), R_DEBUG)
diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm
index f7aefe77ea8..9cc9df58c85 100644
--- a/code/modules/lighting/lighting_source.dm
+++ b/code/modules/lighting/lighting_source.dm
@@ -80,23 +80,25 @@
return ..()
// Kill ourselves.
-/datum/light_source/proc/destroy(var/no_update = FALSE)
+/datum/light_source/Destroy(force)
L_PROF(source_atom, "source_destroy")
- destroyed = TRUE
- if (!no_update)
- force_update()
+ force_update()
if (source_atom && source_atom.light_sources)
source_atom.light_sources -= src
if (top_atom && top_atom.light_sources)
top_atom.light_sources -= src
+ . = ..()
+ if (!force)
+ return QDEL_HINT_IWILLGC
+
// Process the light RIGHT NOW.
#define DO_UPDATE \
- if (destroyed || check() || force_update) { \
+ if (QDELETED(src) || check() || force_update) { \
remove_lum(TRUE); \
- if (!destroyed) { \
+ if (!QDELETED(src)) { \
apply_lum(TRUE); \
} \
} \
@@ -111,13 +113,13 @@
#define QUEUE_UPDATE \
if (!needs_update) \
{ \
- lighting_update_lights += src; \
+ SSlighting.light_queue += src; \
needs_update = TRUE; \
}
// Picks either scheduled or instant updates based on current server load.
#define INTELLIGENT_UPDATE \
- if (world.tick_usage > TICK_LIMIT || !ticker || ticker.current_state <= GAME_STATE_SETTING_UP) { \
+ if (world.tick_usage > SSlighting.instant_tick_limit || SSlighting.force_queued) { \
QUEUE_UPDATE; \
} \
else { \
@@ -160,7 +162,7 @@
// Will check if we actually need to update, and update any variables that may need to be updated.
/datum/light_source/proc/check()
if (!source_atom || !light_range || !light_power)
- destroy(no_update = TRUE)
+ qdel(src)
return 1
if (!top_atom)
@@ -433,6 +435,8 @@
L = affecting_turfs - turfs // Now-gone turfs, remove us from the affecting lights.
affecting_turfs -= L
for (var/turf/T in L)
+ if (QDELETED(T))
+ continue
T.affecting_lights -= src
for (var/datum/lighting_corner/C in corners - effect_str) // New corners
diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm
index 79a4b91c282..3ae58356979 100644
--- a/code/modules/lighting/lighting_turf.dm
+++ b/code/modules/lighting/lighting_turf.dm
@@ -9,12 +9,6 @@
var/tmp/list/datum/lighting_corner/corners
var/tmp/has_opaque_atom = FALSE // Not to be confused with opacity, this will be TRUE if there's any opaque atom on the tile.
-/turf/New()
- . = ..()
-
- if (opacity)
- has_opaque_atom = TRUE
-
// Causes any affecting light sources to be queued for a visibility update, for example a door got opened.
/turf/proc/reconsider_lights()
L_PROF(src, "turf_reconsider")
@@ -29,7 +23,7 @@
/turf/proc/lighting_clear_overlay()
if (lighting_overlay)
- returnToPool(lighting_overlay)
+ qdel(lighting_overlay)
L_PROF(src, "turf_clear_overlay")
@@ -161,3 +155,31 @@
continue
corners[i] = new/datum/lighting_corner(src, LIGHTING_CORNER_DIAGONAL[i])
+
+/turf/ChangeTurf(turf/N, tell_universe = TRUE, force_lighting_update = FALSE)
+ if (!SSlighting)
+ return ..()
+
+ var/old_opacity = opacity
+ var/old_dynamic_lighting = dynamic_lighting
+ var/list/old_affecting_lights = affecting_lights
+ var/old_lighting_overlay = lighting_overlay
+ var/list/old_corners = corners
+
+ . = ..()
+
+ recalc_atom_opacity()
+ lighting_overlay = old_lighting_overlay
+ affecting_lights = old_affecting_lights
+ corners = old_corners
+ if ((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting))
+ reconsider_lights()
+
+ if (dynamic_lighting != old_dynamic_lighting)
+ if (dynamic_lighting)
+ lighting_build_overlay()
+ else
+ lighting_clear_overlay()
+
+ for (var/turf/space/S in RANGE_TURFS(1, src))
+ S.update_starlight()
diff --git a/code/modules/lighting/lighting_verbs.dm b/code/modules/lighting/lighting_verbs.dm
index bc9e4561a74..ce14b59d8eb 100644
--- a/code/modules/lighting/lighting_verbs.dm
+++ b/code/modules/lighting/lighting_verbs.dm
@@ -38,9 +38,9 @@ var/list/admin_verbs_lighting = list(
return
log_and_message_admins("has flushed the lighting processor queues.")
- lighting_update_lights = list()
- lighting_update_corners = list()
- lighting_update_overlays = list()
+ SSlighting.light_queue = list()
+ SSlighting.corner_queue = list()
+ SSlighting.overlay_queue = list()
/client/proc/lighting_reconsider_target(turf/T in world)
set category = "Lighting"
diff --git a/code/modules/liquid/splash_simulation.dm b/code/modules/liquid/splash_simulation.dm
index 983f46603df..1ba530a0f1a 100644
--- a/code/modules/liquid/splash_simulation.dm
+++ b/code/modules/liquid/splash_simulation.dm
@@ -7,7 +7,7 @@ var/list/datum/puddle/puddles = list()
datum/puddle
var/list/obj/effect/liquid/liquid_objects = list()
-datum/puddle/proc/process()
+datum/puddle/process()
//world << "DEBUG: Puddle process!"
for(var/obj/effect/liquid/L in liquid_objects)
L.spread()
@@ -26,7 +26,7 @@ datum/puddle/Destroy()
puddles -= src
for(var/obj/O in liquid_objects)
qdel(O)
- ..()
+ return ..()
client/proc/splash()
var/volume = input("Volume?","Volume?", 0 ) as num
@@ -133,7 +133,7 @@ obj/effect/liquid/Move()
obj/effect/liquid/Destroy()
src.controller.liquid_objects.Remove(src)
- ..()
+ return ..()
obj/effect/liquid/proc/update_icon2()
//icon_state = num2text( max(1,min(7,(floor(volume),10)/10)) )
@@ -199,4 +199,4 @@ obj/proc/liquid_pass()
obj/machinery/door/liquid_pass()
return !density
-#undef LIQUID_TRANSFER_THRESHOLD
\ No newline at end of file
+#undef LIQUID_TRANSFER_THRESHOLD
diff --git a/code/modules/maps/reader.dm b/code/modules/maps/reader.dm
index fe0bbfe6a4f..6a803297e65 100644
--- a/code/modules/maps/reader.dm
+++ b/code/modules/maps/reader.dm
@@ -302,13 +302,6 @@ var/global/dmm_suite/preloader/_preloader = null
placed.set_opacity(1)
placed.underlays += turfs_underlays
-//atom creation method that preloads variables at creation
-/atom/New()
- if(_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
- _preloader.load(src)
-
- . = ..()
-
//////////////////
//Preloader datum
//////////////////
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index 164bc537594..66ba57f652e 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -568,9 +568,14 @@ var/list/name_to_material
hardness = 500
weight = 500
+/material/voxalloy/elevatorium
+ name = "elevatorium"
+ display_name = "elevator panelling"
+ icon_colour = "#666666"
+
/material/wood
name = "wood"
- stack_type = /obj/item/stack/material/wood
+ stack_type = null
icon_colour = "#824B28"
integrity = 50
icon_base = "solid"
@@ -588,6 +593,17 @@ var/list/name_to_material
sheet_singular_name = "plank"
sheet_plural_name = "planks"
+/material/rust
+ name = "rust"
+ display_name = "rusty steel"
+ stack_type = null
+ icon_colour = "#B7410E"
+ icon_base = "arust"
+ integrity = 250
+ explosion_resistance = 8
+ hardness = 15
+ weight = 18
+
/material/wood/holographic
name = "holowood"
display_name = "wood"
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 4028cbc0ad2..b8db5b19a19 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -10,8 +10,8 @@
var/codelen = 4
locked = 1
-/obj/structure/closet/crate/secure/loot/New()
- ..()
+/obj/structure/closet/crate/secure/loot/Initialize()
+ . = ..()
var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
for(var/i in 1 to codelen)
@@ -94,7 +94,7 @@
if(79 to 80)
new/obj/item/weapon/pickaxe/gold(src)
if(81 to 82)
- new/obj/item/weapon/pickaxe/plasmacutter(src)
+ new/obj/item/weapon/gun/energy/plasmacutter(src)
if(83 to 84)
new/obj/item/toy/katana(src)
if(85)
@@ -179,8 +179,8 @@
var/turf/T = get_turf(src.loc)
explosion(T, 0, 0, 1, 2)
qdel(src)
-
-/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
+
+/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
if (locked)
user << "The crate unlocks! "
locked = 0
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
index 54b1879704e..e3c786dc85e 100644
--- a/code/modules/mining/drilling/drill.dm
+++ b/code/modules/mining/drilling/drill.dm
@@ -7,7 +7,7 @@
/obj/machinery/mining/drill
name = "mining drill head"
- desc = "An enormous drill."
+ desc = "A large industrial drill. Its bore does not penetrate deep enough to access the sublevels."
icon_state = "mining_drill"
var/braces_needed = 2
var/list/supports = list()
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 180d84ff60e..8059ef7c8b7 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -1,24 +1,28 @@
/**********************Mineral processing unit console**************************/
/obj/machinery/mineral/processing_unit_console
- name = "production machine console"
+ name = "ore redemption console"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "console"
density = 1
anchored = 1
+ use_power = 1
+ idle_power_usage = 15
+ active_power_usage = 50
var/obj/machinery/mineral/processing_unit/machine = null
- var/machinedir = EAST
+ var/machinedir = NORTHEAST
var/show_all_ores = 0
+ var/points = 0
+ var/obj/item/weapon/card/id/inserted_id
-/obj/machinery/mineral/processing_unit_console/New()
- ..()
- spawn(7)
- src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
- if (machine)
- machine.console = src
- else
- qdel(src)
+/obj/machinery/mineral/processing_unit_console/Initialize()
+ . = ..()
+ src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
+ if (machine)
+ machine.console = src
+ else
+ return INITIALIZE_HINT_QDEL
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
add_fingerprint(user)
@@ -37,6 +41,14 @@
var/dat = "Ore processor console "
+ dat += "Current unclaimed points: [points] "
+
+ if(istype(inserted_id))
+ dat += "You have [inserted_id.mining_points] mining points collected. Eject ID. "
+ dat += "Claim points. "
+ else
+ dat += "No ID inserted. Insert ID. "
+
dat += ""
for(var/ore in machine.ores_processing)
@@ -72,6 +84,32 @@
usr.set_machine(src)
src.add_fingerprint(usr)
+ if(href_list["choice"])
+ if(istype(inserted_id))
+ if(href_list["choice"] == "eject")
+ inserted_id.loc = loc
+ if(!usr.get_active_hand())
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ if(href_list["choice"] == "claim")
+ if(access_mining_station in inserted_id.access)
+ if(points >= 0)
+ inserted_id.mining_points += points
+ if(points != 0)
+ ping( "\The [src] pings, \"Point transfer complete! Transaction total: [points] points!\"" )
+ points = 0
+ else
+ usr << "[station_name()]'s mining division is currently indebted to NanoTrasen. Transaction incomplete until debt is cleared. "
+ else
+ usr << "Required access not found. "
+ else if(href_list["choice"] == "insert")
+ var/obj/item/weapon/card/id/I = usr.get_active_hand()
+ if(istype(I))
+ usr.drop_item()
+ I.loc = src
+ inserted_id = I
+ else usr << "No valid ID. "
+
if(href_list["toggle_smelting"])
var/choice = input("What setting do you wish to use for processing [href_list["toggle_smelting"]]?") as null|anything in list("Smelting","Compressing","Alloying","Nothing")
@@ -88,6 +126,10 @@
if(href_list["toggle_power"])
machine.active = !machine.active
+ if(machine.active)
+ machine.icon_state = "furnace"
+ else
+ machine.icon_state = "furnace-off"
if(href_list["toggle_ores"])
@@ -100,23 +142,26 @@
/obj/machinery/mineral/processing_unit
- name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron...
+ name = "industrial smelter" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... //lol fuk u bay it is
icon = 'icons/obj/machines/mining_machines.dmi'
- icon_state = "furnace"
+ icon_state = "furnace-off"
density = 1
anchored = 1
light_range = 3
var/obj/machinery/mineral/input = null
var/obj/machinery/mineral/output = null
- var/obj/machinery/mineral/console = null
+ var/obj/machinery/mineral/processing_unit_console/console = null
var/sheets_per_tick = 10
var/list/ores_processing[0]
var/list/ores_stored[0]
var/static/list/alloy_data
var/active = 0
+ use_power = 1
+ idle_power_usage = 15
+ active_power_usage = 50
-/obj/machinery/mineral/processing_unit/New()
- ..()
+/obj/machinery/mineral/processing_unit/Initialize()
+ . = ..()
// initialize static alloy_data list
if(!alloy_data)
@@ -131,18 +176,16 @@
ores_processing[OD.name] = 0
ores_stored[OD.name] = 0
- //Locate our output and input machinery.
- spawn(5)
- for (var/dir in cardinal)
- src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
- if(src.input) break
- for (var/dir in cardinal)
- src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
- if(src.output) break
- return
- return
+//Locate our output and input machinery.
+ for (var/dir in cardinal)
+ src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
+ if(src.input) break
+ for (var/dir in cardinal)
+ src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
+ if(src.output) break
/obj/machinery/mineral/processing_unit/process()
+ ..()
if (!src.output || !src.input) return
@@ -158,6 +201,8 @@
qdel(O)
if(!active)
+ if(icon_state != "furnace-off")
+ icon_state = "furnace-off"
return
//Process our stored ores and spit out sheets.
@@ -197,6 +242,10 @@
else
var/total
for(var/needs_metal in A.requires)
+ if(console)
+ var/ore/Ore = ore_data[needs_metal]
+ console.points += Ore.worth
+ use_power(100)
ores_stored[needs_metal] -= A.requires[needs_metal]
total += A.requires[needs_metal]
total = max(1,round(total*A.product_mod)) //Always get at least one sheet.
@@ -216,6 +265,9 @@
continue
for(var/i=0,iYou start feeding [W] into \the [src]"
+ if(do_after(user,30))
+ src.visible_message("\The [src] begins to print out a modsuit. ")
+ pressing = 1
+ update_icon()
+ use_power(500)
+ qdel(W)
+ spawn(300)
+ ping( "\The [src] pings, \"Module successfuly produced!\"" )
+ if(kineticaccelerator)
+ var/obj/item/rig_module/mounted/kinetic_accelerator/KA = new /obj/item/rig_module/mounted/kinetic_accelerator(src.loc)
+ var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/KGUN = KA.gun
+ for(var/obj/item/borg/upgrade/modkit/kmod in kinetic_mods)
+ KGUN.modkits += kmod
+ else
+ new outcome_path(src.loc)
+ use_power(500)
+ pressing = 0
+ update_icon()
+ ..()
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 6e548c6aa5c..781180f4c13 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -7,18 +7,18 @@
density = 1
anchored = 1
var/obj/machinery/mineral/stacking_machine/machine = null
- var/machinedir = SOUTHEAST
+ var/machinedir = NORTHEAST
+ use_power = 1
+ idle_power_usage = 15
+ active_power_usage = 50
-/obj/machinery/mineral/stacking_unit_console/New()
-
- ..()
-
- spawn(7)
- src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
- if (machine)
- machine.console = src
- else
- qdel(src)
+/obj/machinery/mineral/stacking_unit_console/Initialize()
+ . = ..()
+ src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir))
+ if (machine)
+ machine.console = src
+ else
+ return INITIALIZE_HINT_QDEL
/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user)
add_fingerprint(user)
@@ -77,9 +77,12 @@
var/list/stack_storage[0]
var/list/stack_paths[0]
var/stack_amt = 50; // Amount to stack before releassing
+ use_power = 1
+ idle_power_usage = 15
+ active_power_usage = 50
-/obj/machinery/mineral/stacking_machine/New()
- ..()
+/obj/machinery/mineral/stacking_machine/Initialize()
+ . = ..()
for(var/stacktype in typesof(/obj/item/stack/material)-/obj/item/stack/material)
var/obj/item/stack/S = new stacktype(src)
@@ -94,17 +97,19 @@
stack_storage["plasteel"] = 0
stack_paths["plasteel"] = /obj/item/stack/material/plasteel
- spawn( 5 )
- for (var/dir in cardinal)
- src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
- if(src.input) break
- for (var/dir in cardinal)
- src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
- if(src.output) break
- return
- return
+ for (var/dir in cardinal)
+ src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
+ if(src.input) break
+ for (var/dir in cardinal)
+ src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
+ if(src.output) break
/obj/machinery/mineral/stacking_machine/process()
+ ..()
+ if(!console)
+ log_debug("Stacking machine tried to process, but no console has linked itself to it.")
+ qdel(src)
+ return
if (src.output && src.input)
var/turf/T = get_turf(input)
for(var/obj/item/O in T.contents)
diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm
index 1bbf7706ec2..0eba125f23b 100644
--- a/code/modules/mining/machine_unloading.dm
+++ b/code/modules/mining/machine_unloading.dm
@@ -7,23 +7,24 @@
icon_state = "unloader"
density = 1
anchored = 1.0
+ use_power = 1
+ idle_power_usage = 15
+ active_power_usage = 50
var/obj/machinery/mineral/input = null
var/obj/machinery/mineral/output = null
-/obj/machinery/mineral/unloading_machine/New()
- ..()
- spawn( 5 )
- for (var/dir in cardinal)
- src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
- if(src.input) break
- for (var/dir in cardinal)
- src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
- if(src.output) break
- return
- return
+/obj/machinery/mineral/unloading_machine/Initialize()
+ . = ..()
+ for (var/dir in cardinal)
+ src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
+ if(src.input) break
+ for (var/dir in cardinal)
+ src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
+ if(src.output) break
/obj/machinery/mineral/unloading_machine/process()
+ ..()
if (src.output && src.input)
if (locate(/obj/structure/ore_box, input.loc))
var/obj/structure/ore_box/BOX = locate(/obj/structure/ore_box, input.loc)
@@ -43,4 +44,4 @@
O.loc = src.output.loc
else
return
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
new file mode 100644
index 00000000000..f10ae791235
--- /dev/null
+++ b/code/modules/mining/machine_vending.dm
@@ -0,0 +1,217 @@
+//PROGRESSION SYSTEM: Miners start with a basic ass manual pickaxe. They can shortly buy an autodrill, or save up for a /TG/ Kinetic Accelerator.
+//HARDSUITS: Miners all start with an *empty* industrial hardsuit. Many of the items they can buy here (auto-drill, kinetic accelerator) can be converted into modules
+// with a special machine.
+//VENDOR: Obj/item's are immediately dispensed by the vendor. Machines, structures, vehicles, and etc get spawned on the cargo shuttle.
+//Think up of lots of items. Not everything needs to be unique or even mining-special, but it should be neat. Convert most of /tg/'s items. 25% of this at least
+// should be bling. Things that shorten the distance between base and mining. Instant-teleporters should be one use.
+var/global/list/minevendor_list = list( //keep in order of price
+ new /datum/data/mining_equipment("Food Ration", /obj/item/weapon/reagent_containers/food/snacks/liquidfood, 5),
+ new /datum/data/mining_equipment("Poster", /obj/item/weapon/contraband/poster, 20),
+ new /datum/data/mining_equipment("Ore Scanner Pad", /obj/item/weapon/ore_radar, 50),
+ new /datum/data/mining_equipment("5 Red Flags", /obj/item/stack/flag/red, 50),
+ new /datum/data/mining_equipment("5 Green Flags", /obj/item/stack/flag/green, 50),
+ new /datum/data/mining_equipment("5 Yellow Flags", /obj/item/stack/flag/yellow, 50),
+ new /datum/data/mining_equipment("Ore-bag", /obj/item/weapon/storage/bag/ore, 50),
+ new /datum/data/mining_equipment("Meat Pizza", /obj/item/pizzabox/meat, 50),
+ new /datum/data/mining_equipment("Lantern", /obj/item/device/flashlight/lantern, 75),
+ new /datum/data/mining_equipment("Shovel", /obj/item/weapon/shovel, 100),
+ //new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 100),
+ new /datum/data/mining_equipment("Pickaxe", /obj/item/weapon/pickaxe, 100),
+ new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100),
+ new /datum/data/mining_equipment("Compressed rail cartridge", /obj/item/weapon/rrf_ammo, 100),
+ new /datum/data/mining_equipment("Emergency Floodlight", /obj/item/weapon/floodlight_diy, 150),
+ new /datum/data/mining_equipment("Premium Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
+ new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150),
+ new /datum/data/mining_equipment("Lottery Chip", /obj/item/weapon/spacecash/ewallet/lotto, 200),
+ new /datum/data/mining_equipment("Ripley Paint Kit", /obj/item/device/kit/paint/ripley/random, 200),
+ new /datum/data/mining_equipment("Material Scanners", /obj/item/clothing/glasses/material, 200),
+ new /datum/data/mining_equipment("Mining Drill", /obj/item/weapon/pickaxe/drill, 200),
+ new /datum/data/mining_equipment("Deep Ore Scanner", /obj/item/weapon/mining_scanner, 250),
+ new /datum/data/mining_equipment("Magboots", /obj/item/clothing/shoes/magboots, 300),
+ //new /datum/data/mining_equipment("Stimpack Bundle", /obj/item/weapon/storage/box/stims, 300),
+ new /datum/data/mining_equipment("Autochisel", /obj/item/weapon/autochisel, 400),
+ new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack, 400),
+ new /datum/data/mining_equipment("Drone Drill Upgrade", /obj/item/device/mine_bot_ugprade, 400),
+ new /datum/data/mining_equipment("Seismic Charge", /obj/item/weapon/plastique/seismic, 500),
+ new /datum/data/mining_equipment("Industrial Drill Brace", /obj/machinery/mining/brace, 500, 1),
+ new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
+ new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/weapon/storage/belt/mining, 500),
+ new /datum/data/mining_equipment("Item-Warp Beacon", /obj/item/warp_core, 500),
+ new /datum/data/mining_equipment("Item-Warp Pack", /obj/item/weapon/extraction_pack, 600),
+ new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/device/mine_bot_ugprade/health, 600),
+ new /datum/data/mining_equipment("Rapid-Railway-Fabricator", /obj/item/weapon/rrf, 600),
+ //new /datum/data/mining_equipment("Survival Autoinjector", /obj/item/weapon/reagent_containers/hypospray/autoinjector/survival, 600),
+ new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600),
+ new /datum/data/mining_equipment("Ore Magnet", /obj/item/weapon/oremagnet, 600),
+ new /datum/data/mining_equipment("Minecart", /obj/vehicle/train/cargo/trolley/mining, 600, 1),
+ new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 700),
+ new /datum/data/mining_equipment("Mining RIG", /obj/item/weapon/rig/industrial, 750),
+ new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 750),
+ new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 750),
+ new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750),
+ new /datum/data/mining_equipment("1000 credits", /obj/item/weapon/spacecash/c1000, 800),
+ new /datum/data/mining_equipment("Mass Driver", /obj/item/weapon/mass_driver_diy, 800),
+ //new /datum/data/mining_equipment("Drone Plasma Cutter Upgrade", /obj/item/device/mine_bot_ugprade/plasma, 800),
+ new /datum/data/mining_equipment("Mining Drone", /mob/living/silicon/robot/drone/mining, 800),
+ new /datum/data/mining_equipment("Minecart Engine", /obj/vehicle/train/cargo/engine/mining, 800, 1),
+ new /datum/data/mining_equipment("Ore Summoner", /obj/item/weapon/oreportal, 800),
+ //new /datum/data/mining_equipment("Plasma Cutter", /obj/item/weapon/gun/energy/plasmacutter, 900),
+ //new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
+ new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
+ new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000),
+ new /datum/data/mining_equipment("Industrial Drill Head", /obj/machinery/mining/drill, 1000, 1),
+ new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 1250),
+ new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/turfs, 1500),
+ new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 1500),
+ new /datum/data/mining_equipment("Drone Thermal Drill Upgrade", /obj/item/device/mine_bot_ugprade/thermal, 2000),
+ new /datum/data/mining_equipment("Thermal Drill", /obj/item/weapon/gun/energy/vaurca/thermaldrill, 2750)
+ )
+
+/obj/machinery/mineral/equipment_vendor
+ name = "mining equipment vendor"
+ desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
+ icon = 'icons/obj/machines/mining_machines.dmi'
+ icon_state = "mining"
+ density = 1
+ anchored = 1
+ var/obj/item/weapon/card/id/inserted_id
+
+/datum/data/mining_equipment
+ var/equipment_name = "generic"
+ var/equipment_path = null
+ var/cost = 0
+ var/shuttle
+
+/datum/data/mining_equipment/New(name, path, cost, shuttle)
+ src.equipment_name = name
+ src.equipment_path = path
+ src.cost = cost
+ src.shuttle = shuttle
+
+/obj/item/weapon/circuitboard/machine/mining_equipment_vendor
+ name = "circuit board (Mining Equipment Vendor)"
+ build_path = /obj/machinery/mineral/equipment_vendor
+ origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
+ req_components = list(
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/weapon/stock_parts/matter_bin = 3)
+
+/obj/machinery/mineral/equipment_vendor/power_change()
+ ..()
+ update_icon()
+
+/obj/machinery/mineral/equipment_vendor/update_icon()
+ if(powered())
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-off"
+ return
+
+/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user)
+ if(..())
+ return
+ interact(user)
+
+/obj/machinery/mineral/equipment_vendor/interact(mob/user)
+ var/dat
+ dat +=""
+ if(istype(inserted_id))
+ dat += "You have [inserted_id.mining_points] mining points collected.
Eject ID. "
+ else
+ dat += "No ID inserted.
Insert ID. "
+ dat += "
"
+ dat += "Equipment point cost list: "
+ for(var/datum/data/mining_equipment/prize in minevendor_list)
+ dat += "[prize.equipment_name] [prize.cost] Purchase "
+ dat += "
"
+
+ var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 350)
+ popup.set_content(dat)
+ popup.open()
+ return
+
+/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
+ if(..())
+ return
+ if(href_list["choice"])
+ if(istype(inserted_id))
+ if(href_list["choice"] == "eject")
+ inserted_id.loc = loc
+ if(!usr.get_active_hand())
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ else if(href_list["choice"] == "insert")
+ var/obj/item/weapon/card/id/I = usr.get_active_hand()
+ if(istype(I))
+ usr.drop_item()
+ I.loc = src
+ inserted_id = I
+ else usr << "No valid ID. "
+ if(href_list["purchase"])
+ if(istype(inserted_id))
+ var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
+ if (!prize || !(prize in minevendor_list))
+ return
+ if(prize.cost > inserted_id.mining_points)
+ else
+ if(prize.shuttle)
+ var/datum/shuttle/ferry/supply/shuttle = SScargo.shuttle
+ if(shuttle)
+ var/area/area_shuttle = shuttle.get_location_area()
+ if(!area_shuttle)
+ usr << "{ERR Code: NO_SHUTTLE} Order failed! Please try again. "
+ return
+
+
+ var/list/clear_turfs = list()
+
+ for(var/turf/T in area_shuttle)
+ if(T.density) continue
+ var/contcount
+ for(var/atom/A in T.contents)
+ if(!A.simulated)
+ continue
+ contcount++
+ if(contcount)
+ continue
+ clear_turfs += T
+
+ if(!clear_turfs.len)
+ usr << "{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again. "
+ return
+
+ var/i = rand(1,clear_turfs.len)
+ var/turf/pickedloc = clear_turfs[i]
+
+ if(pickedloc)
+ inserted_id.mining_points -= prize.cost
+ new prize.equipment_path(pickedloc)
+ usr << "Order passed. Your order has been placed on the next available supply shuttle. "
+ else
+ usr << "{ERR Code: NO_SHUTTLE_SPACE} Order failed! Please try again. "
+ return
+ else
+ usr << "{ERR Code: NO_SHUTTLE} Order failed! Please try again. "
+ return
+ else
+ inserted_id.mining_points -= prize.cost
+ new prize.equipment_path(src.loc)
+
+ updateUsrDialog()
+ return
+
+/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
+ if(istype(I,/obj/item/weapon/card/id))
+ var/obj/item/weapon/card/id/C = usr.get_active_hand()
+ if(istype(C) && !istype(inserted_id))
+ usr.drop_item()
+ C.loc = src
+ inserted_id = C
+ interact(user)
+ return
+ if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
+ updateUsrDialog()
+ return
+ if(default_deconstruction_crowbar(I))
+ return
+ return ..()
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 6babe4ce93a..4fa74413211 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -23,10 +23,9 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/device/analyzer(src)
new /obj/item/weapon/storage/bag/ore(src)
- new /obj/item/device/flashlight/lantern(src)
new /obj/item/weapon/shovel(src)
new /obj/item/weapon/pickaxe(src)
- new /obj/item/clothing/glasses/material(src)
+ new /obj/item/weapon/ore_radar(src)
/******************************Lantern*******************************/
@@ -34,33 +33,160 @@
name = "lantern"
icon_state = "lantern"
desc = "A mining lantern."
- brightness_on = 4 // luminosity when on
- light_power = 0.75
+ light_power = 1
+ brightness_on = 6
light_wedge = LIGHT_OMNI
light_color = LIGHT_COLOR_FIRE
/*****************************Pickaxe********************************/
/obj/item/weapon/pickaxe
- name = "mining drill"
- desc = "The most basic of mining drills, for short excavations and small mineral extractions."
+ name = "pickaxe"
+ desc = "The most basic of mining implements. Surely this is a joke?"
icon = 'icons/obj/items.dmi'
flags = CONDUCT
slot_flags = SLOT_BELT
- force = 15.0
throwforce = 4.0
+ force = 10.0
icon_state = "pickaxe"
- item_state = "jackhammer"
+ item_state = "pickaxe"
w_class = 4.0
matter = list(DEFAULT_WALL_MATERIAL = 3750)
- var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
+ var/digspeed //moving the delay to an item var so R&D can make improved picks. --NEO
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
attack_verb = list("hit", "pierced", "sliced", "attacked")
- var/drill_sound = 'sound/weapons/Genhit.ogg'
- var/drill_verb = "drilling"
+ var/drill_sound = 'sound/weapons/chisel1.ogg'
+ var/drill_verb = "excavating"
+ var/autodrill = 0 //pickaxes must be manually swung to mine, drills can mine rocks via bump
sharp = 1
- var/excavation_amount = 100
+ var/can_wield = 1
+
+ var/excavation_amount = 30
+ var/wielded = 0
+ var/force_unwielded = 10.0
+ var/force_wielded = 30.0
+ var/digspeed_unwielded = 30
+ var/digspeed_wielded = 10
+ var/drilling = 0
+
+ action_button_name = "Wield pick/drill"
+
+/obj/item/weapon/pickaxe/proc/unwield()
+ wielded = 0
+ force = force_unwielded
+ digspeed = digspeed_unwielded
+ name = initial(name)
+ update_icon()
+
+/obj/item/weapon/pickaxe/proc/wield()
+ wielded = 1
+ force = force_wielded
+ digspeed = digspeed_wielded
+ name = "[name] (Wielded)"
+ update_icon()
+
+/obj/item/weapon/pickaxe/mob_can_equip(M as mob, slot)
+ //Cannot equip wielded items.
+ if(wielded)
+ M << "Unwield the [initial(name)] first! "
+ return 0
+
+ return ..()
+
+/obj/item/weapon/pickaxe/dropped(mob/user as mob)
+ //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
+ if(user)
+ var/obj/item/weapon/pickaxe/O = user.get_inactive_hand()
+ if(istype(O))
+ O.unwield()
+ return unwield()
+
+/obj/item/weapon/pickaxe/pickup(mob/user)
+ unwield()
+
+/obj/item/weapon/pickaxe/attack_self(mob/user as mob)
+
+ ..()
+
+ if(!can_wield)
+ return
+
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ if(issmall(H))
+ user << "It's too heavy for you to wield fully. "
+ return
+ else
+ return
+
+ if(wielded) //Trying to unwield it
+ unwield()
+ user << "You are now carrying the [initial(name)] with one hand. "
+
+ var/obj/item/weapon/pickaxe/offhand/O = user.get_inactive_hand()
+ if(O && istype(O))
+ O.unwield()
+
+ else //Trying to wield it
+ if(user.get_inactive_hand())
+ user << "You need your other hand to be empty "
+ return
+ wield()
+ user << "You grab the [initial(name)] with both hands. "
+
+ var/obj/item/weapon/pickaxe/offhand/O = new(user) ////Let's reserve his other hand~
+ O.name = "[initial(name)] - offhand"
+ O.desc = "Your second grip on the [initial(name)]."
+ user.put_in_inactive_hand(O)
+
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ H.update_inv_l_hand()
+ H.update_inv_r_hand()
+
+ return
+
+/obj/item/weapon/pickaxe/ui_action_click()
+ if(src in usr)
+ attack_self(usr)
+
+/obj/item/weapon/pickaxe/verb/wield_pick()
+ if(can_wield)
+ set name = "Wield pick/drill"
+ set category = "Object"
+ set src in usr
+
+ attack_self(usr)
+
+/obj/item/weapon/pickaxe/offhand
+ w_class = 5
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "offhand"
+ item_state = null
+ name = "offhand"
+ simulated = FALSE
+
+ action_button_name = null
+
+/obj/item/weapon/pickaxe/proc/copy_stats(obj/item/weapon/pickaxe/parent)
+ digspeed_wielded = parent.digspeed_wielded
+ excavation_amount = parent.excavation_amount
+ force = parent.force_wielded
+
+/obj/item/weapon/pickaxe/offhand/unwield()
+ if (ismob(loc))
+ var/mob/living/our_mob = loc
+ our_mob.remove_from_mob(src)
+
+ qdel(src)
+
+/obj/item/weapon/pickaxe/offhand/wield()
+ if (ismob(loc))
+ var/mob/living/our_mob = loc
+ our_mob.remove_from_mob(src)
+
+ qdel(src)
/obj/item/weapon/pickaxe/hammer
name = "sledgehammer"
@@ -71,59 +197,75 @@
name = "silver pickaxe"
icon_state = "spickaxe"
item_state = "spickaxe"
- digspeed = 30
origin_tech = list(TECH_MATERIAL = 3)
desc = "This makes no metallurgic sense."
+ excavation_amount = 30
+
+ digspeed_unwielded = 30
+ digspeed_wielded = 5
/obj/item/weapon/pickaxe/drill
- name = "advanced mining drill" // Can dig sand as well!
+ name = "mining drill" // Can dig sand as well!
icon_state = "handdrill"
item_state = "jackhammer"
- digspeed = 30
origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINEERING = 2)
desc = "Yours is the drill that will pierce through the rock walls."
drill_verb = "drilling"
+ autodrill = 1
+ drill_sound = 'sound/weapons/circsawhit.ogg'
+ digspeed = 20
+ digspeed_unwielded = 30
+ force_unwielded = 15.0
+ excavation_amount = 100
+
+ can_wield = 0
+ force = 15.0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
- digspeed = 20 //faster than drill, but cannot dig
origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
drill_verb = "hammering"
+ autodrill = 1
+ drill_sound = 'sound/weapons/resonator_blast.ogg'
+ digspeed = 15
+ digspeed_unwielded = 15
+ force_unwielded = 25.0
+ excavation_amount = 100
+
+ can_wield = 0
+ force = 25.0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/gold
name = "golden pickaxe"
icon_state = "gpickaxe"
item_state = "gpickaxe"
- digspeed = 20
+ digspeed = 10
origin_tech = list(TECH_MATERIAL = 4)
desc = "This makes no metallurgic sense."
- drill_verb = "picking"
+ excavation_amount = 50
-/obj/item/weapon/pickaxe/plasmacutter
- name = "plasma cutter"
- icon_state = "plasmacutter"
- item_state = "gun"
- w_class = 3.0 //it is smaller than the pickaxe
- damtype = "fire"
- digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
- origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
- desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
- drill_verb = "cutting"
- drill_sound = 'sound/items/Welder.ogg'
- sharp = 1
- edge = 1
+ digspeed_unwielded = 30
+ digspeed_wielded = 5
+ force_wielded = 35.0
/obj/item/weapon/pickaxe/diamond
name = "diamond pickaxe"
icon_state = "dpickaxe"
item_state = "dpickaxe"
- digspeed = 10
origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINEERING = 4)
desc = "A pickaxe with a diamond pick head."
- drill_verb = "picking"
+ excavation_amount = 30
+
+ digspeed_unwielded = 20
+ digspeed_wielded = 1
+ force_wielded = 35.0
/obj/item/weapon/pickaxe/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME!
name = "diamond mining drill"
@@ -133,14 +275,34 @@
origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINEERING = 5)
desc = "Yours is the drill that will pierce the heavens!"
drill_verb = "drilling"
+ autodrill = 1
+ drill_sound = 'sound/weapons/circsawhit.ogg'
+ excavation_amount = 100
+
+ can_wield = 0
+ force = 20.0
+ digspeed = 5
+ digspeed_unwielded = 5
+ force_unwielded = 20.0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/borgdrill
name = "cyborg mining drill"
icon_state = "diamonddrill"
item_state = "jackhammer"
digspeed = 15
+ digspeed_unwielded = 15
+ force_unwielded = 25.0
desc = ""
drill_verb = "drilling"
+ autodrill = 1
+ drill_sound = 'sound/weapons/circsawhit.ogg'
+ can_wield = 0
+ force = 15.0
+ excavation_amount = 100
+
+ action_button_name = null
/*****************************Shovel********************************/
@@ -170,26 +332,15 @@
throwforce = 7.0
w_class = 2.0
-
-/**********************Mining car (Crate like thing, not the rail car)**************************/
-
-/obj/structure/closet/crate/miningcar
- desc = "A mining car. This one doesn't work on rails, but has to be dragged."
- name = "Mining car (not for rails)"
- icon = 'icons/obj/storage.dmi'
- icon_state = "miningcar"
- density = 1
- icon_opened = "miningcaropen"
- icon_closed = "miningcar"
-
// Flags.
/obj/item/stack/flag
name = "flags"
desc = "Some colourful flags."
singular_name = "flag"
- amount = 10
- max_amount = 10
+ amount = 5
+ max_amount = 5
+ w_class = 2
icon = 'icons/obj/mining.dmi'
var/upright = 0
var/base_state
@@ -249,3 +400,921 @@
newflag.icon_state = "[newflag.base_state]_open"
newflag.visible_message("[user] plants [newflag] firmly in the ground.")
src.use(1)
+
+/**********************Miner Carts***********************/
+/obj/item/weapon/rrf_ammo
+ name = "compressed railway cartridge"
+ desc = "Highly compressed matter for the RRF."
+ icon = 'icons/obj/ammo.dmi'
+ icon_state = "rcd"
+ item_state = "rcdammo"
+ w_class = 2
+ origin_tech = list(TECH_MATERIAL = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 15000,"glass" = 7500)
+
+/obj/item/weapon/rrf
+ name = "\improper Rapid-Railway-Fabricator"
+ desc = "A device used to rapidly deploy mine tracks."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "rcd"
+ opacity = 0
+ density = 0
+ anchored = 0.0
+ var/stored_matter = 30
+ w_class = 3.0
+
+/obj/item/weapon/rrf/examine(mob/user)
+ if(..(user, 0))
+ user << "It currently holds [stored_matter]/30 fabrication-units."
+
+/obj/item/weapon/rrf/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if (istype(W, /obj/item/weapon/rcd_ammo))
+
+ if ((stored_matter + 30) > 30)
+ user << "The RRF can't hold any more matter."
+ return
+
+ qdel(W)
+
+ stored_matter += 30
+ playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
+ user << "The RRF now holds [stored_matter]/30 fabrication-units."
+ return
+
+ if (istype(W, /obj/item/weapon/rrf_ammo))
+
+ if ((stored_matter + 15) > 30)
+ user << "The RRF can't hold any more matter."
+ return
+
+ qdel(W)
+
+ stored_matter += 15
+ playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
+ user << "The RRF now holds [stored_matter]/30 fabrication-units."
+ return
+
+/obj/item/weapon/rrf/afterattack(atom/A, mob/user as mob, proximity)
+
+ if(!proximity) return
+
+ if(istype(user,/mob/living/silicon/robot))
+ var/mob/living/silicon/robot/R = user
+ if(R.stat || !R.cell || R.cell.charge <= 0)
+ return
+ else
+ if(stored_matter <= 0)
+ return
+
+ if(!istype(A, /turf/simulated/floor))
+ return
+
+ if(locate(/obj/structure/track) in A)
+ return
+
+ playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
+ var/used_energy = 0
+
+ used_energy = 10
+
+ new /obj/structure/track(get_turf(A))
+
+ user << "Dispensing track..."
+
+ if(isrobot(user))
+ var/mob/living/silicon/robot/R = user
+ if(R.cell)
+ R.cell.use(used_energy)
+ else
+ stored_matter--
+ user << "The RRF now holds [stored_matter]/30 fabrication-units."
+
+
+/obj/structure/track
+ name = "mine track"
+ desc = "Just like your grandpappy used to lay 'em in 1862."
+ icon = 'icons/obj/smoothtrack.dmi'
+ icon_state = "track15"
+ density = 0
+ anchored = 1.0
+ w_class = 3
+ layer = 2.44
+
+/obj/structure/track/Initialize()
+ . = ..()
+ var/obj/structure/track/track = locate() in loc
+ if (track && track != src)
+ qdel(src)
+ return
+ updateOverlays()
+ for (var/dir in cardinal)
+ var/obj/structure/track/R = locate(/obj/structure/track, get_step(src, dir))
+ if(R)
+ R.updateOverlays()
+
+/obj/structure/track/Destroy()
+ for (var/dir in cardinal)
+ var/obj/structure/track/R = locate(/obj/structure/track, get_step(src, dir))
+ if(R)
+ R.updateOverlays()
+ return ..()
+
+/obj/structure/track/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ qdel(src)
+ if(2.0)
+ qdel(src)
+ return
+
+/obj/structure/track/attackby(obj/item/C as obj, mob/user as mob)
+
+ if (istype(C, /obj/item/stack/tile/floor))
+ var/turf/T = get_turf(src)
+ T.attackby(C, user)
+ return
+ if (istype(C, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = C
+ if(WT.remove_fuel(0, user))
+ user << "Slicing apart connectors ... "
+ new /obj/item/stack/rods(src.loc)
+ qdel(src)
+
+ return
+
+/obj/structure/track/proc/updateOverlays()
+ set waitfor = FALSE
+ overlays = list()
+
+ var/dir_sum = 0
+
+ for (var/direction in cardinal)
+ if(locate(/obj/structure/track, get_step(src, direction)))
+ dir_sum += direction
+
+ icon_state = "track[dir_sum]"
+ return
+
+/obj/vehicle/train/cargo/engine/mining
+ name = "mine cart engine"
+ desc = "A ridable electric minecart designed for pulling other mine carts."
+ icon = 'icons/obj/cart.dmi'
+ icon_state = "mining_engine"
+ on = 0
+ powered = 1
+ move_delay = -1
+
+ load_item_visible = 1
+ load_offset_x = 0
+ mob_offset_y = 15
+ active_engines = 1
+
+ light_power = 1
+ light_range = 6
+ light_wedge = LIGHT_WIDE
+ light_color = LIGHT_COLOR_FIRE
+
+/obj/vehicle/train/cargo/engine/mining/Initialize()
+ . = ..()
+ cell = new /obj/item/weapon/cell/high(src)
+ key = null
+ var/image/I = new(icon = 'icons/obj/cart.dmi', icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs
+ overlays += I
+ turn_off() //so engine verbs are correctly set
+
+/obj/vehicle/train/cargo/engine/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/key/minecarts))
+ if(!key)
+ user.drop_item()
+ W.forceMove(src)
+ key = W
+ verbs += /obj/vehicle/train/cargo/engine/verb/remove_key
+ return
+ ..()
+
+/obj/vehicle/train/cargo/engine/mining/Move(var/turf/destination)
+ return ((locate(/obj/structure/track) in destination)) ? ..() : FALSE
+
+/obj/vehicle/train/cargo/engine/mining/update_car(var/train_length, var/active_engines)
+ return
+
+/obj/vehicle/train/cargo/trolley/mining
+ name = "mine-cart"
+ desc = "A modern day twist to an ancient classic."
+ icon = 'icons/obj/cart.dmi'
+ icon_state = "mining_trailer"
+ anchored = 0
+ passenger_allowed = 0
+ move_delay = -1
+
+ load_item_visible = 1
+ load_offset_x = 1
+ load_offset_y = 15
+ mob_offset_y = 16
+
+ light_power = 1
+ light_range = 3
+ light_wedge = LIGHT_OMNI
+ light_color = LIGHT_COLOR_FIRE
+
+/obj/vehicle/train/cargo/trolley/mining/Move(var/turf/destination)
+ return ((locate(/obj/structure/track) in destination)) ? ..() : FALSE
+
+/obj/item/weapon/key/minecarts
+ name = "key"
+ desc = "A keyring with a small steel key, and a pickaxe shaped fob."
+ icon = 'icons/obj/vehicles.dmi'
+ icon_state = "mine_keys"
+ w_class = 1
+
+/**********************Pinpointer**********************/
+
+/obj/item/weapon/ore_radar
+ name = "scanner pad"
+ desc = "An antiquated device that can detect ore in a wide radius around the user."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "pinoff"
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+ w_class = 2.0
+ item_state = "electronic"
+ throw_speed = 4
+ throw_range = 20
+ matter = list(DEFAULT_WALL_MATERIAL = 500)
+ var/turf/simulated/mineral/random/sonar = null
+ var/active = 0
+
+
+/obj/item/weapon/ore_radar/attack_self(mob/user)
+ if(!active)
+ active = 1
+ usr << "You activate the pinpointer "
+ workdisk(user)
+ else
+ active = 0
+ icon_state = "pinoff"
+ usr << "You deactivate the pinpointer "
+
+/obj/item/weapon/ore_radar/proc/workdisk(var/user)
+ if(!src.loc)
+ active = 0
+
+ if(!active)
+ return
+
+ var/closest = 15
+
+ for(var/turf/simulated/mineral/random/R in orange(14,user))
+ var/dist = get_dist(user, R)
+ if(dist < closest)
+ closest = dist
+ sonar = R
+
+ if(!sonar)
+ icon_state = "pinonnull"
+ return
+ set_dir(get_dir(user,sonar))
+ switch(get_dist(user,sonar))
+ if(0)
+ icon_state = "pinondirect"
+ if(1 to 8)
+ icon_state = "pinonclose"
+ if(9 to 16)
+ icon_state = "pinonmedium"
+ if(16 to INFINITY)
+ icon_state = "pinonfar"
+ spawn(5) .()
+
+/**********************Jaunter**********************/
+
+/obj/item/device/wormhole_jaunter
+ name = "wormhole jaunter"
+ desc = "A single use device harnessing outdated warp technology. The wormholes it creates are unpleasant to travel through, to say the least."
+ contained_sprite = 1
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "jaunter"
+ item_state = "jaunter"
+ throwforce = 0
+ w_class = 2
+ throw_speed = 3
+ throw_range = 5
+ slot_flags = SLOT_BELT
+ origin_tech = list(TECH_BLUESPACE = 2, TECH_PHORON = 4, TECH_ENGINEERING = 4)
+
+/obj/item/device/wormhole_jaunter/attack_self(mob/user)
+ user.visible_message("[user.name] activates the [src.name]! ")
+ feedback_add_details("jaunter", "U") // user activated
+ activate(user)
+
+/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user)
+ var/turf/device_turf = get_turf(user)
+ if(!device_turf||device_turf.z==0)
+ user << "You're having difficulties getting the [src.name] to work. "
+ return FALSE
+ return TRUE
+
+/obj/item/device/wormhole_jaunter/proc/get_destinations(mob/user)
+ var/list/destinations = list()
+
+ for(var/obj/item/device/radio/beacon/B in teleportbeacons)
+ var/turf/T = get_turf(B)
+ if(T.z in config.station_levels)
+ destinations += B
+
+ return destinations
+
+/obj/item/device/wormhole_jaunter/proc/activate(mob/user)
+ if(!turf_check(user))
+ return
+
+ var/list/L = get_destinations(user)
+ if(!L.len)
+ user << "The [src.name] found no beacons in the world to anchor a wormhole to. "
+ return
+ var/chosen_beacon = pick(L)
+ var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100)
+ J.target = chosen_beacon
+ playsound(src,'sound/effects/sparks4.ogg',50,1)
+ qdel(src)
+
+/obj/item/device/wormhole_jaunter/emp_act(power)
+ var/triggered = FALSE
+ if(power == 1)
+ triggered = TRUE
+ else if(power == 2 && prob(50))
+ triggered = TRUE
+
+ if(triggered)
+ usr.visible_message("The [src] overloads and activates! ")
+ feedback_add_details("jaunter","E") // EMP accidental activation
+ activate(usr)
+
+/obj/effect/portal/wormhole/jaunt_tunnel
+ name = "jaunt tunnel"
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "bhole3"
+ desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
+
+/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M)
+ if(M.anchored || istype(M, /obj/effect))
+ return
+ single_spark(M.loc)
+ if(istype(M))
+ if(do_teleport(M, target, 6))
+ single_spark(M.loc)
+ playsound(M,'sound/weapons/resonator_blast.ogg',50,1)
+ if(iscarbon(M))
+ var/mob/living/carbon/L = M
+ L.Weaken(3)
+ if(ishuman(L))
+ shake_camera(L, 20, 1)
+ addtimer(CALLBACK(L, /mob/living/carbon/.proc/vomit), 20)
+
+/**********************Lazarus Injector**********************/
+
+/obj/item/weapon/lazarus_injector
+ name = "lazarus injector"
+ desc = "An injector with a cocktail of nanomachines and chemicals, this device can seemingly raise animals from the dead. If no effect in 3 days please call customer support."
+ icon = 'icons/obj/syringe.dmi'
+ icon_state = "borghypo"
+ item_state = "hypo"
+ throwforce = 0
+ w_class = 2
+ throw_speed = 3
+ throw_range = 5
+ var/loaded = 1
+ var/malfunctioning = 0
+ var/revive_type = TYPE_ORGANIC //So you can't revive boss monsters or robots with it
+ origin_tech = list(TECH_BIO = 7, TECH_MATERIAL = 4)
+
+/obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
+ if(!loaded)
+ return
+ if(isliving(target) && proximity_flag)
+ if(istype(target, /mob/living/simple_animal))
+ var/mob/living/simple_animal/M = target
+ if(!(M.find_type() & revive_type))
+ user << "[src] does not work on this sort of creature. "
+ return
+ if(M.stat == DEAD)
+ if(!malfunctioning)
+ M.faction = "neutral"
+ M.revive()
+ M.icon_state = M.icon_living
+ loaded = 0
+ user.visible_message("[user] injects [M] with [src], reviving it. ")
+ feedback_add_details("lazarus_injector", "[M.type]")
+ playsound(src,'sound/effects/refill.ogg',50,1)
+ return
+ else
+ user << "[src] is only effective on the dead. "
+ return
+ else
+ user << "[src] is only effective on lesser beings. "
+ return
+
+/obj/item/weapon/lazarus_injector/emp_act()
+ if(!malfunctioning)
+ malfunctioning = 1
+
+/obj/item/weapon/lazarus_injector/examine(mob/user)
+ ..()
+ if(!loaded)
+ user << "[src] is empty. "
+ if(malfunctioning)
+ user << "The display on [src] seems to be flickering. "
+
+/**********************Point Transfer Card**********************/
+
+/obj/item/weapon/card/mining_point_card
+ name = "mining points card"
+ desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
+ icon_state = "data"
+ var/points = 500
+
+/obj/item/weapon/card/mining_point_card/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/weapon/card/id))
+ if(points)
+ var/obj/item/weapon/card/id/C = I
+ C.mining_points += points
+ user << "You transfer [points] points to [C]. "
+ points = 0
+ else
+ user << "There's no points left on [src]. "
+ ..()
+
+/obj/item/weapon/card/mining_point_card/examine(mob/user)
+ ..()
+ user << "There's [points] point\s on the card."
+
+/**********************"Fultons"**********************/
+
+var/list/total_extraction_beacons = list()
+
+/obj/item/weapon/extraction_pack
+ name = "warp extraction pack"
+ desc = "A complex device that warps nonliving matter to nearby locations."
+ contained_sprite = 1
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "fulton"
+ w_class = 3
+ var/obj/structure/extraction_point/beacon
+ var/list/beacon_networks = list("station")
+ var/uses_left = 3
+ origin_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 4, TECH_ENGINEERING = 4)
+
+/obj/item/weapon/extraction_pack/examine()
+ . = ..()
+ usr.show_message("It has [uses_left] uses remaining.", 1)
+
+/obj/item/weapon/extraction_pack/attack_self(mob/user)
+ var/list/possible_beacons = list()
+ for(var/B in total_extraction_beacons)
+ var/obj/structure/extraction_point/EP = B
+ if(EP.beacon_network in beacon_networks)
+ possible_beacons += EP
+
+ if(!possible_beacons.len)
+ user << "There are no extraction beacons in existence!"
+ return
+
+ else
+ var/A
+
+ A = input("Select a beacon to connect to", "Warp Extraction Pack", A) in possible_beacons
+
+ if(!A)
+ return
+ beacon = A
+
+/obj/item/weapon/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user)
+ if(!beacon)
+ user << "[src] is not linked to a beacon, and cannot be used."
+ return
+ if(!istype(A))
+ return
+ else
+ if(istype(A,/mob/living))
+ user << "[src] is not safe for use with living creatures, they wouldn't survive the trip back!"
+ return
+ if(A.loc == user) // no extracting stuff you're holding
+ return
+ if(A.anchored)
+ return
+ user << "You start attaching the pack to [A]... "
+ if(do_after(user,50))
+ user << "You attach the pack to [A] and activate it. "
+ uses_left--
+ if(uses_left <= 0)
+ user.drop_item(src)
+ loc = A
+ single_spark(A.loc)
+ var/list/flooring_near_beacon = list()
+ for(var/turf/simulated/floor/floor in orange(1, beacon))
+ flooring_near_beacon += floor
+ A.loc = pick(flooring_near_beacon)
+ single_spark(A.loc)
+ if(uses_left <= 0)
+ qdel(src)
+
+
+/obj/item/warp_core
+ name = "warp extraction beacon signaller"
+ desc = "Emits a signal which Warp-Item recovery devices can lock onto. Activate in hand to create a beacon."
+ icon = 'icons/obj/stock_parts.dmi'
+ icon_state = "subspace_amplifier"
+ origin_tech = list(TECH_BLUESPACE = 1, TECH_PHORON = 1, TECH_ENGINEERING = 2)
+
+/obj/item/warp_core/attack_self(mob/user)
+ user << "You start placing down the beacon. . . "
+ if(do_after(user,15))
+ new /obj/structure/extraction_point(get_turf(user))
+ qdel(src)
+
+/obj/structure/extraction_point
+ name = "warp recovery beacon"
+ desc = "A beacon for the Warp-Item recovery system. Hit a beacon with a pack to link the pack to a beacon."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "extraction_point"
+ anchored = 1
+ density = 0
+ var/beacon_network = "station"
+
+/obj/structure/extraction_point/New()
+ var/area/area_name = get_area(src)
+ name += " ([rand(100,999)]) ([area_name.name])"
+ total_extraction_beacons += src
+ ..()
+
+/obj/structure/extraction_point/Destroy()
+ total_extraction_beacons -= src
+ ..()
+
+/**********************Resonator**********************/
+
+/obj/item/weapon/resonator
+ name = "resonator"
+ contained_sprite = 1
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "resonator"
+ item_state = "resonator"
+ desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vacuum."
+ w_class = 3
+ force = 15
+ throwforce = 10
+ var/burst_time = 30
+ var/fieldlimit = 4
+ var/list/fields = list()
+ var/quick_burst_mod = 0.8
+ origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3)
+
+/obj/item/weapon/resonator/upgraded
+ name = "upgraded resonator"
+ desc = "An upgraded version of the resonator that can produce more fields at once."
+ icon_state = "resonatoru"
+ item_state = "resonatoru"
+ origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4, TECH_POWER = 2, TECH_ENGINEERING = 3)
+ fieldlimit = 8
+ quick_burst_mod = 1
+ burst_time = 15
+
+/obj/item/weapon/resonator/proc/CreateResonance(target, creator)
+ var/turf/T = get_turf(target)
+ var/obj/effect/resonance/R = locate(/obj/effect/resonance) in T
+ if(R)
+ R.resonance_damage *= quick_burst_mod
+ R.burst(T)
+ return
+ if(fields.len < fieldlimit)
+ playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
+ var/obj/effect/resonance/RE = new /obj/effect/resonance(T, creator, burst_time, src)
+ fields += RE
+
+/obj/item/weapon/resonator/attack_self(mob/user)
+ if(burst_time == 50)
+ burst_time = 30
+ user << "You set the resonator's fields to detonate after 3 seconds. "
+ else
+ burst_time = 50
+ user << "You set the resonator's fields to detonate after 5 seconds. "
+
+/obj/item/weapon/resonator/afterattack(atom/target, mob/user, proximity_flag)
+ ..()
+ if(user.Adjacent(target))
+ if(isturf(target))
+ CreateResonance(target, user)
+
+/obj/effect/resonance
+ name = "resonance field"
+ desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures."
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "shield2"
+ layer = 5
+ anchored = TRUE
+ mouse_opacity = 0
+ var/resonance_damage = 20
+ var/creator
+ var/obj/item/weapon/resonator/res
+
+/obj/effect/resonance/New(loc, set_creator, timetoburst, set_resonator)
+ ..()
+ creator = set_creator
+ res = set_resonator
+ var/turf/proj_turf = get_turf(src)
+ if(!istype(proj_turf))
+ return
+ var/datum/gas_mixture/environment = proj_turf.return_air()
+ var/pressure = environment.return_pressure()
+ if(pressure < 50)
+ name = "strong resonance field"
+ resonance_damage = 60
+
+ addtimer(CALLBACK(src, .proc/burst, loc), timetoburst)
+
+/obj/effect/resonance/Destroy()
+ if(res)
+ res.fields -= src
+ return ..()
+
+/obj/effect/resonance/proc/burst(turf/T)
+ playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
+ if(istype(T, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = T
+ M.GetDrilled(1)
+ for(var/mob/living/L in T)
+ if(creator)
+ add_logs(creator, L, "used a resonator field on", "resonator")
+ L << "The [src.name] ruptured with you in it! "
+ L.apply_damage(resonance_damage, BRUTE)
+ qdel(src)
+
+
+/******************************Ore Magnet*******************************/
+/obj/item/weapon/oremagnet
+ name = "ore magnet"
+ contained_sprite = 1
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "magneto"
+ item_state = "magneto"
+ desc = "A handheld device that creates a well of negative force that attracts minerals of a very specific type, size, and state to its user."
+ w_class = 3
+ force = 10
+ throwforce = 5
+ var/on = 0
+ origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 3)
+
+/obj/item/weapon/oremagnet/attack_self(mob/user)
+ if(!on)
+ user << "You switch on the ore magnet. "
+ on = 1
+ else
+ user << "You switch off the ore magnet, "
+ on = 0
+ magneto()
+
+/obj/item/weapon/oremagnet/proc/magneto()
+ if(!src.loc)
+ on = 0
+ if(!on)
+ return
+ for(var/obj/item/weapon/ore/O in oview(7,src.loc))
+ if(prob(80))
+ step_to(O,src.loc,0)
+ spawn(10)
+ .()
+
+/obj/item/weapon/oreportal
+ name = "ore summoner"
+ contained_sprite = 1
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "supermagneto"
+ item_state = "jaunter"
+ desc = "A handheld device that creates a well of warp energy that teleports minerals of a very specific type, size, and state to its user."
+ w_class = 3
+ force = 15
+ throwforce = 5
+ origin_tech = list(TECH_BLUESPACE = 4, TECH_ENGINEERING = 3)
+
+/obj/item/weapon/oreportal/attack_self(mob/user)
+ user << "You pulse the ore summoner. "
+ for(var/obj/item/weapon/ore/O in orange(7,user))
+ single_spark(O.loc)
+ do_teleport(O, user, 0)
+
+/******************************Sculpting*******************************/
+/obj/item/weapon/autochisel
+ name = "auto-chisel"
+ icon = 'icons/obj/items.dmi'
+ icon_state = "jackhammer"
+ item_state = "jackhammer"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
+ desc = "With an integrated AI chip and hair-trigger precision, this baby makes sculpting almost automatic!"
+
+/obj/structure/sculpting_block
+ name = "sculpting block"
+ desc = "A finely chiselled sculpting block, it is ready to be your canvas."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "sculpting_block"
+ density = 1
+ opacity = 1
+ anchored = 0
+ var/sculpted = 0
+ var/mob/living/T
+ var/times_carved = 0
+ var/last_struck = 0
+
+/obj/structure/sculpting_block/verb/rotate()
+ set name = "Rotate"
+ set category = "Object"
+ set src in oview(1)
+
+ if (src.anchored || usr:stat)
+ usr << "It is fastened to the floor!"
+ return 0
+ src.set_dir(turn(src.dir, 90))
+ return 1
+
+/obj/structure/sculpting_block/attackby(obj/item/C as obj, mob/user as mob)
+
+ if (istype(C, /obj/item/weapon/wrench))
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
+ user << "You [anchored ? "un" : ""]anchor the [name]. "
+ anchored = !anchored
+
+ if (istype(C, /obj/item/weapon/autochisel))
+ if(!sculpted)
+ if(last_struck)
+ return
+
+ if(!T)
+ var/list/choices = list()
+ for(var/mob/living/M in view(7,user))
+ choices += M
+ T = input(user,"Who do you wish to sculpt?") as null|anything in choices
+ user.visible_message("[user] begins sculpting. ",
+ "You begin sculpting. ")
+
+ var/sculpting_coefficient = get_dist(user,T)
+ if(sculpting_coefficient <= 0)
+ sculpting_coefficient = 1
+
+ if(sculpting_coefficient >= 7)
+ user << "You hardly remember what [T] really looks like! Bah! "
+ T = null
+
+ user.visible_message("[user] carves away at the sculpting block! ",
+ "You continue sculpting. ")
+
+ if(prob(25))
+ playsound(user, 'sound/items/Screwdriver.ogg', 20, 1)
+ else
+ playsound(user, "sound/weapons/chisel[rand(1,2)].ogg", 20, 1)
+ spawn(3)
+ playsound(user, "sound/weapons/chisel[rand(1,2)].ogg", 20, 1)
+ spawn(3)
+ playsound(user, "sound/weapons/chisel[rand(1,2)].ogg", 20, 1)
+
+ last_struck = 1
+ if(do_after(user,(20)))
+ last_struck = 0
+ if(times_carved <= 9)
+ times_carved += 1
+ if(times_carved < 1)
+ user << "You review your work and see there is more to do. "
+ return
+ else
+ sculpted = 1
+ user.visible_message("[user] finishes sculpting their magnum opus! ",
+ "You finish sculpting a masterpiece. ")
+ src.appearance = T
+ src.color = list(
+ 0.35, 0.3, 0.25,
+ 0.35, 0.3, 0.25,
+ 0.35, 0.3, 0.25
+ )
+ src.pixel_y += 8
+ var/image/pedestal_underlay = image('icons/obj/mining.dmi', icon_state = "pedestal")
+ pedestal_underlay.appearance_flags = RESET_COLOR
+ pedestal_underlay.pixel_y -= 8
+ src.underlays += pedestal_underlay
+ var/title = sanitize(input(usr, "If you would like to name your art, do so here.", "Christen Your Sculpture", "") as text|null)
+ if(title)
+ name = title
+ else
+ name = "*[T.name]*"
+ var/legend = sanitize(input(usr, "If you would like to describe your art, do so here.", "Story Your Sculpture", "") as message|null)
+ if(legend)
+ desc = legend
+ else
+ desc = "This is a sculpture of [T.name]. All craftsmanship is of the highest quality. It is decorated with rock and more rock. It is covered with rock. On the item is an image of a rock. The rock is [T.name]."
+ else
+ last_struck = 0
+ return
+
+/******************************Gains Boroughs*******************************/
+
+/obj/structure/punching_bag
+ name = "punching bag"
+ desc = "A punching bag. Better this than the Quartermaster."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "punchingbag"
+ anchored = 1
+ layer = 5.1
+ var/list/hit_sounds = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg',\
+ 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg')
+
+/obj/structure/punching_bag/attack_hand(mob/user as mob)
+ flick("[icon_state]2", src)
+ playsound(src.loc, pick(src.hit_sounds), 25, 1, -1)
+
+/obj/structure/weightlifter
+ name = "Weight Machine"
+ desc = "Just looking at this thing makes you feel tired."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "fitnessweight"
+ density = 1
+ anchored = 1
+
+/obj/structure/weightlifter/attack_hand(mob/user as mob)
+ if(in_use)
+ user << "It's already in use - wait a bit."
+ return
+ else
+ in_use = 1
+ icon_state = "fitnessweight-c"
+ user.dir = SOUTH
+ user.Stun(4)
+ user.loc = src.loc
+ var/image/W = image('icons/obj/mining.dmi',"fitnessweight-w")
+ W.layer = 5.1
+ overlays += W
+ var/bragmessage = pick("pushing it to the limit","going into overdrive","burning with determination","rising up to the challenge", "getting strong now","getting ripped")
+ user.visible_message("[user] is [bragmessage]! ")
+ var/reps = 0
+ user.pixel_y = 5
+ while (reps++ < 6)
+ if (user.loc != src.loc)
+ break
+
+ for (var/innerReps = max(reps, 1), innerReps > 0, innerReps--)
+ sleep(3)
+ animate(user, pixel_y = (user.pixel_y == 3) ? 5 : 3, time = 3)
+
+ playsound(user,'sound/effects/spring.ogg', 60, 1)
+
+ sleep(3)
+ animate(user, pixel_y = 2, time = 3)
+ sleep(3)
+ playsound(user, 'sound/machines/click.ogg', 60, 1)
+ in_use = 0
+ animate(user, pixel_y = 0, time = 3)
+ var/finishmessage = pick("You feel stronger!","You feel like you can take on the world!","You feel robust!","You feel indestructible!")
+ icon_state = "fitnessweight"
+ overlays -= W
+ user << "[finishmessage]"
+
+/******************************Seismic Charge*******************************/
+
+/obj/item/weapon/plastique/seismic
+ name = "seismic charge"
+ desc = "A complex mining device that utilizes a seismic detonation to eliminate weak asteroid turf in a wide radius."
+ origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_PHORON = 2)
+ timer = 15
+
+/obj/item/weapon/plastique/seismic/explode(var/turf/location)
+ if(!target)
+ target = get_atom_on_turf(src)
+ if(!target)
+ target = src
+ if(location)
+ new /obj/effect/overlay/temp/explosion(location)
+ playsound(location, 'sound/effects/Explosion1.ogg', 100, 1)
+ for(var/atom/A in range(4,location))
+ if(istype(A,/turf/simulated/mineral))
+ var/turf/simulated/mineral/M = A
+ M.GetDrilled(1)
+ else if(istype(A, /turf/simulated/wall) && prob(66))
+ var/turf/simulated/wall/W = A
+ W.ex_act(2)
+ else if(istype(A, /obj/structure/window))
+ var/obj/structure/window/WI = A
+ WI.ex_act(3)
+ else if(istype(A,/mob/living))
+ var/mob/living/LI = A
+ LI << 'sound/weapons/resonator_blast.ogg'
+ if(iscarbon(LI))
+ var/mob/living/carbon/L = A
+ L.Weaken(3)
+ if(ishuman(L))
+ shake_camera(L, 20, 1)
+ addtimer(CALLBACK(L, /mob/living/carbon/.proc/vomit), 20)
+
+ spawn(2)
+ for(var/turf/simulated/mineral/M in range(7,location))
+ if(prob(75))
+ M.GetDrilled(1)
+
+ if(target)
+ target.overlays -= image_overlay
+ qdel(src)
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 3d8493f65b1..91aaea2e1d5 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -8,8 +8,17 @@
/turf/simulated/mineral //wall piece
name = "Rock"
- icon = 'icons/turf/walls.dmi'
+ //icon = 'icons/turf/walls.dmi'
+ //icon_state = "rock"
+ icon = 'icons/turf/smooth/rock_wall.dmi' // Until we get sprites.
icon_state = "rock"
+ layer = 2.01
+ smooth = SMOOTH_MORE | SMOOTH_BORDER
+ canSmoothWith = list(
+ /turf/simulated/mineral,
+ /turf/simulated/wall,
+ /turf/unsimulated/wall
+ )
oxygen = 0
nitrogen = 0
opacity = 1
@@ -25,29 +34,54 @@
var/datum/geosample/geologic_data
var/excavation_level = 0
var/list/finds
- var/next_rock = 0
var/archaeo_overlay = ""
- var/excav_overlay = ""
var/obj/item/weapon/last_find
var/datum/artifact_find/artifact_find
has_resources = 1
-/turf/simulated/mineral/initialize()
- MineralSpread()
- updateMineralOverlays(TRUE)
+// Copypaste parent call for performance.
+/turf/simulated/mineral/Initialize()
+ if (initialized)
+ crash_with("Warning: [src]([type]) initialized multiple times!")
-/turf/simulated/mineral/proc/updateMineralOverlays(var/update_neighbors)
- var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
- for(var/direction in step_overlays)
- var/turf/turf_to_check = get_step(src,step_overlays[direction])
- if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid))
- var/turf/simulated/floor/asteroid/T = turf_to_check
- T.updateMineralOverlays()
- else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
- var/image/overlay = image('icons/turf/walls.dmi', "rock_side", dir = turn(step_overlays[direction], 180))
- overlay.plane = 0
- turf_to_check.overlays += overlay
+ initialized = TRUE
+
+ if(dynamic_lighting)
+ luminosity = 0
+ else
+ luminosity = 1
+
+ has_opaque_atom = TRUE
+
+ if (smooth)
+ pixel_x = -4
+ pixel_y = -4
+ queue_smooth(src)
+
+ return INITIALIZE_HINT_NORMAL
+
+/turf/simulated/mineral/examine(mob/user)
+ ..()
+ if(mineral)
+ switch(mined_ore)
+ if(0)
+ user << "It is ripe with [mineral.display_name]. "
+ if(1)
+ user << "Its [mineral.display_name] looks a little depleted. "
+ if(2)
+ user << "Its [mineral.display_name] looks very depleted! "
+ else
+ user << "It is devoid of any valuable minerals. "
+ switch(emitter_blasts_taken)
+ if(0)
+ user << "It is in pristine condition. "
+ if(1)
+ user << "It appears a little damaged. "
+ if(2)
+ user << "It is crumbling! "
+ if(3)
+ user << "It looks ready to collapse at any moment! "
/turf/simulated/mineral/ex_act(severity)
switch(severity)
@@ -55,6 +89,8 @@
if (prob(70))
mined_ore = 1 //some of the stuff gets blown up
GetDrilled()
+ else
+ emitter_blasts_taken += 2
if(1.0)
mined_ore = 2 //some of the stuff gets blown up
GetDrilled()
@@ -65,18 +101,22 @@
if(istype(Proj, /obj/item/projectile/beam/emitter))
emitter_blasts_taken++
- if(emitter_blasts_taken > 2) // 3 blasts per tile
- mined_ore = 1
- GetDrilled()
+ if(emitter_blasts_taken > 2) // 3 blasts per tile
+ GetDrilled()
/turf/simulated/mineral/Bumped(AM)
. = ..()
if(istype(AM,/mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
- attackby(H.l_hand,H)
+ var/obj/item/weapon/pickaxe/P = H.l_hand
+ if(P.autodrill)
+ attackby(H.l_hand,H)
+
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
- attackby(H.r_hand,H)
+ var/obj/item/weapon/pickaxe/P = H.r_hand
+ if(P.autodrill)
+ attackby(H.r_hand,H)
else if(istype(AM,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = AM
@@ -88,16 +128,24 @@
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill))
M.selected.action(src)
+#define SPREAD(the_dir) \
+ if (prob(mineral.spread_chance)) { \
+ var/turf/simulated/mineral/target = get_step(src, the_dir); \
+ if (istype(target) && !target.mineral) { \
+ target.mineral = mineral; \
+ target.UpdateMineral(); \
+ target.MineralSpread(); \
+ } \
+ }
+
/turf/simulated/mineral/proc/MineralSpread()
if(mineral && mineral.spread)
- for(var/trydir in cardinal)
- if(prob(mineral.spread_chance))
- var/turf/simulated/mineral/target_turf = get_step(src, trydir)
- if(istype(target_turf) && !target_turf.mineral)
- target_turf.mineral = mineral
- target_turf.UpdateMineral()
- target_turf.MineralSpread()
+ SPREAD(NORTH)
+ SPREAD(SOUTH)
+ SPREAD(EAST)
+ SPREAD(WEST)
+#undef SPREAD
/turf/simulated/mineral/proc/UpdateMineral()
clear_ore_effects()
@@ -111,7 +159,7 @@
//Not even going to touch this pile of spaghetti
/turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (!usr.IsAdvancedToolUser())
usr << "\red You don't have the dexterity to do this!"
return
@@ -133,7 +181,7 @@
user << "\blue \icon[P] [src] has been excavated to a depth of [2*excavation_level]cm."
return
- if (istype(W, /obj/item/weapon/pickaxe))
+ if (istype(W, /obj/item/weapon/pickaxe) && W.simulated) // Pickaxe offhand is not simulated.
var/turf/T = user.loc
if (!( istype(T, /turf) ))
return
@@ -141,9 +189,14 @@
var/obj/item/weapon/pickaxe/P = W
if(last_act + P.digspeed > world.time)//prevents message spam
return
+
+ if(P.drilling)
+ return
+
last_act = world.time
playsound(user, P.drill_sound, 20, 1)
+ P.drilling = 1
//handle any archaeological finds we might uncover
var/fail_message
@@ -153,7 +206,8 @@
//Chance to destroy / extract any finds here
fail_message = ". [pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")] "
- user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]."
+ if(fail_message)
+ user << "You start [P.drill_verb][fail_message ? fail_message : ""]. "
if(fail_message && prob(90))
if(prob(25))
@@ -164,7 +218,18 @@
artifact_debris()
if(do_after(user,P.digspeed))
- user << "\blue You finish [P.drill_verb] the rock."
+ P.drilling = 0
+
+ if(prob(50))
+ var/obj/item/weapon/ore/O
+ if(prob(25) && (mineral) && (P.excavation_amount >= 30))
+ O = new mineral.ore (src)
+ else
+ O = new /obj/item/weapon/ore(src)
+ if(istype(O))
+ geologic_data.UpdateNearbyArtifactInfo(src)
+ O.geologic_data = geologic_data
+ addtimer(CALLBACK(O, /atom/movable/.proc/forceMove, user.loc), 1)
if(finds && finds.len)
var/datum/find/F = finds[1]
@@ -208,33 +273,26 @@
var/datum/find/F = finds[1]
if(F.excavation_required <= excavation_level + F.view_range)
archaeo_overlay = "overlay_archaeo[rand(1,3)]"
- overlays += archaeo_overlay
+ add_overlay(archaeo_overlay)
- //there's got to be a better way to do this
- var/update_excav_overlay = 0
- if(excavation_level >= 75)
- if(excavation_level - P.excavation_amount < 75)
- update_excav_overlay = 1
- else if(excavation_level >= 50)
- if(excavation_level - P.excavation_amount < 50)
- update_excav_overlay = 1
- else if(excavation_level >= 25)
- if(excavation_level - P.excavation_amount < 25)
- update_excav_overlay = 1
+ else
+ user << " You stop [P.drill_verb] the rock. "
+ P.drilling = 0
- //update overlays displaying excavation level
- if( !(excav_overlay && excavation_level > 0) || update_excav_overlay )
- var/excav_quadrant = round(excavation_level / 25) + 1
- excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]"
- overlays += excav_overlay
+ if (istype(W, /obj/item/weapon/autochisel))
- //drop some rocks
- next_rock += P.excavation_amount * 10
- while(next_rock > 100)
- next_rock -= 100
- var/obj/item/weapon/ore/O = new(src)
- geologic_data.UpdateNearbyArtifactInfo(src)
- O.geologic_data = geologic_data
+ if(last_act + 80 > world.time)//prevents message spam
+ return
+ last_act = world.time
+
+ user << "You start chiselling [src] into a sculptable block. "
+
+ if(!do_after(user,80))
+ return
+
+ user << "You finish chiselling [src] into a sculptable block. "
+ new /obj/structure/sculpting_block(src)
+ GetDrilled(1)
else
return attack_hand(user)
@@ -282,20 +340,15 @@
if(prob(3))
excavate_find(prob(5), finds[1])
- var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST)
-
//Add some rubble, you did just clear out a big chunk of rock.
var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf)
// Kill and update the space overlays around us.
- for(var/direction in step_overlays)
- var/turf/space/T = get_step(src, step_overlays[direction])
- if(istype(T))
- T.overlays.Cut()
- for(var/next_direction in step_overlays)
- if(istype(get_step(T, step_overlays[next_direction]),/turf/simulated/mineral))
- T.overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[next_direction])
+ for(var/direction in cardinal)
+ var/turf/simulated/open/O = get_step(src, direction)
+ if(istype(O))
+ O.update()
if(rand(1,500) == 1)
visible_message("An old dusty crate was buried within! ")
@@ -303,7 +356,6 @@
if(istype(N))
N.overlay_detail = rand(0,9)
- N.updateMineralOverlays(1)
/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
//with skill and luck, players can cleanly extract finds
@@ -375,38 +427,52 @@
/turf/simulated/mineral/random
name = "Mineral deposit"
var/mineralSpawnChanceList = list(
- ORE_URANIUM = 5,
- ORE_PLATINUM = 5,
- ORE_IRON = 35,
- ORE_COAL = 35,
- ORE_DIAMOND = 1,
- ORE_GOLD = 5,
- ORE_SILVER = 5,
- ORE_PHORON = 10
+ ORE_URANIUM = 2,
+ ORE_PLATINUM = 2,
+ ORE_IRON = 8,
+ ORE_COAL = 8,
+ ORE_DIAMOND = 1,
+ ORE_GOLD = 2,
+ ORE_SILVER = 2,
+ ORE_PHORON = 5
)
- var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit
+ var/mineralChance = 45
-/turf/simulated/mineral/random/New()
+/turf/simulated/mineral/random/Initialize()
if (prob(mineralChance) && !mineral)
var/mineral_name = pickweight(mineralSpawnChanceList) //temp mineral name
if (mineral_name && (mineral_name in ore_data))
mineral = ore_data[mineral_name]
UpdateMineral()
-
+
. = ..()
/turf/simulated/mineral/random/high_chance
- mineralChance = 25
mineralSpawnChanceList = list(
- ORE_URANIUM = 10,
- ORE_PLATINUM = 10,
- ORE_IRON = 20,
- ORE_COAL = 20,
- ORE_DIAMOND = 2,
- ORE_GOLD = 10,
- ORE_SILVER = 10,
- ORE_PHORON = 20
+ ORE_URANIUM = 2,
+ ORE_PLATINUM = 2,
+ ORE_IRON = 2,
+ ORE_COAL = 2,
+ ORE_DIAMOND = 1,
+ ORE_GOLD = 2,
+ ORE_SILVER = 2,
+ ORE_PHORON = 3
)
+ mineralChance = 45
+
+/turf/simulated/mineral/random/higher_chance
+ mineralSpawnChanceList = list(
+ ORE_URANIUM = 3,
+ ORE_PLATINUM = 3,
+ ORE_IRON = 1,
+ ORE_COAL = 1,
+ ORE_DIAMOND = 1,
+ ORE_GOLD = 3,
+ ORE_SILVER = 3,
+ ORE_PHORON = 2
+ )
+ mineralChance = 75
+
/**********************Asteroid**************************/
@@ -415,8 +481,16 @@
// This means you can put grass on the asteroid etc.
/turf/simulated/floor/asteroid
name = "sand"
- icon = 'icons/turf/flooring/asteroid.dmi'
- icon_state = "asteroid"
+ //icon = 'icons/turf/flooring/asteroid.dmi'
+ //icon_state = "asteroid"
+ icon = 'icons/turf/smooth/ash.dmi'
+ icon_state = "ash"
+ smooth = SMOOTH_MORE | SMOOTH_BORDER
+ canSmoothWith = list(
+ /turf/simulated/floor/asteroid,
+ /turf/simulated/mineral,
+ /turf/simulated/wall
+ )
base_name = "sand"
base_desc = "Gritty and unpleasant."
base_icon = 'icons/turf/flooring/asteroid.dmi'
@@ -426,19 +500,31 @@
oxygen = 0
nitrogen = 0
temperature = TCMB
- var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
+ var/dug = 0 //Increments by 1 everytime it's dug. 11 is the last integer that should ever be here.
var/overlay_detail
- var/static/list/overlay_cache
has_resources = 1
footstep_sound = "gravelstep"
-/turf/simulated/floor/asteroid/New()
+// Copypaste parent for performance.
+/turf/simulated/floor/asteroid/Initialize()
+ if(initialized)
+ crash_with("Warning: [src]([type]) initialized multiple times!")
+ initialized = TRUE
+
+ if(dynamic_lighting)
+ luminosity = 0
+ else
+ luminosity = 1
if(prob(20))
overlay_detail = rand(0,9)
-/turf/simulated/floor/asteroid/initialize()
- updateMineralOverlays(1)
+ if (smooth)
+ pixel_x = -4
+ pixel_y = -4
+ queue_smooth(src)
+
+ return INITIALIZE_HINT_NORMAL
/turf/simulated/floor/asteroid/ex_act(severity)
switch(severity)
@@ -446,9 +532,18 @@
return
if(2.0)
if (prob(70))
+ dug += rand(4,10)
+ gets_dug()
+ else
+ dug += rand(1,3)
gets_dug()
if(1.0)
- gets_dug()
+ if(prob(30))
+ dug = 11
+ gets_dug()
+ else
+ dug += rand(4,11)
+ gets_dug()
return
/turf/simulated/floor/asteroid/is_plating()
@@ -499,20 +594,58 @@
break
if(valid_tool)
- if (dug)
- user << "\red This area has already been dug"
- return
-
var/turf/T = user.loc
if (!(istype(T)))
return
- user << "\red You start digging."
- playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1)
+ if (dug)
+ if(!GetBelow(src))
+ return
+ user << " You start digging deeper. "
+ playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
+ if(!do_after(user,60))
+ return
+ playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
+ if(prob(33))
+ switch(dug)
+ if(1)
+ user << " You've made a little progress. "
+ if(2)
+ user << " You notice the hole is a little deeper. "
+ if(3)
+ user << " You think you're about halfway there. "
+ if(4)
+ user << " You finish up lifting another pile of dirt. "
+ if(5)
+ user << " You dig a bit deeper. You're definitely halfway there now. "
+ if(6)
+ user << " You still have a ways to go. "
+ if(7)
+ user << " The hole looks pretty deep now. "
+ if(8)
+ user << " The ground is starting to feel a lot looser. "
+ if(9)
+ user << " You can almost see the other side. "
+ if(10)
+ user << " Just a little deeper. . . "
+ else
+ user << " You penetrate the virgin earth! "
+ else
+ if(dug <= 10)
+ user << " You dig a little deeper. "
+ else
+ user << " You dug a big hole. "
- if(!do_after(user,40)) return
+ gets_dug()
+ return
- user << "\blue You dug a hole."
+ user << " You start digging. "
+ playsound(user.loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
+
+ if(!do_after(user,40))
+ return
+
+ user << " You dug a hole. "
gets_dug()
else if(istype(W,/obj/item/weapon/storage/bag/ore))
@@ -534,45 +667,34 @@
/turf/simulated/floor/asteroid/proc/gets_dug()
- if(dug)
- return
-
- for(var/i=0;i<(rand(3)+2);i++)
- new/obj/item/weapon/ore/glass(src)
-
- dug = 1
icon_state = "asteroid_dug"
- return
-/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors)
+ new/obj/item/weapon/ore/glass(src)
- overlays.Cut()
+ if(prob(50))
+ var/list/ore = list(/obj/item/weapon/ore/coal = 8,
+ /obj/item/weapon/ore/iron = 6,
+ /obj/item/weapon/ore/phoron = 3,
+ /obj/item/weapon/ore/silver = 3,
+ /obj/item/weapon/ore/gold = 2,
+ /obj/item/weapon/ore/osmium = 3,
+ /obj/item/weapon/ore/hydrogen = 2,
+ /obj/item/weapon/ore/uranium = 1,
+ /obj/random/junk = 1,
+ /obj/item/weapon/ore/diamond = 0.5,
+ /obj/random/powercell = 0.2,
+ /obj/random/coin = 0.2,
+ /obj/random/loot = 0.1,
+ /obj/random/action_figure = 0.1)
+ var/ore_path = pickweight(ore)
+ if(ore)
+ new ore_path(src)
+ user << "You unearth something amidst the sand! "
- var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST)
- for(var/direction in step_overlays)
-
- if(istype(get_step(src, step_overlays[direction]), /turf/space))
- overlays += image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = step_overlays[direction])
-
- if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral))
- overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[direction])
-
- if (!overlay_cache)
- overlay_cache = list()
- overlay_cache.len = 10
- for (var/i = 1; i <= overlay_cache.len; i++)
- overlay_cache[i] = image('icons/turf/flooring/decals.dmi', "asteroid[i - 1]")
-
- if(overlay_detail)
- overlays += overlay_cache[overlay_detail + 1]
-
- if(update_neighbors)
- var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST)
- for(var/direction in all_step_directions)
- var/turf/simulated/floor/asteroid/A
- if(istype(get_step(src, direction), /turf/simulated/floor/asteroid))
- A = get_step(src, direction)
- A.updateMineralOverlays()
+ if(dug <= 10)
+ dug += 1
+ else
+ ChangeTurf(/turf/space)
/turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj)
..()
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
new file mode 100644
index 00000000000..b63e8b29606
--- /dev/null
+++ b/code/modules/mining/minebot.dm
@@ -0,0 +1,243 @@
+/mob/living/silicon/robot/drone/mining
+ icon_state = "miningdrone"
+ law_type = /datum/ai_laws/mining_drone
+ module_type = /obj/item/weapon/robot_module/mining_drone/basic
+ holder_type = /obj/item/weapon/holder/drone/mining
+ maxHealth = 45
+ health = 45
+ pass_flags = PASSTABLE
+ req_access = list(access_mining, access_robotics)
+ idcard_type = /obj/item/weapon/card/id/synthetic/minedrone
+ speed = -1
+ range_limit = 0
+ var/health_upgrade
+ var/ranged_upgrade
+ var/melee_upgrade
+ var/drill_upgrade
+
+/mob/living/silicon/robot/drone/mining/New()
+
+ ..()
+
+ verbs += /mob/living/proc/hide
+ remove_language("Robot Talk")
+ add_language("Drone Talk", 1)
+
+ //They are unable to be upgraded, so let's give them a bit of a better battery.
+ cell.maxcharge = 10000
+ cell.charge = 10000
+
+ // NO BRAIN.
+ mmi = null
+
+ //We need to screw with their HP a bit. They have around one fifth as much HP as a full borg.
+ for(var/V in components) if(V != "power cell")
+ var/datum/robot_component/C = components[V]
+ C.max_damage = 15
+
+ verbs -= /mob/living/silicon/robot/verb/Namepick
+ verbs -= /mob/living/silicon/robot/drone/verb/set_mail_tag
+ updateicon()
+ density = 0
+
+/mob/living/silicon/robot/drone/mining/updatename()
+ real_name = "NT-I-[rand(100,999)]"
+ name = real_name
+
+/mob/living/silicon/robot/drone/mining/init()
+ aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src)
+ additional_law_channels["Drone"] = ":d"
+ if(!laws) laws = new law_type
+ if(!module) module = new module_type(src)
+
+ flavor_text = "It's a tiny little mining drone. The casing is stamped with an corporate logo and the subscript: '[company_name] Automated Pickaxe!'"
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
+
+/mob/living/silicon/robot/drone/mining/welcome_drone()
+ src << "You are a mining drone, a tiny-brained robotic industrial machine ."
+ src << "You have little individual will, some personality, and no drives or urges other than your laws and the art of mining."
+ src << "Remember, you DO NOT take orders from the AI. "
+ src << "Use say ;Hello to talk to other drones and say Hello to speak silently to your nearby fellows."
+
+/mob/living/silicon/robot/drone/mining/attackby(var/obj/item/weapon/W, var/mob/user)
+
+ if(istype(W, /obj/item/borg/upgrade/))
+ user << "\The [src] is not compatible with \the [W]. "
+ return
+
+ else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
+
+ if(stat == 2)
+
+ var/choice = input("Look at your icon - is this what you want?") in list("Reboot","Recycle")
+ if(choice=="Reboot")
+
+ if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
+ user << "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one. "
+ return
+
+ if(!allowed(usr))
+ user << "Access denied. "
+ return
+
+ user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to reboot it. ", ">You swipe your ID card through \the [src], attempting to reboot it. ")
+ request_player()
+ return
+
+ else
+ var/obj/item/weapon/card/id/ID = W
+ if(!allowed(usr))
+ user << "Access denied. "
+ return
+
+ user.visible_message("\The [user] swipes \his ID card through \the [src], recycling it into points. ", ">You swipe your ID card through \the [src], recycling it into points. ")
+ ID.mining_points += 800
+ if(health_upgrade)
+ ID.mining_points += 600
+ health_upgrade = 0
+ if(ranged_upgrade)
+ ID.mining_points += 600
+ ranged_upgrade = 0
+ if(melee_upgrade)
+ ID.mining_points += 400
+ melee_upgrade = 0
+ if(drill_upgrade)
+ ID.mining_points += 2000
+ drill_upgrade = 0
+ qdel(src)
+ return
+
+ else
+ user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to shut it down. ", "You swipe your ID card through \the [src], attempting to shut it down. ")
+
+ if(emagged)
+ return
+
+ if(allowed(usr))
+ shut_down()
+ else
+ user << "Access denied. "
+
+ return
+
+ ..()
+
+/mob/living/silicon/robot/drone/mining/verb/print_report()
+ set name = "Print Message"
+ set desc = "Print out a status report of your own choosing."
+ set category = "Robot Commands"
+
+ var/input = sanitize(input(usr, "Please enter a message to print out. NOTE: BBCode does not work.", "Print readout", "") as message|null)
+ if (!input)
+ usr << "Cancelled. "
+ return
+
+ var/customname = input(usr, "Pick a title for the report", "Title") as text|null
+ if (!customname)
+ usr << "Cancelled. "
+ return
+
+ var/status_report
+ switch(src.health)
+ if((maxHealth - (maxHealth/3)) to maxHealth)
+ status_report = "All systems nominal."
+ if((maxHealth/3) to maxHealth/2)
+ status_report = "Systems compromised."
+ if(0 to (maxHealth/3))
+ status_report = "Systems failing."
+ else
+ status_report = "System status unknown."
+
+ // Create the reply message
+ usr << "You begin printing the message. "
+ if(do_after(src,20))
+ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
+ P.name = "mining report - [customname]"
+ P.info = {"
+ NanoTrasen Mining Drone Report
+ FOR YOUR EYES ONLY
+ [input]
+ [status_report]
+ "}
+ P.update_icon()
+ visible_message("\icon[src] The [usr] pings, \"[P.name] ready for review\", and happily disgorges a small printout. ", 2)
+ playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
+
+/**********************Minebot Upgrades**********************/
+
+/obj/item/device/mine_bot_ugprade
+ name = "minebot drill upgrade"
+ desc = "A minebot upgrade."
+ icon_state = "mainboard"
+ icon = 'icons/obj/module.dmi'
+
+/obj/item/device/mine_bot_ugprade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity)
+ if(!istype(M) || !proximity)
+ return
+ upgrade_bot(M, user)
+
+/obj/item/device/mine_bot_ugprade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
+ if(M.melee_upgrade)
+ user << "[src] already has a drill upgrade installed!"
+ return
+ M.modtype = initial(M.modtype)
+ M.uneq_all()
+ qdel(M.module)
+ M.module = null
+ if(M.ranged_upgrade)
+ new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M)
+ else
+ new /obj/item/weapon/robot_module/mining_drone/drill(M)
+ M.module.rebuild()
+ M.recalculate_synth_capacities()
+ qdel(src)
+
+/obj/item/device/mine_bot_ugprade/health
+ name = "minebot chassis upgrade"
+
+/obj/item/device/mine_bot_ugprade/health/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
+ if(M.health_upgrade)
+ user << "[src] already has a reinforced chassis!"
+ return
+ M.maxHealth = 100
+ M.health += 55
+ for(var/V in M.components) if(V != "power cell")
+ var/datum/robot_component/C = M.components[V]
+ C.max_damage = 30
+ M.health_upgrade = 1
+ qdel(src)
+
+/obj/item/device/mine_bot_ugprade/plasma
+ name = "minebot plasma cutter upgrade"
+
+/obj/item/device/mine_bot_ugprade/plasma/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
+ if(M.ranged_upgrade)
+ user << "[src] already has a plasma cutter upgrade installed!"
+ return
+ M.modtype = initial(M.modtype)
+ M.uneq_all()
+ qdel(M.module)
+ M.module = null
+ if(M.melee_upgrade)
+ new /obj/item/weapon/robot_module/mining_drone/drillandplasmacutter(M)
+ else
+ new /obj/item/weapon/robot_module/mining_drone/plasmacutter(M)
+ M.ranged_upgrade = 1
+ M.module.rebuild()
+ M.recalculate_synth_capacities()
+ qdel(src)
+
+/obj/item/device/mine_bot_ugprade/thermal
+ name = "minebot thermal drill upgrade"
+
+/obj/item/device/mine_bot_ugprade/thermal/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user)
+ if(M.drill_upgrade)
+ user << "[src] already has a thermal drill!"
+ return
+ if(M.emagged == 1)
+ return 0
+
+ M.emagged = 1
+ M.fakeemagged = 1
+ M.drill_upgrade = 1
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm
index bc0ce899ea4..5e907f5a1ab 100644
--- a/code/modules/mining/mineral_effect.dm
+++ b/code/modules/mining/mineral_effect.dm
@@ -8,8 +8,8 @@
var/ore_key
var/image/scanner_image
-/obj/effect/mineral/New(var/newloc, var/ore/M)
- ..(newloc)
+/obj/effect/mineral/Initialize(mapload, var/ore/M)
+ . = ..()
name = "[M.display_name] deposit"
ore_key = M.name
icon_state = "rock_[ore_key]"
@@ -23,4 +23,4 @@
scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state))
else
world << "No ore data for [src]!"
- return scanner_image
\ No newline at end of file
+ return scanner_image
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 99dc1956b12..df9da302e83 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -20,20 +20,15 @@
var/chosen = DEFAULT_WALL_MATERIAL //which material will be used to make coins
var/coinsToProduce = 10
-
-/obj/machinery/mineral/mint/New()
- ..()
- spawn( 5 )
- for (var/dir in cardinal)
- src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
- if(src.input) break
- for (var/dir in cardinal)
- src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
- if(src.output) break
- processing_objects.Add(src)
- return
- return
-
+/obj/machinery/mineral/mint/Initialize()
+ . = ..()
+ for (var/dir in cardinal)
+ src.input = locate(/obj/machinery/mineral/input, get_step(src, dir))
+ if(src.input) break
+ for (var/dir in cardinal)
+ src.output = locate(/obj/machinery/mineral/output, get_step(src, dir))
+ if(src.output) break
+ processing_objects.Add(src)
/obj/machinery/mineral/mint/process()
if ( src.input)
@@ -209,4 +204,4 @@
processing = 0;
coinsToProduce = temp_coins
src.updateUsrDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index 41118552e3d..5402e922a9e 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -1,7 +1,7 @@
/obj/item/weapon/ore
name = "rock"
icon = 'icons/obj/mining.dmi'
- icon_state = "ore2"
+ icon_state = "ore1"
w_class = 2
var/datum/geosample/geologic_data
var/material
@@ -10,25 +10,25 @@
name = "pitchblende"
icon_state = "ore_uranium"
origin_tech = list(TECH_MATERIAL = 5)
- material = "uranium"
+ material = ORE_URANIUM
/obj/item/weapon/ore/iron
name = "hematite"
icon_state = "ore_iron"
origin_tech = list(TECH_MATERIAL = 1)
- material = "iron"
+ material = ORE_IRON
/obj/item/weapon/ore/coal
name = "raw carbon"
icon_state = "ore_coal"
origin_tech = list(TECH_MATERIAL = 1)
- material = "coal"
+ material = ORE_COAL
/obj/item/weapon/ore/glass
name = "sand"
icon_state = "ore_glass"
origin_tech = list(TECH_MATERIAL = 1)
- material = "sand"
+ material = ORE_SAND
slot_flags = SLOT_HOLSTER
// POCKET SAND!
@@ -46,36 +46,36 @@
/obj/item/weapon/ore/phoron
name = "phoron crystals"
icon_state = "ore_phoron"
- origin_tech = list(TECH_MATERIAL = 2)
- material = "phoron"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2)
+ material = ORE_PHORON
/obj/item/weapon/ore/silver
name = "native silver ore"
icon_state = "ore_silver"
origin_tech = list(TECH_MATERIAL = 3)
- material = "silver"
+ material = ORE_SILVER
/obj/item/weapon/ore/gold
name = "native gold ore"
icon_state = "ore_gold"
origin_tech = list(TECH_MATERIAL = 4)
- material = "gold"
+ material = ORE_GOLD
/obj/item/weapon/ore/diamond
name = "diamonds"
icon_state = "ore_diamond"
origin_tech = list(TECH_MATERIAL = 6)
- material = "diamond"
+ material = ORE_DIAMOND
/obj/item/weapon/ore/osmium
name = "raw platinum"
icon_state = "ore_platinum"
- material = "platinum"
+ material = ORE_PLATINUM
/obj/item/weapon/ore/hydrogen
name = "raw hydrogen"
icon_state = "ore_hydrogen"
- material = "mhydrogen"
+ material = ORE_HYDROGEN
/obj/item/weapon/ore/slag
name = "Slag"
@@ -86,6 +86,8 @@
/obj/item/weapon/ore/New()
pixel_x = rand(0,16)-8
pixel_y = rand(0,8)-8
+ if(icon_state == "ore1")
+ icon_state = "ore[pick(1,2,3)]"
/obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/device/core_sampler))
diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm
index f2f017e6ea1..84ae5a2f21e 100644
--- a/code/modules/mining/ore_datum.dm
+++ b/code/modules/mining/ore_datum.dm
@@ -17,6 +17,7 @@ var/global/list/ore_data = list()
"million" = 999
)
var/xarch_source_mineral = "iron"
+ var/worth = 0 // Arbitrary point value for the ore redemption console
/ore/New()
. = ..()
@@ -28,7 +29,7 @@ var/global/list/ore_data = list()
display_name = "pitchblende"
smelts_to = "uranium"
result_amount = 5
- spread_chance = 10
+ spread_chance = 15
ore = /obj/item/weapon/ore/uranium
scan_icon = "mineral_uncommon"
xarch_ages = list(
@@ -36,6 +37,7 @@ var/global/list/ore_data = list()
"million" = 704
)
xarch_source_mineral = "potassium"
+ worth = 25
/ore/hematite
name = ORE_IRON
@@ -43,9 +45,10 @@ var/global/list/ore_data = list()
smelts_to = "iron"
alloy = 1
result_amount = 5
- spread_chance = 25
+ spread_chance = 30
ore = /obj/item/weapon/ore/iron
scan_icon = "mineral_common"
+ worth = 4
/ore/coal
name = ORE_COAL
@@ -53,21 +56,22 @@ var/global/list/ore_data = list()
smelts_to = "plastic"
alloy = 1
result_amount = 5
- spread_chance = 25
+ spread_chance = 35
ore = /obj/item/weapon/ore/coal
scan_icon = "mineral_common"
+ worth = 2
/ore/glass
name = ORE_SAND
display_name = "sand"
smelts_to = "glass"
compresses_to = "sandstone"
+ worth = 1
/ore/phoron
name = ORE_PHORON
display_name = "phoron crystals"
compresses_to = "phoron"
- //smelts_to = something that explodes violently on the conveyor, huhuhuhu
result_amount = 5
spread_chance = 25
ore = /obj/item/weapon/ore/phoron
@@ -79,15 +83,17 @@ var/global/list/ore_data = list()
"billion_lower" = 10
)
xarch_source_mineral = "phoron"
+ worth = 8
/ore/silver
name = ORE_SILVER
display_name = "native silver"
smelts_to = "silver"
result_amount = 5
- spread_chance = 10
+ spread_chance = 15
ore = /obj/item/weapon/ore/silver
scan_icon = "mineral_uncommon"
+ worth = 20
/ore/gold
smelts_to = ORE_GOLD
@@ -103,16 +109,18 @@ var/global/list/ore_data = list()
"billion" = 4,
"billion_lower" = 3
)
+ worth = 30
/ore/diamond
name = ORE_DIAMOND
display_name = "diamond"
compresses_to = "diamond"
result_amount = 5
- spread_chance = 10
+ spread_chance = 5
ore = /obj/item/weapon/ore/diamond
scan_icon = "mineral_rare"
xarch_source_mineral = "nitrogen"
+ worth = 50
/ore/platinum
name = ORE_PLATINUM
@@ -121,9 +129,10 @@ var/global/list/ore_data = list()
compresses_to = "osmium"
alloy = 1
result_amount = 5
- spread_chance = 10
+ spread_chance = 15
ore = /obj/item/weapon/ore/osmium
scan_icon = "mineral_rare"
+ worth = 15
/ore/hydrogen
name = ORE_HYDROGEN
@@ -131,3 +140,4 @@ var/global/list/ore_data = list()
smelts_to = "tritium"
compresses_to = "mhydrogen"
scan_icon = "mineral_rare"
+ worth = 30
diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm
index ce365bbde27..4f2eecfe475 100644
--- a/code/modules/mining/satchel_ore_boxdm.dm
+++ b/code/modules/mining/satchel_ore_boxdm.dm
@@ -19,7 +19,10 @@
S.hide_from(usr)
for(var/obj/item/weapon/ore/O in S.contents)
S.remove_from_storage(O, src) //This will move the item to this item's contents
- user << "\blue You empty the satchel into the box."
+
+ CHECK_TICK
+
+ user << span("notice", "You empty the satchel into the box.")
update_ore_count()
@@ -97,5 +100,7 @@
for (var/obj/item/weapon/ore/O in contents)
O.loc = src.loc
O.ex_act(severity++)
+
+ CHECK_TICK
qdel(src)
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 0c43d6b507b..eb420707223 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -467,7 +467,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "Spawning as a mouse is currently disabled. "
return
- if(ticker.current_state < GAME_STATE_PLAYING)
+ if(!ROUND_IS_STARTED)
src << "You can not spawn as a mouse before round start! "
return
@@ -730,6 +730,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
for(var/image/I in client.images)
if(I.icon_state == icon)
iconRemoved = 1
+ client.images -= I
qdel(I)
if(!iconRemoved)
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index da17ad95122..8544617ca05 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -18,9 +18,8 @@
flick(anim, animation)
if(do_gibs) gibs(loc, viruses, dna)
- spawn(15)
- if(animation) qdel(animation)
- if(src) qdel(src)
+ QDEL_IN(animation, 15)
+ QDEL_IN(src, 15)
//This is the proc for turning a mob into ash. Mostly a copy of gib code (above).
//Originally created for wizard disintegrate. I've removed the virus code since it's irrelevant here.
@@ -45,10 +44,9 @@
new remains(loc)
dead_mob_list -= src
- spawn(15)
- if(animation) qdel(animation)
- if(src) qdel(src)
+ QDEL_IN(animation, 15)
+ QDEL_IN(src, 15)
/mob/proc/death(gibbed,deathmessage="seizes up and falls limp...")
@@ -95,8 +93,8 @@
updateicon()
- if(ticker && ticker.mode)
- ticker.mode.check_win()
+ if(SSticker.mode)
+ SSticker.mode.check_win()
return 1
diff --git a/code/modules/mob/dview.dm b/code/modules/mob/dview.dm
index febf05d34b8..d65aa461a57 100644
--- a/code/modules/mob/dview.dm
+++ b/code/modules/mob/dview.dm
@@ -20,3 +20,13 @@ var/mob/dview/dview_mob = new
dead_mob_list -= src
else
living_mob_list -= src
+
+/mob/dview/Destroy(force = FALSE)
+ crash_with("Some fuck [force ? "force-" : ""]qdeleted the dview mob.")
+ if (!force)
+ return QDEL_HINT_LETMELIVE
+
+ world.log << "Dview was force-qdeleted, this should never happen!"
+
+ dview_mob = new
+ return QDEL_HINT_QUEUE
diff --git a/code/modules/mob/freelook/ai/cameranet.dm b/code/modules/mob/freelook/ai/cameranet.dm
index f29749b38c1..06a6c78bd46 100644
--- a/code/modules/mob/freelook/ai/cameranet.dm
+++ b/code/modules/mob/freelook/ai/cameranet.dm
@@ -10,7 +10,7 @@
/datum/visualnet/camera/proc/process_sort()
if(cameras_unsorted)
- cameras = dd_sortedObjectList(cameras)
+ sortTim(cameras, /proc/cmp_camera, FALSE)
cameras_unsorted = 0
// Removes a camera from a chunk.
diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm
index 59cd795f363..90c6b2dd455 100644
--- a/code/modules/mob/freelook/ai/eye.dm
+++ b/code/modules/mob/freelook/ai/eye.dm
@@ -42,7 +42,7 @@
/mob/living/silicon/ai/proc/create_eyeobj(var/newloc)
if(eyeobj) destroy_eyeobj()
if(!newloc) newloc = src.loc
- eyeobj = getFromPool(/mob/eye/aiEye, newloc)
+ eyeobj = new /mob/eye/aiEye(newloc)
eyeobj.owner = src
eyeobj.name = "[src.name] (AI Eye)" // Give it a name
if(client) client.eye = eyeobj
@@ -58,7 +58,7 @@
/mob/living/silicon/ai/Destroy()
destroy_eyeobj()
- ..()
+ return ..()
/atom/proc/move_camera_by_click()
if(istype(usr, /mob/living/silicon/ai))
diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm
index f4fea0aa58f..c150faddef1 100644
--- a/code/modules/mob/freelook/ai/update_triggers.dm
+++ b/code/modules/mob/freelook/ai/update_triggers.dm
@@ -18,19 +18,17 @@
cameranet.updatePortableCamera(src.camera)
updating = 0
-/mob/living/silicon/AI/Move()
+/mob/living/silicon/ai/Move()
var/oldLoc = src.loc
. = ..()
if(.)
if(provides_camera_vision())
- if(!updating)
- updating = 1
- spawn(BORG_CAMERA_BUFFER)
- if(oldLoc != src.loc)
- cameranet.updateVisibility(oldLoc, 0)
- cameranet.updateVisibility(loc, 0)
- updating = 0
+ addtimer(CALLBACK(src, .proc/camera_post_move, oldLoc), BORG_CAMERA_BUFFER, TIMER_UNIQUE)
+/mob/living/silicon/ai/proc/camera_post_move(oldLoc)
+ if(oldLoc != src.loc)
+ cameranet.updateVisibility(oldLoc, 0)
+ cameranet.updateVisibility(loc, 0)
#undef BORG_CAMERA_BUFFER
// CAMERA
@@ -46,10 +44,10 @@
src.set_light(0)
cameranet.removeCamera(src)
-/obj/machinery/camera/New()
- ..()
+/obj/machinery/camera/Initialize()
+ . = ..()
//Camera must be added to global list of all cameras no matter what...
- if(cameranet.cameras_unsorted || !ticker)
+ if(cameranet.cameras_unsorted)
cameranet.cameras += src
cameranet.cameras_unsorted = 1
else
@@ -59,7 +57,7 @@
/obj/machinery/camera/Destroy()
clear_all_networks()
cameranet.cameras -= src
- ..()
+ return ..()
// Mobs
/mob/living/silicon/ai/rejuvenate()
diff --git a/code/modules/mob/freelook/chunk.dm b/code/modules/mob/freelook/chunk.dm
index f5740603336..51b8379abbf 100644
--- a/code/modules/mob/freelook/chunk.dm
+++ b/code/modules/mob/freelook/chunk.dm
@@ -71,8 +71,7 @@
// The actual updating.
/datum/chunk/proc/update()
-
- set background = 1
+ set waitfor = FALSE
var/list/newVisibleTurfs = new()
acquireVisibleTurfs(newVisibleTurfs)
@@ -128,7 +127,9 @@
src.y = y
src.z = z
- for(var/turf/t in range(10, locate(x + 8, y + 8, z)))
+ var/turf/center = locate(x + 8, y + 8, z)
+
+ for(var/turf/t in RANGE_TURFS(10, center))
if(t.x >= x && t.y >= y && t.x < x + 16 && t.y < y + 16)
turfs[t] = t
diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm
index 356b03e0f9b..e1accae65f7 100644
--- a/code/modules/mob/freelook/eye.dm
+++ b/code/modules/mob/freelook/eye.dm
@@ -32,14 +32,14 @@
updateallghostimages()
..()
-mob/eye/Destroy()
+/mob/eye/Destroy()
if (ghostimage)
ghost_darkness_images -= ghostimage
ghost_sightless_images -= ghostimage
qdel(ghostimage)
ghostimage = null
updateallghostimages()
- ..()
+ return ..()
/mob/eye/Move(n, direct)
if(owner == src)
diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm
index 11423671640..1dd520e7f1d 100644
--- a/code/modules/mob/freelook/mask/update_triggers.dm
+++ b/code/modules/mob/freelook/mask/update_triggers.dm
@@ -25,7 +25,7 @@
/mob/living/Destroy()
cultnet.updateVisibility(src, 0)
- ..()
+ return ..()
/mob/living/rejuvenate()
var/was_dead = stat == DEAD
diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm
index c04fdd26f15..3c22e0da148 100644
--- a/code/modules/mob/freelook/update_triggers.dm
+++ b/code/modules/mob/freelook/update_triggers.dm
@@ -3,9 +3,8 @@
// TURFS
/proc/updateVisibility(atom/A, var/opacity_check = 1)
- if(ticker)
- for(var/datum/visualnet/VN in visual_nets)
- VN.updateVisibility(A, opacity_check)
+ for(var/datum/visualnet/VN in visual_nets)
+ VN.updateVisibility(A, opacity_check)
/turf
var/list/image/obfuscations = new()
@@ -17,8 +16,8 @@
updateVisibility(src)
return ..()
-/turf/simulated/New()
- ..()
+/turf/simulated/Initialize()
+ . = ..()
updateVisibility(src)
@@ -46,4 +45,4 @@
// Glass door glass = 1
// don't check then?
if(!glass)
- updateVisibility(src, 0)
\ No newline at end of file
+ updateVisibility(src, 0)
diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm
index 38cb5bb3d2a..6d208834585 100644
--- a/code/modules/mob/freelook/visualnet.dm
+++ b/code/modules/mob/freelook/visualnet.dm
@@ -14,7 +14,7 @@
/datum/visualnet/Destroy()
visual_nets -= src
- ..()
+ return ..()
// Checks if a chunk has been Generated in x, y, z.
/datum/visualnet/proc/chunkGenerated(x, y, z)
@@ -64,7 +64,7 @@
/datum/visualnet/proc/updateVisibility(atom/A, var/opacity_check = 1)
- if(!ticker || (opacity_check && !A.opacity))
+ if((opacity_check && !A.opacity))
return
majorChunkChange(A, 2)
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 9fefd3572d2..4138166144c 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -14,25 +14,38 @@ var/list/holder_mob_icon_cache = list()
var/name_dead
var/isalive
- var/last_loc_general//This stores a general location of the object. Ie, a container or a mob
- var/last_loc_specific//This stores specific extra information about the location, pocket, hand, worn on head, etc. Only relevant to mobs
+ var/static/list/unsafe_containers
+
+ var/last_loc_general //This stores a general location of the object. Ie, a container or a mob
+ var/last_loc_specific //This stores specific extra information about the location, pocket, hand, worn on head, etc. Only relevant to mobs
+
+/obj/item/weapon/holder/proc/setup_unsafe_list()
+ unsafe_containers = typecacheof(list(
+ /obj/item/weapon/storage,
+ /obj/item/weapon/reagent_containers,
+ /obj/structure/closet/crate,
+ /obj/machinery/appliance,
+ /obj/machinery/microwave
+ ))
+
+/obj/item/weapon/holder/Initialize()
+ . = ..()
+ if (!unsafe_containers)
+ setup_unsafe_list()
-/obj/item/weapon/holder/New()
- tag = rand(0,9999)
if (!item_state)
item_state = icon_state
flags_inv |= ALWAYSDRAW
- ..()
- processing_objects.Add(src)
+ START_PROCESSING(SSprocessing, src)
/obj/item/weapon/holder/Destroy()
reagents = null
- processing_objects.Remove(src)
+ STOP_PROCESSING(SSprocessing, src)
if (contained)
release_mob()
- ..()
+ return ..()
/obj/item/weapon/holder/examine(mob/user)
if (contained)
@@ -66,7 +79,6 @@ var/list/holder_mob_icon_cache = list()
release_mob()
-
return
if (isalive && contained.stat == DEAD)
held_death(1)//If we get here, it means the mob died sometime after we picked it up. We pass in 1 so that we can play its deathmessage
@@ -74,22 +86,8 @@ var/list/holder_mob_icon_cache = list()
//This function checks if the current location is safe to release inside
//it returns 1 if the creature will bug out when released
-/obj/item/weapon/holder/proc/is_unsafe_container(var/obj/place)
- if (istype(place, /turf))
- return 0
- else if (istype(place, /obj/item/weapon/storage))
- return 1
- else if (istype(place, /obj/item/weapon/reagent_containers))
- return 1
- else if (istype(place, /obj/structure/closet/crate))
- return 1
- else if (istype(place, /obj/machinery/appliance))
- return 1
- else if (istype(place, /obj/machinery/microwave))
- return 1
- else
- return 0
-
+/obj/item/weapon/holder/proc/is_unsafe_container(atom/place)
+ return is_type_in_typecache(place, unsafe_containers)
//Releases all mobs inside the holder, then deletes it.
//is_unsafe_container should be checked before calling this
@@ -103,7 +101,6 @@ var/list/holder_mob_icon_cache = list()
M.reset_view()
M.Released()
-
contained = null
var/mob/L = get_holding_mob()
if (L)
@@ -111,7 +108,6 @@ var/list/holder_mob_icon_cache = list()
qdel(src)
-
//Similar to above function, but will not deposit things in any container, only directly on a turf.
//Can be called safely anywhere. Notably on holders held or worn on a mob
/obj/item/weapon/holder/proc/release_to_floor()
@@ -139,18 +135,18 @@ var/list/holder_mob_icon_cache = list()
//once with it on the floor, and then once in the container
//This conditional allows us to ignore that first one. Handling of mobs dropped on the floor is done in process
if (istype(loc, /turf))
- spawn(3)
- //Repeat this check
- //If we're still on the turf a few frames later, then we have actually been dropped or thrown
- //Release the mob accordingly
- if (istype(loc, /turf))
- release_mob()
-
+ //Repeat this check
+ //If we're still on the turf a few frames later, then we have actually been dropped or thrown
+ //Release the mob accordingly
+ addtimer(CALLBACK(src, .proc/post_drop), 3)
return
if (istype(loc, /obj/item/weapon/storage)) //The second drop reads the container its placed into as the location
update_location()
+/obj/item/weapon/holder/proc/post_drop()
+ if (isturf(loc))
+ release_mob()
/obj/item/weapon/holder/equipped(var/mob/user, var/slot)
..()
@@ -163,10 +159,6 @@ var/list/holder_mob_icon_cache = list()
report_onmob_location(1, slotnumber, contained)
-
-
-
-
/obj/item/weapon/holder/attack_self(mob/M as mob)
if (contained && !(contained.stat & DEAD))
@@ -174,11 +166,11 @@ var/list/holder_mob_icon_cache = list()
var/mob/living/carbon/human/H = M
switch(H.a_intent)
if(I_HELP)
- H.visible_message("\blue [H] pets [contained]")
+ H.visible_message("[H] pets [contained]. ")
if(I_HURT)
contained.adjustBruteLoss(3)
- H.visible_message("\red [H] crushes [contained]")
+ H.visible_message("[H] crushes [contained]. ")
else
M << "[contained] is dead."
@@ -209,7 +201,7 @@ var/list/holder_mob_icon_cache = list()
//We have to play it as a visible message on the grabber, because the normal death message played on the dying mob won't show if it's being held
var/mob/M = get_holding_mob()
if (M)
- M.visible_message("\The [contained.name] dies")
+ M.visible_message("[contained.name] dies.")
//update_icon()
@@ -399,6 +391,12 @@ var/list/holder_mob_icon_cache = list()
item_state = "constructiondrone"
w_class = 6//You're not fitting this thing in a backpack
+/obj/item/weapon/holder/drone/mining
+ name = "mining drone"
+ desc = "It's a plucky mining drone."
+ icon_state = "mdrone"
+ item_state = "mdrone"
+
/obj/item/weapon/holder/cat
name = "cat"
desc = "It's a cat. Meow."
@@ -501,7 +499,7 @@ var/list/holder_mob_icon_cache = list()
/obj/item/weapon/holder/lizard
name = "lizard"
desc = "It's a hissy little lizard. Is it related to Unathi?"
- desc_dead = "It doesn't hiss anymore"
+ desc_dead = "It doesn't hiss anymore."
icon_state_dead = "lizard_dead"
icon_state = "lizard"
@@ -547,7 +545,7 @@ var/list/holder_mob_icon_cache = list()
name = "walking mushroom"
name_dead = "mushroom"
desc = "It's a massive mushroom... with legs?"
- desc_dead = "Shame, he was a really fun-guy."
+ desc_dead = "Shame, he was a really fun-guy." // HA
icon_state = "mushroom"
icon_state_dead = "mushroom_dead"
slot_flags = SLOT_HEAD
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index 221b6d0cec8..df3213d2013 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -30,6 +30,11 @@
access_scanner.req_access = req_access.Copy()
access_scanner.req_one_access = req_one_access.Copy()
+/mob/living/bot/Destroy()
+ QDEL_NULL(botcard)
+ QDEL_NULL(access_scanner)
+ return ..()
+
/mob/living/bot/Life()
..()
if(health <= 0)
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index 1508c3056e5..ff15054a394 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -54,8 +54,8 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
janitorial_supplies |= src
- if(radio_controller)
- radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS)
+ if(SSradio)
+ SSradio.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS)
/mob/living/bot/cleanbot/Destroy()
. = ..()
@@ -63,7 +63,8 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
patrol_path = null
target = null
ignorelist = null
- janitorial_supplies -= src
+ QDEL_NULL(listener)
+ global.janitorial_supplies -= src
/mob/living/bot/cleanbot/proc/handle_target()
if(target.clean_marked && target.clean_marked != src)
@@ -158,7 +159,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
if(!found_spot && !target) // No targets in range
if(!patrol_path || !patrol_path.len)
if(!signal_sent || signal_sent > world.time + 200) // Waited enough or didn't send yet
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(beacon_freq)
if(!frequency)
return
@@ -354,6 +355,10 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
cleanbot.closest_dist = dist
cleanbot.next_dest = signal.data["next_patrol"]
+/obj/cleanbot_listener/Destroy()
+ cleanbot = null
+ return ..()
+
/* Assembly */
/obj/item/weapon/bucket_sensor
diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm
index a5fb6255e47..7ca435ab943 100644
--- a/code/modules/mob/living/bot/farmbot.dm
+++ b/code/modules/mob/living/bot/farmbot.dm
@@ -27,12 +27,15 @@
var/atom/target
var/frustration = 0
-/mob/living/bot/farmbot/New()
- ..()
- spawn(5)
- tank = locate() in contents
- if(!tank)
- tank = new /obj/structure/reagent_dispensers/watertank(src)
+/mob/living/bot/farmbot/Initialize()
+ . = ..()
+ tank = locate() in contents
+ if(!tank)
+ tank = new /obj/structure/reagent_dispensers/watertank(src)
+
+/mob/living/bot/farmbot/Destroy()
+ QDEL_NULL(tank)
+ return ..()
/mob/living/bot/farmbot/attack_hand(var/mob/user as mob)
. = ..()
diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm
index 0a061c1225a..48dff771d52 100644
--- a/code/modules/mob/living/bot/floorbot.dm
+++ b/code/modules/mob/living/bot/floorbot.dm
@@ -229,7 +229,7 @@
if(building == 1)
I = new /obj/item/stack/tile/floor(src)
else
- I = getFromPool(/obj/item/stack/rods, src)
+ I = new /obj/item/stack/rods(src)
A.attackby(I, src)
target = null
repairing = 0
diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm
index 37f724e1b15..59e455fb841 100644
--- a/code/modules/mob/living/bot/medbot.dm
+++ b/code/modules/mob/living/bot/medbot.dm
@@ -29,6 +29,11 @@
var/treatment_emag = "toxin"
var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds?
+
+/mob/living/bot/medbot/Destroy()
+ QDEL_NULL(reagent_glass)
+ return ..()
+
/mob/living/bot/medbot/Life()
..()
@@ -111,9 +116,9 @@
update_icons()
/mob/living/bot/medbot/update_icons()
- overlays.Cut()
+ cut_overlays()
if(skin)
- overlays += image('icons/obj/aibots.dmi', "medskin_[skin]")
+ add_overlay("medskin_[skin]")
if(currently_healing)
icon_state = "medibots"
else
@@ -337,11 +342,10 @@
var/skin = null //Same as medbot, set to tox or ointment for the respective kits.
w_class = 3.0
-/obj/item/weapon/firstaid_arm_assembly/New()
- ..()
- spawn(5) // Terrible. TODO: fix
- if(skin)
- overlays += image('icons/obj/aibots.dmi', "kit_skin_[src.skin]")
+/obj/item/weapon/firstaid_arm_assembly/Initialize()
+ . = ..()
+ if(skin)
+ add_overlay("kit_skin_[skin]")
/obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -361,7 +365,7 @@
build_step++
user << "You add the health sensor to [src]. "
name = "First aid/robot arm/health analyzer assembly"
- overlays += image('icons/obj/aibots.dmi', "na_scanner")
+ add_overlay("na_scanner")
return 1
if(1)
diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm
index f7f37c26c71..6500e57964b 100644
--- a/code/modules/mob/living/bot/secbot.dm
+++ b/code/modules/mob/living/bot/secbot.dm
@@ -48,15 +48,19 @@
desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey."
auto_patrol = 1
-/mob/living/bot/secbot/New()
- ..()
+/mob/living/bot/secbot/Initialize()
+ . = ..()
listener = new /obj/secbot_listener(src)
listener.secbot = src
- spawn(5) // Since beepsky is made on the start... this delay is necessary
- if(radio_controller)
- radio_controller.add_object(listener, control_freq, filter = RADIO_SECBOT)
- radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS)
+ if(SSradio)
+ SSradio.add_object(listener, control_freq, filter = RADIO_SECBOT)
+ SSradio.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS)
+
+/mob/living/bot/secbot/Destroy()
+ QDEL_NULL(listener)
+ target = null
+ return ..()
/mob/living/bot/secbot/turn_off()
..()
@@ -315,7 +319,7 @@
var/obj/item/weapon/secbot_assembly/Sa = new /obj/item/weapon/secbot_assembly(Tsec)
Sa.build_step = 1
- Sa.overlays += image('icons/obj/aibots.dmi', "hs_hole")
+ Sa.add_overlay("hs_hole")
Sa.created_name = name
new /obj/item/device/assembly/prox_sensor(Tsec)
new /obj/item/weapon/melee/baton(Tsec)
@@ -405,11 +409,15 @@
/obj/secbot_listener
var/mob/living/bot/secbot/secbot = null
+/obj/secbot_listener/Destroy()
+ secbot = null
+ return ..()
+
/obj/secbot_listener/proc/post_signal(var/freq, var/key, var/value) // send a radio signal with a single data key/value pair
post_signal_multiple(freq, list("[key]" = value))
/obj/secbot_listener/proc/post_signal_multiple(var/freq, var/list/keyval) // send a radio signal with multiple data key/values
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(freq)
if(!frequency)
return
@@ -520,7 +528,7 @@
var/obj/item/weapon/weldingtool/WT = O
if(WT.remove_fuel(0, user))
build_step = 1
- overlays += image('icons/obj/aibots.dmi', "hs_hole")
+ add_overlay("hs_hole")
user << "You weld a hole in \the [src]."
return 1
@@ -528,7 +536,7 @@
user.drop_item()
build_step = 2
user << "You add \the [O] to [src]."
- overlays += image('icons/obj/aibots.dmi', "hs_eye")
+ add_overlay("hs_eye")
name = "helmet/signaler/prox sensor assembly"
qdel(O)
return 1
@@ -538,7 +546,7 @@
build_step = 3
user << "You add \the [O] to [src]."
name = "helmet/signaler/prox sensor/robot arm assembly"
- overlays += image('icons/obj/aibots.dmi', "hs_arm")
+ add_overlay("hs_arm")
qdel(O)
return 1
diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm
index 6b96ce553e2..8b24eeadc41 100644
--- a/code/modules/mob/living/carbon/alien/life.dm
+++ b/code/modules/mob/living/carbon/alien/life.dm
@@ -1,8 +1,6 @@
// Alien larva are quite simple.
/mob/living/carbon/alien/Life()
-
- set invisibility = 0
- set background = 1
+ set background = BACKGROUND_ENABLED
if (transforming) return
if(!loc) return
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index e8967791905..e200bf39435 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -134,7 +134,7 @@
if(brainmob)
qdel(brainmob)
brainmob = null
- ..()
+ return ..()
/obj/item/device/mmi/radio_enabled
name = "radio-enabled man-machine interface"
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index aaf947a13d4..149b4e1634a 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -20,7 +20,7 @@
if(stat!=DEAD) //If not dead.
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
ghostize() //Ghostize checks for key so nothing else is necessary.
- ..()
+ return ..()
say_understands(var/other)//Goddamn is this hackish, but this say code is so odd
if (istype(other, /mob/living/silicon/ai))
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 6bf79bc5734..d30cb5d210e 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -43,7 +43,7 @@
if(brainmob)
qdel(brainmob)
brainmob = null
- ..()
+ return ..()
/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H)
name = "\the [H]'s [initial(src.name)]"
diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm
index d762bffe079..6af5ac9b7e6 100644
--- a/code/modules/mob/living/carbon/breathe.dm
+++ b/code/modules/mob/living/carbon/breathe.dm
@@ -2,7 +2,7 @@
//Start of a breath chain, calls breathe()
/mob/living/carbon/handle_breathing()
- if(air_master.current_cycle%4==2 || failed_last_breath || (health < config.health_threshold_crit)) //First, resolve location and get a breath
+ if(SSair.times_fired%4==2 || failed_last_breath || (health < config.health_threshold_crit)) //First, resolve location and get a breath
breathe()
/mob/living/carbon/proc/breathe()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index f7857ed2899..e69dd9d730f 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -18,7 +18,8 @@
/mob/living/carbon/Destroy()
QDEL_NULL(touching)
- // We don't qdel(bloodstr) because it's the same as qdel(reagents)
+ bloodstr = null
+ QDEL_NULL(dna)
for(var/guts in internal_organs)
qdel(guts)
return ..()
@@ -66,13 +67,13 @@
if(prob(src.getBruteLoss() - 50))
for(var/atom/movable/A in stomach_contents)
A.loc = loc
- stomach_contents.Remove(A)
+ LAZYREMOVE(stomach_contents, A)
src.gib()
/mob/living/carbon/gib()
for(var/mob/M in src)
if(M in src.stomach_contents)
- src.stomach_contents.Remove(M)
+ LAZYREMOVE(src.stomach_contents, M)
M.loc = src.loc
for(var/mob/N in viewers(src, null))
if(N.client)
diff --git a/code/modules/mob/living/carbon/diona_base.dm b/code/modules/mob/living/carbon/diona_base.dm
index 11fd1775d32..08d213fb6a6 100644
--- a/code/modules/mob/living/carbon/diona_base.dm
+++ b/code/modules/mob/living/carbon/diona_base.dm
@@ -513,7 +513,7 @@ var/list/diona_banned_languages = list(
/datum/dionastats/Destroy()
light_organ = null//Nulling out these references to prevent GC errors
nutrient_organ = null
- ..()
+ return ..()
#undef FLASHLIGHT_STRENGTH
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 75731569f93..732c690b117 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -60,9 +60,9 @@
if(!gibbed && species.death_sound)
playsound(loc, species.death_sound, 80, 1, 1)
- if(ticker && ticker.mode)
+ if(SSticker.mode)
sql_report_death(src)
- ticker.mode.check_win()
+ SSticker.mode.check_win()
if(wearing_rig)
wearing_rig.notify_ai("Warning: user death event. Mobility control passed to integrated intelligence system. ")
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 07dfd95a69a..235d7a31cd4 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -88,6 +88,8 @@
bad_internal_organs = null
bad_external_organs = null
+ QDEL_NULL(vessel)
+
QDEL_NULL(DS)
// qdel and null out our equipment.
QDEL_NULL(shoes)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 055de9788f7..f66487eba60 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -75,7 +75,7 @@
-/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
+/mob/living/carbon/human/Allow_Spacemove(var/check_drift = 0)
//Can we act?
if(restrained()) return 0
@@ -89,9 +89,6 @@
for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules)
thrust = module.jets
break
- else if(istype(back,/obj/item/weapon/storage/backpack/typec))
- inertia_dir = 0
- return 1
if(thrust)
if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.allow_thrust(0.01, src)))
@@ -99,9 +96,7 @@
return 1
//If no working jetpack then use the other checks
- if(..())
- return 1
- return 0
+ . = ..()
/mob/living/carbon/human/slip_chance(var/prob_slip = 5)
diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm
index 172927cc474..8fcd1af9d0b 100644
--- a/code/modules/mob/living/carbon/human/human_organs.dm
+++ b/code/modules/mob/living/carbon/human/human_organs.dm
@@ -39,7 +39,7 @@
return
for(var/obj/item/organ/external/E in bad_external_organs)
- if(!E)
+ if(QDELETED(E))
continue
if(!E.need_process())
bad_external_organs -= E
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 978bfa6cd90..79f87923bc4 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -200,12 +200,12 @@
set desc = "Empties the contents of your stomach"
set category = "Abilities"
- if(stomach_contents.len)
+ if(LAZYLEN(stomach_contents))
for(var/mob/M in src)
if(M in stomach_contents)
- stomach_contents.Remove(M)
- M.loc = loc
- src.visible_message("\red [src] hurls out the contents of their stomach! ")
+ LAZYREMOVE(stomach_contents, M)
+ M.forceMove(loc)
+ src.visible_message(span("danger", "\The [src] hurls out the contents of their stomach!"))
return
/mob/living/carbon/human/proc/psychic_whisper(mob/M as mob in oview())
diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm
index 93a7da1fbfa..66bbc924cf7 100644
--- a/code/modules/mob/living/carbon/human/human_species.dm
+++ b/code/modules/mob/living/carbon/human/human_species.dm
@@ -55,8 +55,8 @@
/mob/living/carbon/human/stok
mob_size = 2.6//Roughly the same size as monkey
-/mob/living/carbon/human/neaera/New(var/new_loc)
- ..(new_loc, "Neaera")
+/mob/living/carbon/human/stok/New(var/new_loc)
+ ..(new_loc, "Stok")
/mob/living/carbon/human/bug
mob_size = 2.6//Roughly the same size as monkey
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 08edfe79077..dde94e2a9b6 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -35,7 +35,6 @@
var/global/list/overlays_cache = null
/mob/living/carbon/human/Life()
- set invisibility = 0
set background = BACKGROUND_ENABLED
if (transforming)
@@ -1265,23 +1264,6 @@
if(T.dynamic_lighting && T.get_lumcount() < 0.01) // give a little bit of tolerance for near-dark areas.
playsound_local(src,pick(scarySounds),50, 1, -1)
-/mob/living/carbon/human/handle_stomach()
- spawn(0)
- for(var/mob/living/M in stomach_contents)
- if(M.loc != src)
- stomach_contents.Remove(M)
- continue
- if(iscarbon(M)|| isanimal(M))
- if(M.stat == 2)
- M.death(1)
- stomach_contents.Remove(M)
- qdel(M)
- continue
- if(air_master.current_cycle%3==1)
- if(!(M.status_flags & GODMODE))
- M.adjustBruteLoss(5)
- nutrition += 10
-
/mob/living/carbon/human/proc/handle_changeling()
if(mind && mind.changeling)
mind.changeling.regenerate()
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index dd4c8932cd4..399fa6fe50a 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -146,6 +146,9 @@ Please contact me on #coderbus IRC. ~Carn x
//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING
//Fixed by Nanako
/mob/living/carbon/human/update_icons()
+ if (QDELING(src))
+ return // No point.
+
//so we don't update overlays for lying/standing unless our stance changes again
update_hud() //TODO: remove the need for this
overlays.Cut()
@@ -234,6 +237,9 @@ var/global/list/damage_icon_parts = list()
//Passing in a value of 2 for update_icons will ignore any cached icon, and force a new one to be generated
/mob/living/carbon/human/proc/update_body(var/update_icons=1)
+ if (QDELING(src))
+ return
+
var/husk_color_mod = rgb(96,88,80)
var/hulk_color_mod = rgb(48,224,40)
@@ -355,6 +361,9 @@ var/global/list/damage_icon_parts = list()
//HAIR OVERLAY
/mob/living/carbon/human/proc/update_hair(var/update_icons=1)
+ if (QDELING(src))
+ return
+
//Reset our hair
overlays_standing[HAIR_LAYER] = null
@@ -404,6 +413,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_mutations(var/update_icons=1)
+ if (QDELING(src))
+ return
+
var/fat
if(FAT in mutations)
fat = "fat"
@@ -449,6 +461,9 @@ var/global/list/damage_icon_parts = list()
/* --------------------------------------- */
//For legacy support.
/mob/living/carbon/human/regenerate_icons()
+ if (QDELING(src))
+ return
+
..()
if(transforming) return
@@ -483,6 +498,9 @@ var/global/list/damage_icon_parts = list()
//vvvvvv UPDATE_INV PROCS vvvvvv
/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[UNIFORM_LAYER] = null
if(check_draw_underclothing())
w_uniform.screen_loc = ui_iclothing
@@ -543,6 +561,9 @@ var/global/list/damage_icon_parts = list()
update_icons()
/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[ID_LAYER] = null
if(wear_id)
@@ -566,6 +587,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_gloves(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[GLOVES_LAYER] = null
if(check_draw_gloves())
@@ -607,6 +631,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_glasses(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[GLASSES_LAYER] = null
if(check_draw_glasses())
if(glasses.contained_sprite)
@@ -632,6 +659,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_ears(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[L_EAR_LAYER] = null
overlays_standing[R_EAR_LAYER] = null
@@ -688,6 +718,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_shoes(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[SHOES_LAYER] = null
if(check_draw_shoes())
var/image/standing
@@ -725,6 +758,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_s_store(var/update_icons=1)
+ if (QDELING(src))
+ return
+
if(s_store)
//s_store.auto_adapt_species(src)
var/t_state = s_store.item_state
@@ -737,6 +773,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_head(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[HEAD_LAYER] = null
if(head)
head.screen_loc = ui_head //TODO
@@ -789,6 +828,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_belt(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[BELT_LAYER] = null
if(belt)
@@ -852,6 +894,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1)
+ if (QDELING(src))
+ return
+
if( wear_suit && istype(wear_suit, /obj/item/) )
@@ -904,12 +949,18 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_pockets(var/update_icons=1)
+ if (QDELING(src))
+ return
+
if(l_store) l_store.screen_loc = ui_storage1 //TODO
if(r_store) r_store.screen_loc = ui_storage2 //TODO
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[FACEMASK_LAYER] = null
if(check_draw_mask())
wear_mask.screen_loc = ui_mask //TODO
@@ -943,6 +994,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[BACK_LAYER] = null
if(back)
@@ -1007,6 +1061,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1)
+ if (QDELING(src))
+ return
+
if(handcuffed)
drop_r_hand()
drop_l_hand()
@@ -1026,6 +1083,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1)
+ if (QDELING(src))
+ return
+
if(legcuffed)
var/image/standing
@@ -1048,6 +1108,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[R_HAND_LAYER] = null
if(r_hand)
r_hand.screen_loc = ui_rhand //TODO
@@ -1090,6 +1153,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[L_HAND_LAYER] = null
if(l_hand)
l_hand.screen_loc = ui_lhand //TODO
@@ -1131,6 +1197,9 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
/mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[TAIL_LAYER] = null
if(species.tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
@@ -1142,6 +1211,9 @@ var/global/list/damage_icon_parts = list()
update_icons()
/mob/living/carbon/human/proc/get_tail_icon()
+ if (QDELING(src))
+ return
+
var/icon_key = "[species.race_key][r_skin][g_skin][b_skin][r_hair][g_hair][b_hair]"
var/icon/tail_icon = tail_icon_cache[icon_key]
if(!tail_icon)
@@ -1182,12 +1254,12 @@ var/global/list/damage_icon_parts = list()
tail_overlay = set_tail_state(t_state)
if(tail_overlay)
- spawn(20)
- //check that the animation hasn't changed in the meantime
- if(overlays_standing[TAIL_LAYER] == tail_overlay && tail_overlay.icon_state == t_state)
- animate_tail_stop()
-
+ addtimer(CALLBACK(src, .proc/end_animate_tail_once, tail_overlay), 20)
+/mob/living/carbon/human/proc/end_animate_tail_once(image/tail_overlay)
+ //check that the animation hasn't changed in the meantime
+ if(overlays_standing[TAIL_LAYER] == tail_overlay && tail_overlay.icon_state == "[species.tail]_once")
+ animate_tail_stop()
/mob/living/carbon/human/proc/animate_tail_start()
set_tail_state("[species.tail]_slow[rand(0,9)]")
@@ -1214,6 +1286,9 @@ var/global/list/damage_icon_parts = list()
//Adds a collar overlay above the helmet layer if the suit has one
// Suit needs an identically named sprite in icons/mob/collar.dmi
/mob/living/carbon/human/proc/update_collar(var/update_icons=1)
+ if (QDELING(src))
+ return
+
var/icon/C = new('icons/mob/collar.dmi')
var/image/standing = null
@@ -1227,6 +1302,9 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_fire(var/update_icons=1)
+ if (QDELING(src))
+ return
+
overlays_standing[FIRE_LAYER] = null
if(on_fire)
overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"=FIRE_LAYER)
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index 2609ba01d35..a6a37b04293 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -142,19 +142,24 @@
watching -= eavesdropping
//now mobs
- var/speech_bubble_test = say_test(message)
- var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
- spawn(30) qdel(speech_bubble)
+
+ var/list/listening_clients = list() // The clients we're going to show the speech bubble to.
for(var/mob/M in listening)
- M << speech_bubble
M.hear_say(message, verb, speaking, alt_name, italics, src)
+ if (M.client)
+ listening_clients += M.client
if (eavesdropping.len)
var/new_message = stars(message) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less.
for(var/mob/M in eavesdropping)
- M << speech_bubble
M.hear_say(new_message, verb, speaking, alt_name, italics, src)
+ if (M.client)
+ listening_clients += M.client
+
+ var/speech_bubble_test = say_test(message)
+ var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
+ INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, speech_bubble, listening_clients, 30)
if (watching.len)
var/rendered = "[src.name] [not_heard]. "
diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm
index 7d364d2b8a6..e4f5dc0a84c 100644
--- a/code/modules/mob/living/carbon/metroid/life.dm
+++ b/code/modules/mob/living/carbon/metroid/life.dm
@@ -1,6 +1,5 @@
/mob/living/carbon/slime/Life()
- set invisibility = 0
- set background = 1
+ set background = BACKGROUND_ENABLED
if (src.transforming)
return
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 99ffce0eebb..2494f00f1e8 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -140,8 +140,8 @@
..()
-/mob/living/carbon/slime/Process_Spacemove()
- return 2
+/mob/living/carbon/slime/Allow_Spacemove()
+ return 1
/mob/living/carbon/slime/Stat()
..()
@@ -381,4 +381,4 @@
if(powerlevel > 10)
powerlevel = 10
adjustToxLoss(-10)
- nutrition = max(nutrition, get_max_nutrition())
\ No newline at end of file
+ nutrition = max(nutrition, get_max_nutrition())
diff --git a/code/modules/mob/living/carbon/metroid/update_icons.dm b/code/modules/mob/living/carbon/metroid/update_icons.dm
index 847dcaeb181..0df92c2f467 100644
--- a/code/modules/mob/living/carbon/metroid/update_icons.dm
+++ b/code/modules/mob/living/carbon/metroid/update_icons.dm
@@ -3,7 +3,7 @@
icon_state = "[colour] baby slime dead"
else
icon_state = "[colour] [is_adult ? "adult" : "baby"] slime[Victim ? "" : " eat"]"
- overlays.len = 0
+ cut_overlays()
if (mood)
- overlays += image('icons/mob/slimes.dmi', icon_state = "aslime-[mood]")
- ..()
\ No newline at end of file
+ add_overlay("aslime-[mood]")
+ ..()
diff --git a/code/modules/mob/living/devour.dm b/code/modules/mob/living/devour.dm
index 80b1795af66..6302b16d04e 100644
--- a/code/modules/mob/living/devour.dm
+++ b/code/modules/mob/living/devour.dm
@@ -18,11 +18,6 @@
#define PPM 9//Protein per meat, used for calculating the quantity of protein in an animal
-
-
-
-
-
/mob/living/var/swallowed_mob = 0
//This is set true if there are any mobs in this mob's contents. they will be slowly digested.
//just used as a boolean to minimise extra processing
@@ -85,26 +80,16 @@
else
devour_gradual(victim,mouth_size)
-
-
-
-
-
-
-
-
-
-
/mob/living/proc/swallow(var/mob/living/victim, var/mouth_size)
//This function will move the victim inside the eater's contents.. There they will be digested over time
var/swallow_time = max(3 + (victim.mob_size * victim.mob_size) - mouth_size, 3)
- src.visible_message("[src] starts swallowing [victim]","You start swallowing [victim], this will take approximately [swallow_time] seconds")
+ src.visible_message("[src] starts swallowing \the [victim]!","You start swallowing \the [victim], this will take approximately [swallow_time] seconds.")
var/turf/ourloc = src.loc
var/turf/victimloc = victim.loc
if (do_mob(src, victim, swallow_time*10))
- victim.loc = src
- stomach_contents.Add(victim)
+ victim.forceMove(src)
+ LAZYADD(stomach_contents, victim)
else if (victimloc != victim.loc)
src << "[victim] moved away, you need to keep it still. Try grabbing, stunning or killing it first."
else if (ourloc != src.loc)
@@ -112,9 +97,6 @@
else
src << "Swallowing failed!"//reason unknown, maybe the eater got stunned?
-
-
-
/mob/living/proc/devour_gradual(var/mob/living/victim, var/mouth_size)
//This function will start consuming the victim by taking bites out of them.
//Victim or attacker moving will interrupt it
@@ -180,48 +162,43 @@
//This can also happen if you start devouring something else
break
-
-
//this function gradually digests things inside the mob's contents.
//It is called from life.dm. Any creatures that don't want to digest their contents simply don't call it
/mob/living/proc/handle_stomach()
for(var/mob/living/M in stomach_contents)
if(M.loc != src)//if something somehow escaped the stomach, then we remove it
- stomach_contents.Remove(M)
+ LAZYREMOVE(stomach_contents, M)
continue
if(!M.composition_reagent_quantity)
M.calculate_composition()
var/digestion_power = (((mob_size * mob_size)/10) / (M.mob_size * M.mob_size))
- var/digestion_time = digestion_power * 60//Number of seconds it will take to digest in total
- var/DPPP = 1 / (digestion_time / 2.1)//Digestion percentage per proc
+ var/digestion_time = digestion_power * 60 //Number of seconds it will take to digest in total
+ var/DPPP = 1 / (digestion_time / 2.1) //Digestion percentage per proc
M.adjustCloneLoss(M.maxHealth*DPPP)
//Digestion power is how much of the creature we can digest per minute. Calculated as a tenth of our mob size squared, divided by the victim's mob size squared
//If the resulting value is >1, digestion will take under a minute.
src.ingested.add_reagent(M.composition_reagent, M.composition_reagent_quantity*DPPP)
- if ((M.stat != DEAD) && (M.cloneloss > (M.maxHealth*0.5)))//If we've consumed half of the victim, then it dies
+ if ((M.stat != DEAD) && (M.cloneloss > (M.maxHealth*0.5))) //If we've consumed half of the victim, then it dies
M.death()
M.stat = DEAD //Just in case the death function doesn't set it
- src << "Your stomach feels a little more relaxed as [M] finally stops fighting"
+ src << "Your stomach feels a little more relaxed as \the [M] finally stops fighting."
- if (M.cloneloss >= M.maxHealth)//If we've consumed all of it, then digestion is finished.
- stomach_contents.Remove(M)
- src << "Your stomach feels a little more empty as you finish digesting [M]"
+ if (M.cloneloss >= M.maxHealth) //If we've consumed all of it, then digestion is finished.
+ LAZYREMOVE(stomach_contents, M)
+ src << "Your stomach feels a little more empty as you finish digesting \the [M]."
qdel(M)
-
-
//Helpers
/proc/bitemessage(var/mob/living/victim)
- return pick("You take a bite out of [victim]",
- "You rip a chunk off of [victim]",
- "You consume a piece of [victim]",
- "You feast upon your prey",
- "You chow down on [victim]",
- "You gobble [victim]'s flesh")
-
-
+ return pick(
+ "You take a bite out of \the [victim].",
+ "You rip a chunk off of \the [victim].",
+ "You consume a piece of \the [victim].",
+ "You feast upon your prey.",
+ "You chow down on \the [victim].",
+ "You gobble \the [victim]'s flesh.")
/proc/handle_devour_mess(var/mob/user, var/mob/living/victim, var/datum/reagents/vessel, var/finish = 0)
//The maximum number of blood placements is equal to the mob size of the victim
@@ -286,10 +263,6 @@
B.fluorescent = 0
B.invisibility = 0
-
-
-
-
/proc/turf_hasblood(var/turf/test)
for (var/obj/effect/decal/cleanable/blood/b in test)
return 1
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index cf0eb70d27e..88bcbe64136 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -1,7 +1,9 @@
/mob/living/Life()
- set invisibility = 0
set background = BACKGROUND_ENABLED
+ if (QDELETED(src)) // If they're being deleted, why bother?
+ return
+
..()
if (transforming)
@@ -127,7 +129,7 @@
//this handles hud updates. Calls update_vision() and handle_hud_icons()
/mob/living/proc/handle_regular_hud_updates()
- if(!client) return 0
+ if(!client || QDELETED(src)) return 0
handle_hud_icons()
handle_vision()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 13a3be800fd..4c490e3803e 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -712,8 +712,8 @@ default behaviour is:
//check for nuke disks
if(client && stat != DEAD) //if they are clientless and dead don't bother, the parent will treat them as any other container
- if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear
- var/datum/game_mode/nuclear/G = ticker.mode
+ if(istype(SSticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear
+ var/datum/game_mode/nuclear/G = SSticker.mode
if(G.check_mob(src))
if(x <= TRANSITIONEDGE)
inertia_dir = 4
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 05544a2ab8f..ad3c55627c6 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -47,7 +47,7 @@
var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks.
var/possession_candidate // Can be possessed by ghosts if unplayed.
- var/list/stomach_contents = list()//This is moved here from carbon defines
+ var/list/stomach_contents //This is moved here from carbon defines
var/composition_reagent
var/composition_reagent_quantity
var/mouth_size = 2//how large of a creature it can swallow at once, and how big of a bite it can take out of larger things
@@ -69,4 +69,6 @@
var/move_delay_mod = 0//Added to move delay, used for calculating movement speeds. Provides a centralised value for modifiers to alter
var/total_radiation // DON'T MODIFY THIS DIRECTLY. USE apply_radiation()!
- var/cloaked = 0//Set to 1 by cloaking devices, optimises update_icons
\ No newline at end of file
+ var/cloaked = 0//Set to 1 by cloaking devices, optimises update_icons
+
+ var/tesla_ignore = 0 // If true, mob is not affected by tesla bolts.
diff --git a/code/modules/mob/living/parasite/meme.dm b/code/modules/mob/living/parasite/meme.dm
index 0da039acaaa..9313b994332 100644
--- a/code/modules/mob/living/parasite/meme.dm
+++ b/code/modules/mob/living/parasite/meme.dm
@@ -103,7 +103,7 @@ var/controlling
if(host) src.loc = host.loc
src.stat = 2
..()
- del src
+ qdel(src)
// When a meme speaks, it speaks through its host
/mob/living/parasite/meme/say(message as text)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 98858cef311..ccc84aaf1d3 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -243,13 +243,15 @@ proc/get_radio_key_from_channel(var/channel)
get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj)
+ var/list/hear_clients = list()
+ for(var/mob/M in listening)
+ M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
+ if (M.client)
+ hear_clients += M.client
+
var/speech_bubble_test = say_test(message)
var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
- spawn(30) qdel(speech_bubble)
-
- for(var/mob/M in listening)
- M << speech_bubble
- M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
+ INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, speech_bubble, hear_clients, 30)
for(var/obj/O in listening_obj)
spawn(0)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index ec38053e190..e672cca1a26 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -48,7 +48,7 @@ var/list/ai_verbs_default = list(
anchored = 1 // -- TLE
density = 1
status_flags = CANSTUN|CANPARALYSE|CANPUSH
- shouldnt_see = list(/obj/effect/rune)
+ //shouldnt_see - set in New()
var/list/network = list("Exodus")
var/obj/machinery/camera/camera = null
var/list/connected_robots = list()
@@ -99,6 +99,7 @@ var/list/ai_verbs_default = list(
src.verbs -= silicon_subsystems
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
+ shouldnt_see = typecacheof(/obj/effect/rune)
announcement = new()
announcement.title = "A.I. Announcement"
announcement.announcement_type = "A.I. Announcement"
@@ -123,7 +124,7 @@ var/list/ai_verbs_default = list(
holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1"))
- proc_holder_list = new()
+ //proc_holder_list = new() // This ain't even used, why are we initializing it?
if(L)
if (istype(L, /datum/ai_laws))
@@ -168,8 +169,7 @@ var/list/ai_verbs_default = list(
on_mob_init()
- spawn(5)
- new /obj/machinery/ai_powersupply(src)
+ addtimer(CALLBACK(src, .proc/create_powersupply), 5)
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
@@ -184,6 +184,9 @@ var/list/ai_verbs_default = list(
ai_list += src
..()
+/mob/living/silicon/ai/proc/init_powersupply()
+ new /obj/machinery/ai_powersupply(src)
+
/mob/living/silicon/ai/proc/on_mob_init()
src << "You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras). "
src << "To look at other parts of the station, click on yourself to get a camera menu. "
@@ -541,7 +544,7 @@ var/list/ai_verbs_default = list(
for(var/i in tempnetwork)
cameralist[i] = i
- cameralist = sortAssoc(cameralist)
+ sortTim(cameralist, /proc/cmp_text_asc)
return cameralist
/mob/living/silicon/ai/proc/ai_network_change(var/network in get_camera_network_list())
diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm
index 1ad63b22ea6..9c0d1ff862b 100644
--- a/code/modules/mob/living/silicon/ai/latejoin.dm
+++ b/code/modules/mob/living/silicon/ai/latejoin.dm
@@ -1,7 +1,7 @@
var/global/list/empty_playable_ai_cores = list()
/hook/roundstart/proc/spawn_empty_ai()
- if("AI" in ticker.mode.disabled_jobs)
+ if("AI" in SSticker.mode.disabled_jobs)
return 1 // Don't make empty AI's if you can't have them (also applies to Malf)
for(var/obj/effect/landmark/start/S in landmarks_list)
if(S.name != "AI")
@@ -35,7 +35,7 @@ var/global/list/empty_playable_ai_cores = list()
set category = "OOC"
set desc = "Wipe your core. This is functionally equivalent to cryo or robotic storage, freeing up your job slot."
- if(ticker && ticker.mode && ticker.mode.name == "AI malfunction")
+ if(SSticker.mode && SSticker.mode.name == "AI malfunction")
usr << "You cannot use this verb in malfunction. If you need to leave, please adminhelp. "
return
diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm
index 86ae4097cda..0aace05fcae 100644
--- a/code/modules/mob/living/silicon/decoy/decoy.dm
+++ b/code/modules/mob/living/silicon/decoy/decoy.dm
@@ -11,5 +11,5 @@
src.anchored = 1
src.canmove = 0
-/mob/living/silicon/decoy/initialize()
- return
+/mob/living/silicon/decoy/Initialize()
+ return INITIALIZE_HINT_NORMAL
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index 8cd80ab1390..1dd44b3e769 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -16,26 +16,9 @@ var/list/pai_emotions = list(
"Question Mark" = 15
)
-
-var/global/list/pai_software_by_key = list()
-var/global/list/default_pai_software = list()
-/hook/startup/proc/populate_pai_software_list()
- var/r = 1 // I would use ., but it'd sacrifice runtime detection
- for(var/type in typesof(/datum/pai_software) - /datum/pai_software)
- var/datum/pai_software/P = new type()
- if(pai_software_by_key[P.id])
- var/datum/pai_software/O = pai_software_by_key[P.id]
- world << "pAI software module [P.name] has the same key as [O.name]! "
- r = 0
- continue
- pai_software_by_key[P.id] = P
- if(P.default)
- default_pai_software[P.id] = P
- return r
-
-/mob/living/silicon/pai/New()
+/mob/living/silicon/pai/Initialize()
..()
- software = default_pai_software.Copy()
+ software = SSpai.default_pai_software.Copy()
/mob/living/silicon/pai/verb/paiInterface()
set category = "pAI Commands"
@@ -62,6 +45,8 @@ var/global/list/default_pai_software = list()
var/bought_software[0]
// Software we have not bought
var/not_bought_software[0]
+
+ var/list/pai_software_by_key = SSpai.pai_software_by_key
for(var/key in pai_software_by_key)
var/datum/pai_software/S = pai_software_by_key[key]
@@ -118,7 +103,7 @@ var/global/list/default_pai_software = list()
else if(href_list["purchase"])
var/soft = href_list["purchase"]
- var/datum/pai_software/S = pai_software_by_key[soft]
+ var/datum/pai_software/S = SSpai.pai_software_by_key[soft]
if(S && (ram >= S.ram_cost))
ram -= S.ram_cost
software[S.id] = S
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 88a452fbb1e..db2418e4d45 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -55,6 +55,7 @@ var/list/mob_hat_cache = list()
var/obj/item/hat
var/hat_x_offset = 0
var/hat_y_offset = -13
+ var/range_limit = 1
holder_type = /obj/item/weapon/holder/drone
@@ -89,7 +90,7 @@ var/list/mob_hat_cache = list()
/mob/living/silicon/robot/drone/Destroy()
if(hat)
hat.loc = get_turf(src)
- ..()
+ return ..()
/mob/living/silicon/robot/drone/construction
icon_state = "constructiondrone"
@@ -100,6 +101,7 @@ var/list/mob_hat_cache = list()
can_pull_size = 5
can_pull_mobs = MOB_PULL_SAME
holder_type = /obj/item/weapon/holder/drone/heavy
+ range_limit = 0
/mob/living/silicon/robot/drone/New()
@@ -147,13 +149,11 @@ var/list/mob_hat_cache = list()
/mob/living/silicon/robot/drone/updateicon()
- overlays.Cut()
+ cut_overlays()
if(stat == 0)
- overlays += "eyes-[icon_state]"
- else
- overlays -= "eyes"
+ add_overlay("eyes-[icon_state]")
if(hat) // Let the drones wear hats.
- overlays |= get_hat_icon(hat, hat_x_offset, hat_y_offset)
+ add_overlay(get_hat_icon(hat, hat_x_offset, hat_y_offset))
/mob/living/silicon/robot/drone/choose_icon()
return
@@ -191,7 +191,7 @@ var/list/mob_hat_cache = list()
if(stat == 2)
- if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
+ if(!config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
user << "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one. "
return
@@ -254,10 +254,10 @@ var/list/mob_hat_cache = list()
//For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here.
/mob/living/silicon/robot/drone/updatehealth()
if(status_flags & GODMODE)
- health = 35
+ health = maxHealth
stat = CONSCIOUS
return
- health = 35 - (getBruteLoss() + getFireLoss())
+ health = maxHealth - (getBruteLoss() + getFireLoss())
return
//Easiest to check this here, then check again in the robot proc.
@@ -265,7 +265,8 @@ var/list/mob_hat_cache = list()
//Drones killed by damage will gib.
/mob/living/silicon/robot/drone/handle_regular_status_updates()
var/turf/T = get_turf(src)
- if((!T || health <= -35 || (master_fabricator && T.z != master_fabricator.z)) && src.stat != DEAD)
+ var/area/A = get_area(T)
+ if((!T || health <= -maxHealth || (range_limit && !(A in the_station_areas))) && src.stat != DEAD)
timeofdeath = world.time
death() //Possibly redundant, having trouble making death() cooperate.
gib()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
index e5aa936a086..295e0456e07 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
@@ -4,7 +4,7 @@
set desc = "Tag yourself for delivery through the disposals system."
set category = "Robot Commands"
- var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in tagger_locations
+ var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in SSdisposals.tagger_locations
if(!new_tag)
mail_destination = ""
@@ -19,8 +19,6 @@
src << "\The [D] acknowledges your signal. "
D.flush_count = D.flush_every_ticks
- return
-
/mob/living/silicon/robot/drone/MouseDrop(atom/over_object)
var/mob/living/carbon/H = over_object
if(!istype(H) || !Adjacent(H)) return ..()
@@ -34,4 +32,4 @@
hat = null
updateicon()
else
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm
index f5ec4028e91..d3c7ec65118 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm
@@ -59,7 +59,7 @@
if (href_list["setarea"])
//Probably should consider using another list, but this one will do.
- var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in tagger_locations
+ var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in SSdisposals.tagger_locations
if(!t_area)
return
@@ -120,4 +120,4 @@
dronefab.produce_drones = !dronefab.produce_drones
usr << "You [dronefab.produce_drones ? "enable" : "disable"] drone production in the nearby fabricator. "
- src.updateUsrDialog()
\ No newline at end of file
+ src.updateUsrDialog()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
index 5fccf5d7bcd..f89cd77fcaf 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
@@ -29,9 +29,6 @@
fabricator_tag = "Derelict"
drone_type = /mob/living/silicon/robot/drone/construction
-/obj/machinery/drone_fabricator/New()
- ..()
-
/obj/machinery/drone_fabricator/power_change()
..()
if (stat & NOPOWER)
@@ -39,7 +36,7 @@
/obj/machinery/drone_fabricator/process()
- if(ticker.current_state < GAME_STATE_PLAYING)
+ if(!ROUND_IS_STARTED)
return
if(stat & NOPOWER || !produce_drones)
@@ -78,8 +75,10 @@
flick("h_lathe_leave",src)
time_last_drone = world.time
- if(player.mob && player.mob.mind) player.mob.mind.reset()
- var/mob/living/silicon/robot/drone/new_drone = getFromPool(drone_type, get_turf(src))
+ if(player.mob && player.mob.mind)
+ player.mob.mind.reset()
+
+ var/mob/living/silicon/robot/drone/new_drone = new drone_type(get_turf(src))
new_drone.transfer_personality(player)
new_drone.master_fabricator = src
@@ -93,7 +92,7 @@
/proc/try_drone_spawn(var/mob/user, var/obj/machinery/drone_fabricator/fabricator)
- if(ticker.current_state < GAME_STATE_PLAYING)
+ if(!ROUND_IS_STARTED)
user << "The game hasn't started yet! "
return
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 7946ba604b1..d9148e4f2c7 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -1,6 +1,5 @@
/mob/living/silicon/robot/Life()
- set invisibility = 0
- set background = 1
+ set background = BACKGROUND_ENABLED
if (src.transforming)
return
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index aafdaa59a49..81e4b537e13 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -72,6 +72,7 @@
var/opened = 0
var/emagged = 0
+ var/fakeemagged = 0 //for dumb illegal weapons module
var/wiresexposed = 0
var/locked = 1
var/has_power = 1
@@ -764,30 +765,28 @@
return 0
/mob/living/silicon/robot/updateicon()
- overlays.Cut()
+ cut_overlays()
if(stat == CONSCIOUS)
- overlays += "eyes-[module_sprites[icontype]]"
-
+ add_overlay("eyes-[module_sprites[icontype]]")
if(opened)
var/panelprefix = custom_sprite ? src.ckey : "ov"
if(wiresexposed)
- overlays += "[panelprefix]-openpanel +w"
+ add_overlay("[panelprefix]-openpanel +w")
else if(cell)
- overlays += "[panelprefix]-openpanel +c"
+ add_overlay("[panelprefix]-openpanel +c")
else
- overlays += "[panelprefix]-openpanel -c"
+ add_overlay("[panelprefix]-openpanel -c")
if(module_active && istype(module_active,/obj/item/borg/combat/shield))
- overlays += "[module_sprites[icontype]]-shield"
+ add_overlay("[module_sprites[icontype]]-shield")
if(modtype == "Combat")
if(module_active && istype(module_active,/obj/item/borg/combat/mobility))
icon_state = "[module_sprites[icontype]]-roll"
else
icon_state = module_sprites[icontype]
- return
/mob/living/silicon/robot/proc/installed_modules()
if(weapon_lock)
@@ -1122,7 +1121,7 @@
return
if(opened)//Cover is open
- if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
+ if(emagged && !fakeemagged) return//Prevents the X has hit Y with Z message also you cant emag them twice
if(wiresexposed)
user << "You must close the panel first"
return
@@ -1130,6 +1129,8 @@
sleep(6)
if(prob(50))
emagged = 1
+ if(fakeemagged)
+ fakeemagged = 0
lawupdate = 0
disconnect_from_ai()
user << "You emag [src]'s interface."
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index b362e2e882c..3eeb1f30bbd 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -359,7 +359,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
- src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/weapon/weldingtool/experimental(src)
src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
src.modules += new /obj/item/weapon/gripper(src)
@@ -646,7 +646,9 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
- src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/weapon/crowbar(src)
+ src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
+ ..()
/obj/item/weapon/robot_module/research
name = "research module"
@@ -739,7 +741,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/hud/sec(src)
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
- src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
src.modules += new /obj/item/borg/combat/shield(src)
src.modules += new /obj/item/borg/combat/mobility(src)
src.modules += new /obj/item/weapon/crowbar(src)
@@ -769,7 +771,7 @@ var/global/list/robot_modules = list(
robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
src.modules += robot.internals
- src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
src.emag.name = "Plasma Cutter"
var/datum/matter_synth/metal = new /datum/matter_synth/metal(25000)
@@ -840,3 +842,61 @@ var/global/list/robot_modules = list(
LR.Charge(R, amount)
..()
return
+
+/obj/item/weapon/robot_module/mining_drone
+ name = "mining drone module"
+ no_slip = 1
+ networks = list(NETWORK_MINE)
+
+/obj/item/weapon/robot_module/mining_drone/basic/New(var/mob/living/silicon/robot/robot)
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/borg/sight/material(src)
+ src.modules += new /obj/item/weapon/storage/bag/ore(src)
+ src.modules += new /obj/item/weapon/pickaxe/drill(src)
+ src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
+ src.modules += new /obj/item/weapon/gripper/miner(src)
+ src.modules += new /obj/item/weapon/mining_scanner(src)
+
+ src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
+ src.emag.name = "Mounted Thermal Drill"
+ ..()
+
+/obj/item/weapon/robot_module/mining_drone/drill/New(var/mob/living/silicon/robot/robot)
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/borg/sight/material(src)
+ src.modules += new /obj/item/weapon/storage/bag/ore(src)
+ src.modules += new /obj/item/weapon/pickaxe/jackhammer(src)
+ src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
+ src.modules += new /obj/item/weapon/gripper/miner(src)
+ src.modules += new /obj/item/weapon/mining_scanner(src)
+
+ src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
+ src.emag.name = "Mounted Thermal Drill"
+ ..()
+
+/obj/item/weapon/robot_module/mining_drone/plasmacutter/New(var/mob/living/silicon/robot/robot)
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/borg/sight/material(src)
+ src.modules += new /obj/item/weapon/storage/bag/ore(src)
+ src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
+ src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
+ src.modules += new /obj/item/weapon/gripper/miner(src)
+ src.modules += new /obj/item/weapon/mining_scanner(src)
+
+ src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
+ src.emag.name = "Mounted Thermal Drill"
+ ..()
+
+/obj/item/weapon/robot_module/mining_drone/drillandplasmacutter/New(var/mob/living/silicon/robot/robot)
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/borg/sight/material(src)
+ src.modules += new /obj/item/weapon/storage/bag/ore(src)
+ src.modules += new /obj/item/weapon/gun/energy/plasmacutter/mounted(src)
+ src.modules += new /obj/item/weapon/pickaxe/jackhammer(src)
+ src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
+ src.modules += new /obj/item/weapon/gripper/miner(src)
+ src.modules += new /obj/item/weapon/mining_scanner(src)
+
+ src.emag = new /obj/item/weapon/gun/energy/vaurca/mountedthermaldrill(src)
+ src.emag.name = "Mounted Thermal Drill"
+ ..()
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index 5897fc6624f..b4c1414f7d9 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -3,23 +3,12 @@
return 0
..(prob_slip)
-/mob/living/silicon/robot/Process_Spacemove(var/check_drift = 0)//Cleaned up, fixed and simplified this function
- //If checkdrift is 0, we're checking to see if we can manually move, return true if jetpack is on
- //if checkdrift is 1, we're checking to see if we drift. Return true if jetpack AND stabilisers are on
- if(jetpack)
- //var/obj/item/weapon/tank/jetpack/J = internals
-
- if (check_drift)
- if (jetpack.stabilization_on && jetpack.allow_thrust(0.01))
- inertia_dir = 0
+/mob/living/silicon/robot/Allow_Spacemove()
+ if(module)
+ for(var/obj/item/weapon/tank/jetpack/J in module.modules)
+ if(J && J.allow_thrust(0.01))
return 1
-
- else if(jetpack.allow_thrust(0.01))
- inertia_dir = 0
- return 1
- if(..())//The parent function checks for nearby objects to hold onto
- return 1
- return 0
+ . = ..()
//No longer needed, but I'll leave it here incase we plan to re-use it.
/mob/living/silicon/robot/movement_delay()
@@ -42,4 +31,4 @@
return 0
if (cell_use_power(actuatorComponent.active_usage))
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/mob/living/silicon/robot/syndicate_robot.dm b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
index 0ecedfa9a59..6f835b1e28f 100644
--- a/code/modules/mob/living/silicon/robot/syndicate_robot.dm
+++ b/code/modules/mob/living/silicon/robot/syndicate_robot.dm
@@ -28,28 +28,27 @@
verbs += /mob/living/silicon/robot/proc/choose_icon
/mob/living/silicon/robot/syndicate/updateicon() //because this was the only way I found out how to make their eyes and etc works
- overlays.Cut()
+ cut_overlays()
if(stat == 0)
- overlays += "eyes-[icon_state]"
+ add_overlay("eyes-[icon_state]")
if(opened)
var/panelprefix = custom_sprite ? src.ckey : "ov"
if(wiresexposed)
- overlays += "[panelprefix]-openpanel +w"
+ add_overlay("[panelprefix]-openpanel +w")
else if(cell)
- overlays += "[panelprefix]-openpanel +c"
+ add_overlay("[panelprefix]-openpanel +c")
else
- overlays += "[panelprefix]-openpanel -c"
+ add_overlay("[panelprefix]-openpanel -c")
if(module_active && istype(module_active,/obj/item/borg/combat/shield))
- overlays += "[icon_state]-shield"
+ add_overlay("[icon_state]-shield")
if(modtype == "Combat")
if(module_active && istype(module_active,/obj/item/borg/combat/mobility))
icon_state = "[icon_state]-roll"
else
icon_state = module_sprites[icontype]
- return
/mob/living/silicon/robot/syndicate/death()
..()
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 97e764b9457..0d88f8d83b7 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -45,9 +45,9 @@
/mob/living/silicon/Destroy()
silicon_mob_list -= src
- for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
+ for(var/datum/alarm_handler/AH in SSalarm.all_handlers)
AH.unregister_alarm(src)
- ..()
+ return ..()
/mob/living/silicon/proc/init_id()
if(idcard)
diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm
index 8f0f77a0984..2acc76610f1 100644
--- a/code/modules/mob/living/silicon/subystems.dm
+++ b/code/modules/mob/living/silicon/subystems.dm
@@ -69,7 +69,7 @@
if(!register_alarms)
return
- for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
+ for(var/datum/alarm_handler/AH in SSalarm.all_handlers)
AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm)
queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index dbcfcce3d79..e9f26bc4eba 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -28,7 +28,11 @@
/mob/living/simple_animal/bee/Destroy()
if(parent)
parent.owned_bee_swarms.Remove(src)
- ..()
+ my_hydrotray = null
+ parent = null
+ target_turf = null
+ target_mob = null
+ return ..()
//Special death behaviour. When bees accumulate enough damage to 'die', they don't outright die. Thus no call to parent
@@ -36,7 +40,7 @@
//Repeat until strength hits zero. only THEN do they die, and they qdel and leave no corpse in doing so
//Because we don't have sprites for a carpet made of bee corpses.
/mob/living/simple_animal/bee/death()
- if (!gcDestroyed)
+ if (!QDELING(src))
strength -= 1
if (strength <= 0)
if (prob(35))//probability to reduce spam
@@ -261,4 +265,4 @@
/mob/living/simple_animal/bee/beegun
maxHealth = 30
strength = 5
- feral = 30
\ No newline at end of file
+ feral = 30
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index 93b79423ce2..617ebae37c9 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -27,7 +27,7 @@
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID
-/obj/effect/landmark/mobcorpse/New()
+/obj/effect/landmark/mobcorpse/Initialize()
createCorpse()
/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
@@ -154,4 +154,4 @@
corpsehelmet = /obj/item/clothing/head/bearpelt
/obj/effect/landmark/mobcorpse/russian/ranged
- corpsehelmet = /obj/item/clothing/head/ushanka
\ No newline at end of file
+ corpsehelmet = /obj/item/clothing/head/ushanka
diff --git a/code/modules/mob/living/simple_animal/familiars/familiars.dm b/code/modules/mob/living/simple_animal/familiars/familiars.dm
index 613a9224fee..fbe9f9949e1 100644
--- a/code/modules/mob/living/simple_animal/familiars/familiars.dm
+++ b/code/modules/mob/living/simple_animal/familiars/familiars.dm
@@ -71,7 +71,7 @@
wizardy_spells = list(/spell/aoe_turf/conjure/forcewall)
-/mob/living/simple_animal/familiar/pike/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/familiar/pike/Allow_Spacemove(var/check_drift = 0)
return 1
/mob/living/simple_animal/familiar/horror
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 9aa47ccbe26..e99b8b30f8c 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -63,8 +63,7 @@
if (!movement_target)
walk_to(src,0)
- spawn(2)
- attack_mice()
+ addtimer(CALLBACK(src, .proc/attack_mice), 2)
if(prob(2)) //spooky
var/mob/dead/observer/spook = locate() in range(src,5)
@@ -110,8 +109,7 @@
/mob/living/simple_animal/cat/Released()
//A thrown cat will immediately attack mice near where it lands
handle_movement_target()
- spawn(3)
- attack_mice()
+ addtimer(CALLBACK(src, .proc/attack_mice), 3)
..()
/mob/living/simple_animal/cat/death()
@@ -164,7 +162,7 @@
var/befriend_job = null
/mob/living/simple_animal/cat/fluff/handle_movement_target()
- if (friend)
+ if (!QDELETED(friend))
var/follow_dist = 5
if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit) //danger
follow_dist = 1
@@ -197,7 +195,7 @@
/mob/living/simple_animal/cat/fluff/Life()
..()
- if (stat || !friend)
+ if (stat || QDELETED(friend))
return
if (get_dist(src, friend) <= 1)
if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit)
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index cabbfd25957..45734cb006d 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -200,9 +200,6 @@
..()
desc = "How could you do this? You monster!"
-var/const/MAX_CHICKENS = 50
-var/global/chicken_count = 0
-
/mob/living/simple_animal/chicken
name = "\improper chicken"
desc = "Hopefully the eggs are good this season."
@@ -230,6 +227,8 @@ var/global/chicken_count = 0
mob_size = 2
hunger_enabled = FALSE
+ var/static/chicken_count = 0
+
/mob/living/simple_animal/chicken/New()
..()
if(!body_color)
@@ -283,16 +282,19 @@ var/global/chicken_count = 0
E.pixel_x = rand(-6,6)
E.pixel_y = rand(-6,6)
if(chicken_count < MAX_CHICKENS && prob(10))
- processing_objects.Add(E)
+ START_PROCESSING(SSprocessing, E)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg
+ var/amount_grown = 0
-/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0
/obj/item/weapon/reagent_containers/food/snacks/egg/process()
if(isturf(loc))
amount_grown += rand(1,2)
if(amount_grown >= 100)
visible_message("[src] hatches with a quiet cracking sound.")
new /mob/living/simple_animal/chick(get_turf(src))
- processing_objects.Remove(src)
+ STOP_PROCESSING(SSprocessing, src)
qdel(src)
else
+ STOP_PROCESSING(SSprocessing, src)
processing_objects.Remove(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm
index 2aa9f5c6499..1c18bd42f24 100644
--- a/code/modules/mob/living/simple_animal/friendly/slime.dm
+++ b/code/modules/mob/living/simple_animal/friendly/slime.dm
@@ -40,7 +40,7 @@
/mob/living/simple_animal/adultslime/New()
..()
- overlays += "aslime-:33"
+ add_overlay("aslime-:33")
/mob/living/simple_animal/slime/adult/death()
@@ -54,4 +54,4 @@
S2.icon_living = "[src.colour] baby slime"
S2.icon_dead = "[src.colour] baby slime dead"
S2.colour = "[src.colour]"
- qdel(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 55b7c66e4c5..7ea85019cb3 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -156,7 +156,7 @@
eject_brain()
death()
-/mob/living/simple_animal/spiderbot/proc/update_icon()
+/mob/living/simple_animal/spiderbot/update_icon()
if(mmi)
if(positronic)
icon_state = "spiderbot-chassis-posi"
@@ -183,7 +183,7 @@
/mob/living/simple_animal/spiderbot/Destroy()
eject_brain()
- ..()
+ return ..()
/mob/living/simple_animal/spiderbot/New()
diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm
index 6beb094c944..f879256a336 100644
--- a/code/modules/mob/living/simple_animal/hostile/bat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bat.dm
@@ -44,9 +44,13 @@
if(istype(L))
owner = L
-/mob/living/simple_animal/hostile/scarybat/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/scarybat/Allow_Spacemove(var/check_drift = 0)
return ..() //No drifting in space for space carp! //original comments do not steal
+/mob/living/simple_animal/hostile/scarybat/Destroy()
+ owner = null
+ return ..()
+
/mob/living/simple_animal/hostile/scarybat/FindTarget()
. = ..()
if(.)
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index aac5e123f6b..2ffd9112c0d 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -304,7 +304,7 @@
instant_aggro()
-/mob/living/simple_animal/hostile/bear/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/bear/Allow_Spacemove(var/check_drift = 0)
inertia_dir = 0
return 1 //No drifting in space for space bears!
//Fixed this, it wasnt working
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index a3e2724e13c..cca64d099d8 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -39,7 +39,7 @@
faction = "carp"
-/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/carp/Allow_Spacemove(var/check_drift = 0)
return 1 //No drifting in space for space carp! //original comments do not steal
/mob/living/simple_animal/hostile/carp/FindTarget()
@@ -68,4 +68,4 @@
/mob/living/simple_animal/hostile/carp/russian/FindTarget()
. = ..()
if(.)
- custom_emote(1,"spots a filthy capitalist!")
\ No newline at end of file
+ custom_emote(1,"spots a filthy capitalist!")
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 99f213ed4ed..f5cc38394f3 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -33,7 +33,7 @@
faction = "faithless"
-/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/faithless/Allow_Spacemove(var/check_drift = 0)
return 1
/mob/living/simple_animal/hostile/faithless/FindTarget()
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index d0863a4b278..45f2a183d89 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -151,7 +151,7 @@
if(busy == LAYING_EGGS)
E = locate() in get_turf(src)
if(!E)
- getFromPool(/obj/effect/spider/eggcluster, loc, src)
+ new /obj/effect/spider/eggcluster(loc, src)
fed--
busy = 0
stop_automated_movement = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 50238da116b..69f1d56b38a 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -19,6 +19,11 @@
var/shuttletarget = null
var/enroute = 0
+/mob/living/simple_animal/hostile/Destroy()
+ friends = null
+ target_mob = null
+ return ..()
+
/mob/living/simple_animal/hostile/proc/FindTarget()
var/atom/T = null
@@ -35,7 +40,7 @@
if(isliving(A))
var/mob/living/L = A
- if(L.faction == src.faction && !attack_same)
+ if((L.faction == src.faction) && !attack_same)
continue
else if(L in friends)
continue
@@ -74,7 +79,7 @@
/mob/living/simple_animal/hostile/proc/MoveToTarget()
stop_automated_movement = 1
- if(!target_mob || SA_attackable(target_mob))
+ if(QDELETED(target_mob) || SA_attackable(target_mob))
LoseTarget()
if(target_mob in ListTargets(10))
if(ranged)
@@ -89,7 +94,7 @@
/mob/living/simple_animal/hostile/proc/AttackTarget()
stop_automated_movement = 1
- if(!target_mob || SA_attackable(target_mob))
+ if(QDELETED(target_mob) || SA_attackable(target_mob))
LoseTarget()
return 0
if(!(target_mob in ListTargets(10)))
@@ -129,7 +134,7 @@
/mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7)
- var/list/L = hearers(src, dist)
+ var/list/L = view(src, dist)
for (var/obj/mecha/M in mechas_list)
if (M.z == src.z && get_dist(src, M) <= dist)
@@ -170,18 +175,11 @@
visible_message("\red [src] fires at [target]!", 1)
if(rapid)
- spawn(1)
- Shoot(target, src.loc, src)
- if(casingtype)
- new casingtype(get_turf(src))
- spawn(4)
- Shoot(target, src.loc, src)
- if(casingtype)
- new casingtype(get_turf(src))
- spawn(6)
- Shoot(target, src.loc, src)
- if(casingtype)
- new casingtype(get_turf(src))
+ var/datum/callback/shoot_cb = CALLBACK(src, .proc/shoot_wrapper, target, loc, src)
+ addtimer(shoot_cb, 1)
+ addtimer(shoot_cb, 4)
+ addtimer(shoot_cb, 6)
+
else
Shoot(target, src.loc, src)
if(casingtype)
@@ -191,6 +189,10 @@
target_mob = null
return
+/mob/living/simple_animal/hostile/proc/shoot_wrapper(target, location, user)
+ Shoot(target, location, user)
+ if (casingtype)
+ new casingtype(loc)
/mob/living/simple_animal/hostile/proc/Shoot(var/target, var/start, var/user, var/bullet = 0)
if(target == start)
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 0a5cf895545..d7125670179 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -60,8 +60,8 @@
var/attempt_open = 0
// Pickup loot
-/mob/living/simple_animal/hostile/mimic/crate/initialize()
- ..()
+/mob/living/simple_animal/hostile/mimic/crate/Initialize()
+ . = ..()
for(var/obj/item/I in loc)
I.loc = src
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
new file mode 100644
index 00000000000..d6af4f165c9
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm
@@ -0,0 +1,57 @@
+//asteroid cavern creatures
+/mob/living/simple_animal/hostile/retaliate/cavern_dweller
+ name = "cavern dweller"
+ desc = "An alien creature that dwells in the tunnels of the asteroid, commonly found in the Romanovich Cloud."
+ icon = 'icons/mob/cavern.dmi'
+ icon_state = "dweller"
+ icon_living = "dweller"
+ icon_dead = "dweller_dead"
+ ranged = 1
+ turns_per_move = 3
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "hits"
+ a_intent = I_HURT
+ stop_automated_movement_when_pulled = 0
+ health = 60
+ maxHealth = 60
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ attacktext = "chomped"
+ attack_sound = 'sound/weapons/bite.ogg'
+ speed = 4
+ projectiletype = /obj/item/projectile/beam/cavern
+ projectilesound = 'sound/magic/lightningbolt.ogg'
+ destroy_surroundings = 1
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ faction = "cavern"
+
+/mob/living/simple_animal/hostile/retaliate/cavern_dweller/Allow_Spacemove(var/check_drift = 0)
+ return 1
+
+/obj/item/projectile/beam/cavern
+ name = "electrical discharge"
+ icon_state = "stun"
+ damage_type = BURN
+ check_armour = "energy"
+ damage = 5
+
+ muzzle_type = /obj/effect/projectile/stun/muzzle
+ tracer_type = /obj/effect/projectile/stun/tracer
+ impact_type = /obj/effect/projectile/stun/impact
+
+/obj/item/projectile/beam/cavern/on_hit(var/atom/target, var/blocked = 0)
+ if(ishuman(target))
+ var/mob/living/carbon/human/M = target
+ var/shock_damage = rand(10,20)
+ M.electrocute_act(shock_damage, ran_zone())
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index 668e3746c3d..cdb020b6e5f 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -58,7 +58,7 @@
ion_trail.set_up(src)
ion_trail.start()
-/mob/living/simple_animal/hostile/retaliate/malf_drone/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/retaliate/malf_drone/Allow_Spacemove(var/check_drift = 0)
return 1
/mob/living/simple_animal/hostile/retaliate/malf_drone/ListTargets()
@@ -157,6 +157,7 @@
qdel(src)
/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy()
+ QDEL_NULL(ion_trail)
//some random debris left behind
if(has_loot)
spark(src, 3, alldirs)
@@ -176,16 +177,16 @@
step_to(O, get_turf(pick(view(7, src))))
//rods
- O = getFromPool(/obj/item/stack/rods, src.loc)
+ O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
- O = getFromPool(/obj/item/stack/rods, src.loc)
+ O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
- O = getFromPool(/obj/item/stack/rods, src.loc)
+ O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
- O = getFromPool(/obj/item/stack/rods, src.loc)
+ O = new /obj/item/stack/rods(src.loc)
step_to(O, get_turf(pick(view(7, src))))
//plasteel
@@ -263,7 +264,7 @@
C.name = "Corrupted drone morality core"
C.origin_tech = list(TECH_ILLEGAL = rand(3,6))
- ..()
+ return ..()
/obj/item/projectile/beam/drone
damage = 15
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
index 49a30558594..79b867019c7 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -1,6 +1,10 @@
/mob/living/simple_animal/hostile/retaliate
var/list/enemies = list()
+/mob/living/simple_animal/hostile/retaliate/Destroy()
+ enemies = null
+ return ..()
+
/mob/living/simple_animal/hostile/retaliate/Found(var/atom/A)
if(isliving(A))
var/mob/living/L = A
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 86e5b660315..dd02f511391 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -99,7 +99,7 @@
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 0
-/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/syndicate/melee/space/Allow_Spacemove(var/check_drift = 0)
return
/mob/living/simple_animal/hostile/syndicate/ranged
@@ -129,7 +129,7 @@
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 0
-/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0)
+/mob/living/simple_animal/hostile/syndicate/ranged/space/Allow_Spacemove(var/check_drift = 0)
return
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 8c1e9895138..ed20360d62c 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -100,6 +100,11 @@
/mob/living/simple_animal/parrot/verb/drop_held_item_player, \
/mob/living/simple_animal/parrot/proc/perch_player)
+/mob/living/simple_animal/parrot/Destroy()
+ QDEL_NULL(ears)
+ parrot_interest = null
+ parrot_perch = null
+ return ..()
/mob/living/simple_animal/parrot/death()
if(held_item)
@@ -751,4 +756,4 @@
parrot_interest = user
parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless
icon_state = "parrot_fly"
- return success
\ No newline at end of file
+ return success
diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm
index 9775a68c9c9..6d800543182 100644
--- a/code/modules/mob/living/simple_animal/worm.dm
+++ b/code/modules/mob/living/simple_animal/worm.dm
@@ -101,7 +101,7 @@
Destroy() //if a chunk a destroyed, make a new worm out of the split halves
if(previous)
previous.Detach()
- ..()
+ return ..()
Move()
var/attachementNextPosition = loc
@@ -123,7 +123,7 @@
return
- proc/update_icon() //only for the sake of consistency with the other update icon procs
+ update_icon() //only for the sake of consistency with the other update icon procs
if(stat == CONSCIOUS || stat == UNCONSCIOUS)
if(previous) //midsection
icon_state = "spaceworm[get_dir(src,previous) | get_dir(src,next)]" //see 3 lines below
diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm
index 38ec58506b9..decbf4c7c3d 100644
--- a/code/modules/mob/logout.dm
+++ b/code/modules/mob/logout.dm
@@ -3,7 +3,7 @@
player_list -= src
log_access("Logout: [key_name(src)]",ckey=key_name(src))
if(admin_datums[src.ckey])
- if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing.
+ if (SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing.
var/admins_number = 0
var/admins_number_afk = 0
for (var/client/C)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ff44620e461..3fd48e0ebb0 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -3,7 +3,7 @@
dead_mob_list -= src
living_mob_list -= src
unset_machine()
- qdel(hud_used)
+ QDEL_NULL(hud_used)
if(client)
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
qdel(spell_master)
@@ -15,8 +15,7 @@
spellremove(src)
for(var/infection in viruses)
qdel(infection)
-
-
+ viruses.Cut()
//Added this to prevent nonliving mobs from ghostising
//The only non 'living' mobs are:
@@ -28,7 +27,9 @@
//Ghosts are the only ones that even technically 'exist' and aren't just an abstraction using mob code for convenience
if (istype(src, /mob/living))
ghostize()
- ..()
+
+ return ..()
+
/mob/proc/remove_screen_obj_references()
flash = null
@@ -103,6 +104,10 @@
for(var/A in player_list)
var/mob/M = A
+ if (QDELETED(M))
+ warning("Null or QDELETED object [DEBUG_REF(M)] found in player list! Removing.")
+ player_list -= M
+ continue
if (!M.client || istype(M, /mob/new_player))
continue
if(get_turf(M) in messageturfs)
@@ -174,7 +179,6 @@
M.show_message(message,2,deaf_message,1)
-
for(var/o in objs)
var/obj/O = o
O.show_message(message,2,deaf_message,1)
@@ -302,15 +306,13 @@
pointing_effect = new /obj/effect/decal/point(tile)
pointing_effect.invisibility = invisibility
- spawn (20)
- if(pointing_effect)
- qdel(pointing_effect) // qdel
- pointing_effect = null
+ addtimer(CALLBACK(src, .proc/clear_point), 20)
face_atom(A)
return 1
-
+/mob/proc/clear_point()
+ QDEL_NULL(pointing_effect)
/mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) )))
@@ -448,10 +450,10 @@
if (!( config.abandon_allowed ))
usr << "Respawn is disabled. "
return
- if ((stat != DEAD || !( ticker )))
+ if (stat != DEAD)
usr << "You must be dead to use this! "
return
- if (ticker.mode.deny_respawn) //BS12 EDIT
+ if (SSticker.mode && SSticker.mode.deny_respawn) //BS12 EDIT
usr << "Respawn is disabled for this roundtype. "
return
else if(!MayRespawn(1, CREW))
@@ -487,26 +489,8 @@
/client/verb/changes()
set name = "Changelog"
set category = "OOC"
- getFiles(
- 'html/88x31.png',
- 'html/bug-minus.png',
- 'html/cross-circle.png',
- 'html/hard-hat-exclamation.png',
- 'html/image-minus.png',
- 'html/image-plus.png',
- 'html/map-pencil.png',
- 'html/music-minus.png',
- 'html/music-plus.png',
- 'html/tick-circle.png',
- 'html/wrench-screwdriver.png',
- 'html/spell-check.png',
- 'html/burn-exclamation.png',
- 'html/chevron.png',
- 'html/chevron-expand.png',
- 'html/changelog.css',
- 'html/changelog.js',
- 'html/changelog.html'
- )
+ var/datum/asset/changelog = get_asset_datum(/datum/asset/simple/changelog)
+ changelog.send(src)
src << browse('html/changelog.html', "window=changes;size=675x650")
if(prefs.lastchangelog != changelog_hash)
prefs.lastchangelog = changelog_hash
@@ -746,7 +730,7 @@
. = (is_client_active(10 MINUTES))
if(.)
- if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME)
+ if(statpanel("Status") && SSticker.current_state != GAME_STATE_PREGAME)
stat("Game ID", game_id)
stat("Station Time", worldtime2text())
stat("Round Duration", round_duration())
@@ -755,24 +739,45 @@
if(client.holder)
if(statpanel("Status"))
stat("Location:", "([x], [y], [z]) [loc]")
- stat("CPU:","[world.cpu]")
- stat("Instances:","[world.contents.len]")
- if(statpanel("Processes"))
- if(processScheduler)
- processScheduler.statProcesses()
+ if (LAZYLEN(client.holder.watched_processes))
+ for (var/datum/controller/ctrl in client.holder.watched_processes)
+ if (!ctrl)
+ LAZYREMOVE(client.holder.watched_processes, ctrl)
+ else
+ ctrl.stat_entry()
+
+ if(statpanel("MC"))
+ stat("CPU:", world.cpu)
+ stat("Tick Usage:", world.tick_usage)
+ stat("Instances:", world.contents.len)
+ if(Master)
+ Master.stat_entry()
+ else
+ stat("Master Controller:", "ERROR")
+ if(Failsafe)
+ Failsafe.stat_entry()
+ else
+ stat("Failsafe Controller:", "ERROR")
+ if (Master)
+ stat(null, "- Subsystems -")
+ for(var/datum/controller/subsystem/SS in Master.subsystems)
+ if (!Master.initializing && SS.flags & SS_NO_DISPLAY)
+ continue
+
+ SS.stat_entry()
if(listed_turf && client)
if(!TurfAdjacent(listed_turf))
listed_turf = null
else
if(statpanel("Turf"))
- stat("\icon[listed_turf]", listed_turf.name)
+ stat("Turf:", listed_turf)
for(var/atom/A in listed_turf)
if(!A.mouse_opacity)
continue
if(A.invisibility > see_invisible)
continue
- if(is_type_in_list(A, shouldnt_see))
+ if(is_type_in_typecache(A, shouldnt_see))
continue
stat(A)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 24d100b9c67..8df5ca53d33 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -150,6 +150,7 @@
var/music_lastplayed = "null"
var/job = null//Living
+ var/megavend = 0 //determines if this ID has claimed their megavend stache
var/const/blindness = 1//Carbon
var/const/deafness = 2//Carbon
@@ -169,7 +170,7 @@
var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true.
//Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed.
- var/proc_holder_list[] = list()//Right now unused.
+ //var/proc_holder_list[] = list()//Right now unused.
//Also unlike the spell list, this would only store the object in contents, not an object in itself.
/* Add this line to whatever stat module you need in order to use the proc holder list.
@@ -185,7 +186,7 @@
var/mob/living/carbon/LAssailant = null
//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
- var/spell/list/spell_list = list()
+ var/spell/list/spell_list
//Changlings, but can be used in other modes
// var/obj/effect/proc_holder/changpower/list/power_list = list()
@@ -225,7 +226,7 @@
var/mob/teleop = null
var/turf/listed_turf = null //the current turf being examined in the stat panel
- var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
+ var/list/shouldnt_see = list() //typecache of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes
var/list/active_genes=list()
var/mob_size = MOB_MEDIUM
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 9d3800ece46..59e05b135dc 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -90,7 +90,7 @@
hud.screen_loc = ui_lhand
/obj/item/weapon/grab/process()
- if(gcDestroyed) // GC is trying to delete us, we'll kill our processing so we can cleanly GC
+ if(QDELING(src)) // GC is trying to delete us, we'll kill our processing so we can cleanly GC
return PROCESS_KILL
confirm()
@@ -361,4 +361,4 @@
qdel(hud)
hud = null
destroying = 1 // stops us calling qdel(src) on dropped()
- ..()
+ return ..()
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index c3ebd74b882..bb6f46b82a6 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -184,34 +184,26 @@
if(!mob)
return // Moved here to avoid nullrefs below
- if(mob.control_object) Move_object(direct)
+ if(mob.control_object)
+ Move_object(direct)
if(mob.incorporeal_move && isobserver(mob))
Process_Incorpmove(direct)
return
- if(moving) return 0
+ if(moving || world.time < move_delay)
+ return 0
- if(world.time < move_delay)
- return
-
-
-//This compensates for the inaccuracy of move ticks
-//Whenever world.time overshoots the movedelay, due to it only ticking once per decisecond
-//The overshoot value is subtracted from our next delay, farther down where move delay is set.
-//This doesn't entirely remove the problem, but it keeps travel times accurate to within 0.1 seconds
-//Over an infinite distance, and prevents the inaccuracy from compounding. Thus making it basically a non-issue
+ //This compensates for the inaccuracy of move ticks
+ //Whenever world.time overshoots the movedelay, due to it only ticking once per decisecond
+ //The overshoot value is subtracted from our next delay, farther down where move delay is set.
+ //This doesn't entirely remove the problem, but it keeps travel times accurate to within 0.1 seconds
+ //Over an infinite distance, and prevents the inaccuracy from compounding. Thus making it basically a non-issue
var/leftover = world.time - move_delay
if (leftover > 1)
leftover = 0
-
- if(locate(/obj/effect/stop/, mob.loc))
- for(var/obj/effect/stop/S in mob.loc)
- if(S.victim == mob)
- return
-
- if(mob.stat==DEAD && isliving(mob))
+ if(mob.stat == DEAD && isliving(mob))
mob.ghostize()
return
@@ -219,21 +211,24 @@
if(mob.eyeobj)
return mob.EyeMove(n,direct)
- if(mob.transforming) return//This is sota the goto stop mobs from moving var
+ if(mob.transforming)
+ return //This is sota the goto stop mobs from moving var
if(isliving(mob))
var/mob/living/L = mob
if(L.incorporeal_move)//Move though walls
Process_Incorpmove(direct)
return
- if(mob.client)
- if(mob.client.view != world.view) // If mob moves while zoomed in with device, unzoom them.
- for(var/obj/item/item in mob.contents)
- if(item.zoom)
- item.zoom(mob)
- break
- if(Process_Grab()) return
+ if(mob.client && mob.client.view != world.view) // If mob moves while zoomed in with device, unzoom them.
+ for(var/obj/item/item in mob)
+ if(item.zoom)
+ item.zoom(mob)
+ break
+
+ // Only meaningful for living mobs.
+ if(Process_Grab())
+ return
if(!mob.canmove)
return
@@ -244,16 +239,18 @@
if(!mob.lastarea)
mob.lastarea = get_area(mob.loc)
- if((istype(mob.loc, /turf/space)) || (mob.lastarea.has_gravity == 0))
- if(!mob.Process_Spacemove(0)) return 0
-
- if(isobj(mob.loc) || ismob(mob.loc))//Inside an object, tell it we moved
- var/atom/O = mob.loc
- return O.relaymove(mob, direct)
-
if(isturf(mob.loc))
+ if(!mob.check_solid_ground())
+ var/allowmove = mob.Allow_Spacemove(0)
+ if(!allowmove)
+ return 0
+ else if(allowmove == -1 && mob.handle_spaceslipping()) //Check to see if we slipped
+ return 0
+ else
+ mob.inertia_dir = 0 //If not then we can reset inertia and move
- if(mob.restrained())//Why being pulled while cuffed prevents you from moving
+
+ if(mob.restrained()) //Why being pulled while cuffed prevents you from moving
for(var/mob/M in range(mob, 1))
if(M.pulling == mob)
if(!M.restrained() && M.stat == 0 && M.canmove && mob.Adjacent(M))
@@ -278,9 +275,6 @@
direct = pick(cardinal)
return mob.buckled.relaymove(mob,direct)
- if(istype(mob.loc, /turf/space)) // Wheelchair driving!
- return // No wheelchair driving in space
-
//TODO: Fuck wheelchairs.
//Toss away all this snowflake code here, and rewrite wheelchairs as a vehicle.
else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair))
@@ -300,8 +294,9 @@
var/tally = mob.movement_delay() + config.walk_speed
- // Apply huuman specific modifiers.
- if (ishuman(mob))
+ // Apply human specific modifiers.
+ var/mob_is_human = ishuman(mob) // Only check this once and just reuse the value.
+ if (mob_is_human)
var/mob/living/carbon/human/H = mob
//If we're sprinting and able to continue sprinting, then apply the sprint bonus ontop of this
if (H.m_intent == "run" && H.species.handle_sprint_cost(H, tally)) //This will return false if we collapse from exhaustion
@@ -313,7 +308,6 @@
move_delay += tally
-
var/tickcomp = 0 //moved this out here so we can use it for vehicles
if(config.Tickcomp)
// move_delay -= 1.3 //~added to the tickcomp calculation below
@@ -330,12 +324,10 @@
move_delay += 1
return mob.pulledby.relaymove(mob, direct)
-
-
//We are now going to move
moving = 1
//Something with pulling things
- if(locate(/obj/item/weapon/grab, mob))
+ if (mob_is_human && (istype(mob:l_hand, /obj/item/weapon/grab) || istype(mob:r_hand, /obj/item/weapon/grab)))
move_delay = max(move_delay, world.time + 7)
var/list/L = mob.ret_grab()
if(istype(L, /list))
@@ -372,28 +364,28 @@
else
. = mob.SelfMove(n, direct)
- for (var/obj/item/weapon/grab/G in mob)
+ for (var/obj/item/weapon/grab/G in list(mob:l_hand, mob:r_hand))
if (G.state == GRAB_NECK)
mob.set_dir(reverse_dir[direct])
G.adjust_position()
+
for (var/obj/item/weapon/grab/G in mob.grabbed_by)
G.adjust_position()
moving = 0
- return .
- return
+ if(isobj(mob.loc) || ismob(mob.loc)) //Inside an object, tell it we moved
+ var/atom/O = mob.loc
+ return O.relaymove(mob, direct)
/mob/proc/SelfMove(turf/n, direct)
return Move(n, direct)
-
///Process_Incorpmove
///Called by client/Move()
///Allows mobs to run though walls
/client/proc/Process_Incorpmove(direct)
var/turf/mobloc = get_turf(mob)
-
switch(mob.incorporeal_move)
if(1)
var/turf/T = get_step(mob, direct)
@@ -404,44 +396,8 @@
mob.forceMove(get_step(mob, direct))
mob.dir = direct
if(2)
- if(prob(50))
- var/locx
- var/locy
- switch(direct)
- if(NORTH)
- locx = mobloc.x
- locy = (mobloc.y+2)
- if(locy>world.maxy)
- return
- if(SOUTH)
- locx = mobloc.x
- locy = (mobloc.y-2)
- if(locy<1)
- return
- if(EAST)
- locy = mobloc.y
- locx = (mobloc.x+2)
- if(locx>world.maxx)
- return
- if(WEST)
- locy = mobloc.y
- locx = (mobloc.x-2)
- if(locx<1)
- return
- else
- return
- mob.forceMove(locate(locx,locy,mobloc.z))
- spawn(0)
- var/limit = 2//For only two trailing shadows.
- for(var/turf/T in getline(mobloc, mob.loc))
- spawn(0)
- anim(T,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir)
- limit--
- if(limit<=0) break
- else
- spawn(0)
- anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir)
- mob.forceMove(get_step(mob, direct))
+ anim(mobloc,mob,'icons/mob/mob.dmi',,"shadow",,mob.dir)
+ mob.forceMove(get_step(mob, direct))
mob.dir = direct
// Crossed is always a bit iffy
for(var/obj/S in mob.loc)
@@ -460,31 +416,33 @@
/mob/proc/Post_Incorpmove()
return
-///Process_Spacemove
-///Called by /client/Move()
-///For moving in space
-///Return 1 for movement 0 for none
-/mob/proc/Process_Spacemove(var/check_drift = 0)
-
+// Checks whether this mob is allowed to move in space
+// Return 1 for movement, 0 for none,
+// -1 to allow movement but with a chance of slipping
+/mob/proc/Allow_Spacemove(var/check_drift = 0)
if(!Check_Dense_Object()) //Nothing to push off of so end here
- update_floating(0)
return 0
- update_floating(1)
-
if(restrained()) //Check to see if we can do things
return 0
- //Check to see if we slipped
- if(prob(slip_chance(5)) && !buckled)
- src << "You slipped! "
- src.inertia_dir = src.last_move
- step(src, src.inertia_dir)
+ return -1
+
+//Checks if a mob has solid ground to stand on
+//If there's no gravity then there's no up or down so naturally you can't stand on anything.
+//For the same reason lattices in space don't count - those are things you grip, presumably.
+/mob/proc/check_solid_ground()
+ if(istype(loc, /turf/space))
return 0
- //If not then we can reset inertia and move
- inertia_dir = 0
+
+ if(!lastarea)
+ lastarea = get_area(loc)
+ if(!lastarea.has_gravity)
+ return 0
+
return 1
+
/mob/proc/Check_Dense_Object() //checks for anything to push off in the vicinity. also handles magboots on gravity-less floors tiles
var/shoegrip = Check_Shoegrip()
@@ -515,6 +473,15 @@
return 0
return prob_slip
+//return 1 if slipped, 0 otherwise
+/mob/proc/handle_spaceslipping()
+ if(prob(slip_chance(5)) && !buckled)
+ to_chat(src, "You slipped! ")
+ src.inertia_dir = src.last_move
+ step(src, src.inertia_dir)
+ return 1
+ return 0
+
// /tg/ movement procs
//The byond version of these verbs wait for the next tick before acting.
diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm
index 6764042dfcd..db179a3b3e4 100644
--- a/code/modules/mob/new_player/login.dm
+++ b/code/modules/mob/new_player/login.dm
@@ -1,4 +1,4 @@
-/var/obj/effect/lobby_image = new/obj/effect/lobby_image()
+/var/obj/effect/lobby_image
/obj/effect/lobby_image
name = "Aurorastation"
@@ -6,7 +6,8 @@
icon = 'icons/misc/title.dmi'
screen_loc = "WEST,SOUTH"
-/obj/effect/lobby_image/initialize()
+/obj/effect/lobby_image/New()
+ ..()
var/list/known_icon_states = icon_states(icon)
for(var/lobby_screen in config.lobby_screens)
if(!(lobby_screen in known_icon_states))
@@ -32,7 +33,8 @@
mind.current = src
loc = null
- client.screen += lobby_image
+ show_title()
+
my_client = client
sight |= SEE_TURFS
player_list |= src
@@ -42,3 +44,12 @@
if(client)
handle_privacy_poll()
client.playtitlemusic()
+
+/mob/new_player/proc/show_title()
+ set waitfor = FALSE
+ if (lobby_image)
+ client.screen += lobby_image
+ return
+
+ sleep(5)
+ .()
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 18e85259a1e..a714a6648cf 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -18,6 +18,10 @@
New()
mob_list += src
+ Destroy()
+ mob_list -= src
+ return ..()
+
verb/new_player_panel()
set src = usr
new_player_panel_proc()
@@ -28,7 +32,7 @@
output +=" "
output += "Setup Character
"
- if(!ticker || ticker.current_state <= GAME_STATE_PREGAME)
+ if(!ROUND_IS_STARTED)
if(ready)
output += "\[ Ready | Not Ready \]
"
else
@@ -67,24 +71,28 @@
Stat()
..()
- if(statpanel("Lobby") && ticker)
+ if(statpanel("Lobby"))
stat("Game ID:", game_id)
- if(ticker.hide_mode)
+ if(SSticker.hide_mode)
stat("Game Mode:", "Secret")
else
- if(ticker.hide_mode == 0)
+ if(SSticker.hide_mode == 0)
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
- if(ticker.current_state == GAME_STATE_PREGAME)
- stat("Time To Start:", "[ticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]")
+ if(SSticker.current_state == GAME_STATE_PREGAME)
+ if (SSticker.lobby_ready)
+ stat("Time To Start:", "[SSticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]")
+ else
+ stat("Time To Start:", "Waiting for Server")
stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]")
totalPlayers = 0
totalPlayersReady = 0
for(var/mob/new_player/player in player_list)
stat("[player.key]", (player.ready)?("(Playing)"):(null))
totalPlayers++
- if(player.ready)totalPlayersReady++
+ if(player.ready)
+ totalPlayersReady++
Topic(href, href_list[])
if(!client) return 0
@@ -94,7 +102,7 @@
return 1
if(href_list["ready"])
- if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started
+ if(SSticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started
// Cannot join without a saved character, if we're on SQL saves.
if (config.sql_saves && !client.prefs.current_character)
alert(src, "You have not saved your character yet. Please do so before readying up.")
@@ -109,6 +117,11 @@
new_player_panel_proc()
if(href_list["observe"])
+ if (SSatoms.initialized < INITIALIZATION_INNEW_REGULAR)
+ // Don't allow players to observe until initialization is more or less complete.
+ // Letting them join too early breaks things, they can wait.
+ src << span("alert", "The server is still initializing, try observing again in a minute or so.")
+ return
if(alert(src,"Are you sure you wish to observe? You will have to wait 30 minutes before being able to respawn!","Player Setup","Yes","No") == "Yes")
if(!client) return 1
@@ -144,7 +157,7 @@
if(href_list["late_join"])
- if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
+ if(SSticker.current_state != GAME_STATE_PLAYING)
usr << "\red The round is either not ready, or has already finished..."
return
@@ -173,7 +186,7 @@
if(!config.enter_allowed)
usr << "There is an administrative lock on entering the game! "
return
- else if(ticker && ticker.mode && ticker.mode.explosion_in_progress)
+ else if(SSticker.mode && SSticker.mode.explosion_in_progress)
usr << "The station is currently exploding. Joining would go poorly. "
return
@@ -300,7 +313,7 @@
proc/AttemptLateSpawn(rank,var/spawning_at)
if(src != usr)
return 0
- if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
+ if(SSticker.current_state != GAME_STATE_PLAYING)
usr << "\red The round is either not ready, or has already finished..."
return 0
if(!config.enter_allowed)
@@ -319,8 +332,11 @@
job_master.AssignRole(src, rank, 1)
var/mob/living/character = create_character() //creates the human and transfers vars and mind
- character = job_master.EquipRank(character, rank, 1) //equips the human
+
+ character = job_master.EquipPersonal(character, rank, 1,spawning_at) //equips the human
+
UpdateFactionList(character)
+
equip_custom_items(character)
// AIs don't need a spawnpoint, they must spawn at an empty core
@@ -335,7 +351,7 @@
character.loc = C.loc
AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]")
- ticker.mode.handle_latejoin(character)
+ SSticker.mode.handle_latejoin(character)
qdel(C)
qdel(src)
@@ -350,11 +366,11 @@
character.buckled.loc = character.loc
character.buckled.set_dir(character.dir)
- ticker.mode.handle_latejoin(character)
+ SSticker.mode.handle_latejoin(character)
if(character.mind.assigned_role != "Cyborg")
data_core.manifest_inject(character)
- ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
+ SSticker.minds += character.mind //Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
//Grab some data from the character prefs for use in random news procs.
@@ -365,7 +381,7 @@
qdel(src)
proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message)
- if (ticker.current_state == GAME_STATE_PLAYING)
+ if (SSticker.current_state == GAME_STATE_PLAYING)
if(character.mind.role_alt_title)
rank = character.mind.role_alt_title
// can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc.
@@ -430,7 +446,7 @@
|| (new_character.species && (chosen_language.name in new_character.species.secondary_langs)))
new_character.add_language(lang)
- if(ticker.random_players)
+ if(SSticker.random_players)
new_character.gender = pick(MALE, FEMALE)
client.prefs.real_name = random_name(new_character.gender)
client.prefs.randomize_appearance_for(new_character)
diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm
index 15ab1a8e9cc..879a5c71673 100644
--- a/code/modules/modular_computers/NTNet/NTNet_relay.dm
+++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm
@@ -1,8 +1,3 @@
-#define NTR_NORMAL 0
-#define NTR_OVERLOAD 1
-#define NTR_DISABLE 2
-#define NTR_POWERLOSS 3
-
// Relays don't handle any actual communication. Global NTNet datum does that, relays only tell the datum if it should or shouldn't work.
/obj/machinery/ntnet_relay
name = "NTNet Quantum Relay"
@@ -24,8 +19,6 @@
var/dos_capacity = 500 // Amount of DoS "packets" in buffer required to crash the relay
var/dos_dissipate = 1 // Amount of DoS "packets" dissipated over time.
- var/overlay_cache = list()
-
// TODO: Implement more logic here. For now it's only a placeholder.
/obj/machinery/ntnet_relay/operable()
if(!..(EMPED))
@@ -36,44 +29,25 @@
return 0
return 1
-/obj/machinery/ntnet_relay/proc/get_state()
- if (!enabled)
- return NTR_DISABLE
- if (dos_failure)
- return NTR_OVERLOAD
- if (!operable())
- return NTR_POWERLOSS
-
- return NTR_NORMAL
-
/obj/machinery/ntnet_relay/update_icon()
- var/state = get_state()
icon_state = initial(icon_state)
+ cut_overlays()
+
if (panel_open)
icon_state += "_o"
- switch (state)
- if (NTR_NORMAL)
- overlays += overlay_cache["ok"]
- overlays -= overlay_cache["problem"]
- overlays -= overlay_cache["error"]
+ if (!operable())
+ icon_state += "_off"
- if (NTR_OVERLOAD)
- overlays -= overlay_cache["ok"]
- overlays += overlay_cache["problem"]
- overlays -= overlay_cache["error"]
-
- if (NTR_DISABLE)
- overlays -= overlay_cache["ok"]
- overlays -= overlay_cache["problem"]
- overlays += overlay_cache["error"]
+ else if (dos_failure)
+ add_overlay("ntnet_o_problem")
+
+ else if (!enabled)
+ add_overlay("ntnet_o_error")
- if (NTR_POWERLOSS)
- overlays -= overlay_cache["ok"]
- overlays -= overlay_cache["problem"]
- overlays -= overlay_cache["error"]
- icon_state += "_off"
+ else
+ add_overlay("ntnet_o_ok")
/obj/machinery/ntnet_relay/process()
if(operable())
@@ -133,11 +107,6 @@
component_parts += new /obj/item/stack/cable_coil(src,15)
component_parts += new /obj/item/weapon/circuitboard/ntnet_relay(src)
- overlay_cache = list()
- overlay_cache["ok"] = image('icons/obj/machines/telecomms.dmi', "ntnet_o_ok")
- overlay_cache["problem"] = image('icons/obj/machines/telecomms.dmi', "ntnet_o_problem")
- overlay_cache["error"] = image('icons/obj/machines/telecomms.dmi', "ntnet_o_error")
-
update_icon()
if(ntnet_global)
@@ -154,7 +123,7 @@
for(var/datum/computer_file/program/ntnet_dos/D in dos_sources)
D.target = null
D.error = "Connection to quantum relay severed"
- ..()
+ return ..()
/obj/machinery/ntnet_relay/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if(istype(W, /obj/item/weapon/screwdriver))
@@ -175,7 +144,3 @@
qdel(src)
return
..()
-
-#undef NTR_NORMAL
-#undef NTR_OVERLOAD
-#undef NTR_DISABLE
\ No newline at end of file
diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm
index 5ecc044b71a..4c9e9454c03 100644
--- a/code/modules/modular_computers/computers/modular_computer/core.dm
+++ b/code/modules/modular_computers/computers/modular_computer/core.dm
@@ -50,24 +50,25 @@
for (var/datum/computer_file/program/prog in programs)
hard_drive.store_file(prog)
-/obj/item/modular_computer/New()
- processing_objects.Add(src)
+/obj/item/modular_computer/Initialize()
+ . = ..()
+ START_PROCESSING(SSprocessing, src)
install_default_hardware()
if(hard_drive)
install_default_programs()
update_icon()
- ..()
/obj/item/modular_computer/Destroy()
kill_program(1)
for(var/obj/item/weapon/computer_hardware/CH in src.get_all_components())
uninstall_component(null, CH)
qdel(CH)
+ STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/item/modular_computer/emag_act(var/remaining_charges, var/mob/user)
if(computer_emagged)
- to_chat(user, "\The [src] was already emagged.")
+ to_chat(user, "\The [src] has already been emagged.")
return NO_EMAG_ACT
else
computer_emagged = 1
@@ -77,14 +78,14 @@
/obj/item/modular_computer/update_icon()
icon_state = icon_state_unpowered
- overlays.Cut()
+ cut_overlays()
if(!enabled)
var/probably_working = hard_drive && processor_unit && damage < broken_damage && (apc_power(0) || battery_power(0))
if(icon_state_screensaver && probably_working)
if (is_holographic)
holographic_overlay(src, src.icon, icon_state_screensaver)
else
- overlays += image(icon_state_screensaver)
+ add_overlay(icon_state_screensaver)
if (screensaver_light_range && probably_working)
set_light(screensaver_light_range, 1, screensaver_light_color ? screensaver_light_color : "#FFFFFF")
@@ -96,13 +97,13 @@
if (is_holographic)
holographic_overlay(src, src.icon, state)
else
- overlays += image(state)
+ add_overlay(state)
set_light(light_strength, l_color = active_program.color)
else
if (is_holographic)
holographic_overlay(src, src.icon, icon_state_menu)
else
- overlays += image(icon_state_menu)
+ add_overlay(icon_state_menu)
set_light(light_strength, l_color = menu_light_color)
/obj/item/modular_computer/proc/turn_on(var/mob/user)
diff --git a/code/modules/modular_computers/computers/modular_computer/damage.dm b/code/modules/modular_computers/computers/modular_computer/damage.dm
index 99cac0c0604..fc26946eaa2 100644
--- a/code/modules/modular_computers/computers/modular_computer/damage.dm
+++ b/code/modules/modular_computers/computers/modular_computer/damage.dm
@@ -14,8 +14,8 @@
H.forceMove(newloc)
if(prob(25))
H.take_damage(rand(10,30))
- //relay_qdel()
- qdel()
+
+ qdel(src)
/obj/item/modular_computer/proc/take_damage(var/amount, var/component_probability, var/damage_casing = 1, var/randomize = 1)
if(randomize)
diff --git a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
index cd346cc444e..3bf90b564ac 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
@@ -29,5 +29,5 @@
if(anchored)
..()
else
- overlays.Cut()
+ cut_overlays()
icon_state = icon_state_closed
diff --git a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm
index a17087f85a9..2a3162ce840 100644
--- a/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm
+++ b/code/modules/modular_computers/computers/subtypes/preset_telescreen.dm
@@ -8,3 +8,7 @@
/obj/item/modular_computer/telescreen/preset/generic/
_app_preset_name = "wallgeneric"
enrolled = 1
+
+/obj/item/modular_computer/telescreen/preset/trashcompactor/
+ _app_preset_name = "trashcompactor"
+ enrolled = 1
diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm
index c5c1d9e86e5..7603219cb46 100644
--- a/code/modules/modular_computers/file_system/computer_file.dm
+++ b/code/modules/modular_computers/file_system/computer_file.dm
@@ -23,7 +23,7 @@ var/global/file_uid = 0
if(holder.holder2 && holder.holder2.active_program == src)
holder.holder2.kill_program(1)
holder = null
- ..()
+ return ..()
// Returns independent copy of this file.
/datum/computer_file/proc/clone(var/rename = 0)
@@ -36,4 +36,4 @@ var/global/file_uid = 0
else
temp.filename = filename
temp.filetype = filetype
- return temp
\ No newline at end of file
+ return temp
diff --git a/code/modules/modular_computers/file_system/programs/app_presets.dm b/code/modules/modular_computers/file_system/programs/app_presets.dm
index 56d6d21c815..47c4829b7b8 100644
--- a/code/modules/modular_computers/file_system/programs/app_presets.dm
+++ b/code/modules/modular_computers/file_system/programs/app_presets.dm
@@ -144,3 +144,14 @@
new/datum/computer_file/program/aidiag()
)
return _prg_list
+
+/datum/modular_computer_app_presets/trashcompactor
+ name = "trashcompactor"
+ display_name = "Trash Compactor"
+ description = "A preset for the Trash Compactor Wall Console"
+ available = 0
+/datum/modular_computer_app_presets/trashcompactor/return_install_programs()
+ var/list/_prg_list = list(
+ new/datum/computer_file/program/crushercontrol()
+ )
+ return _prg_list
diff --git a/code/modules/modular_computers/file_system/programs/civilian/crusher_control.dm b/code/modules/modular_computers/file_system/programs/civilian/crusher_control.dm
new file mode 100644
index 00000000000..0c6c98c4901
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/civilian/crusher_control.dm
@@ -0,0 +1,114 @@
+/datum/computer_file/program/crushercontrol
+ filename = "crushercontrol"
+ filedesc = "Crusher Control"
+ extended_desc = "Application to Control the Crusher"
+ size = 8
+ requires_ntnet = 0
+ available_on_ntnet = 0
+ required_access_download = access_hop
+ required_access_run = access_janitor
+ usage_flags = PROGRAM_TELESCREEN
+ nanomodule_path = /datum/nano_module/program/crushercontrol/
+
+/datum/nano_module/program/crushercontrol/
+ name = "Crusher Control"
+ var/message = "" // Message to return to the user
+ var/extending = 0 //If atleast one of the pistons is extending
+ var/list/pistons = list() //List of pistons linked to the program
+ var/list/airlocks = list() //List of airlocks linked to the program
+ var/list/status_airlocks = list() //Status of the airlocks
+ var/list/status_pistons = list() //Status of the pistons
+
+/datum/nano_module/program/crushercontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
+ var/list/data = host.initial_data()
+
+ status_pistons = list()
+ extending = 0
+
+ //Cycle through the pistons and get their status
+ var/i = 1
+ for(var/obj/machinery/crusher_base/pstn in pistons)
+ var/num_progress = pstn.get_num_progress()
+ var/is_blocked = pstn.is_blocked()
+ var/action = pstn.get_action()
+ if(action == "extend")
+ extending = 1
+ status_pistons.Add(list(list(
+ "progress"=num_progress,
+ "blocked"=is_blocked,
+ "action"=action,
+ "piston"=i
+ )))
+ i++
+
+ data["message"] = message
+ data["airlock_count"] = airlocks.len
+ data["piston_count"] = pistons.len
+ data["status_airlocks"] = status_airlocks
+ data["status_pistons"] = status_pistons
+ data["extending"] = extending
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "crushercontrol.tmpl", name, 500, 350, state = state)
+ ui.auto_update_layout = 1
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/datum/nano_module/program/crushercontrol/Topic(href, href_list)
+ if(..())
+ return 1
+
+ if(href_list["initialize"])
+ pistons = list()
+ for(var/obj/machinery/crusher_base/pstn in orange(10,src.host))
+ pistons += pstn
+
+ airlocks = list()
+ for(var/obj/machinery/door/airlock/arlk in orange(10,src.host))
+ if( arlk.id_tag != "crusher")
+ continue
+ airlocks += arlk
+
+ airlock_open()
+
+ if(href_list["hatch_open"])
+ message = "Opening the Hatch"
+ airlock_open()
+
+ if(href_list["hatch_close"])
+ message = "Closing the Hatch"
+ airlock_close()
+
+ if(href_list["crush"])
+ message = "Crushing"
+ airlock_close()
+ crush_start()
+
+ if(href_list["abort"])
+ message = "Aborting"
+ crush_stop()
+
+ if(href_list["close"])
+ message = null
+
+
+/datum/nano_module/program/crushercontrol/proc/airlock_open()
+ for(var/obj/machinery/door/airlock/arlk in airlocks)
+ arlk.unlock()
+ arlk.open()
+ arlk.lock()
+
+/datum/nano_module/program/crushercontrol/proc/airlock_close()
+ for(var/obj/machinery/door/airlock/arlk in airlocks)
+ arlk.unlock()
+ arlk.close()
+ arlk.lock()
+
+/datum/nano_module/program/crushercontrol/proc/crush_start()
+ for(var/obj/machinery/crusher_base/pstn in pistons)
+ pstn.crush_start()
+
+/datum/nano_module/program/crushercontrol/proc/crush_stop()
+ for(var/obj/machinery/crusher_base/pstn in pistons)
+ pstn.crush_abort()
diff --git a/code/modules/modular_computers/file_system/programs/command/comm.dm b/code/modules/modular_computers/file_system/programs/command/comm.dm
index e8d18396614..393a5465fea 100644
--- a/code/modules/modular_computers/file_system/programs/command/comm.dm
+++ b/code/modules/modular_computers/file_system/programs/command/comm.dm
@@ -243,7 +243,7 @@
/datum/nano_module/program/comm/proc/post_status(var/command, var/data1, var/data2)
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
+ var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
if(!frequency) return
diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm
index d19312a320e..b995d36b8ce 100644
--- a/code/modules/modular_computers/hardware/ai_slot.dm
+++ b/code/modules/modular_computers/hardware/ai_slot.dm
@@ -40,4 +40,4 @@
if(stored_card)
stored_card.forceMove(get_turf(holder2))
holder2 = null
- ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm
index 35eddbd5ec9..069dba3d600 100644
--- a/code/modules/modular_computers/hardware/card_slot.dm
+++ b/code/modules/modular_computers/hardware/card_slot.dm
@@ -15,4 +15,4 @@
if(stored_card)
stored_card.forceMove(get_turf(holder2))
holder2 = null
- ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index ff97edb81d1..e5b2987a045 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -162,7 +162,7 @@
if(holder2 && (holder2.hard_drive == src))
holder2.hard_drive = null
stored_files = null
- ..()
+ return ..()
/obj/item/weapon/computer_hardware/hard_drive/New()
install_default_programs()
diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm
index 87c69d55075..b92f2dc05f0 100644
--- a/code/modules/modular_computers/hardware/nano_printer.dm
+++ b/code/modules/modular_computers/hardware/nano_printer.dm
@@ -43,4 +43,4 @@
if(holder2 && (holder2.nano_printer == src))
holder2.nano_printer = null
holder2 = null
- ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm
index 0ef1c6af108..97efe50f3ae 100644
--- a/code/modules/modular_computers/hardware/network_card.dm
+++ b/code/modules/modular_computers/hardware/network_card.dm
@@ -52,7 +52,7 @@ var/global/ntnet_card_uid = 1
if(holder2 && (holder2.network_card == src))
holder2.network_card = null
holder2 = null
- ..()
+ return ..()
// Returns a string identifier of this network card
/obj/item/weapon/computer_hardware/network_card/proc/get_network_tag()
@@ -92,4 +92,4 @@ var/global/ntnet_card_uid = 1
/obj/item/weapon/computer_hardware/network_card/Destroy()
if(holder2 && (holder2.network_card == src))
holder2.network_card = null
- ..()
+ return ..()
diff --git a/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm b/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm
index 0648f968b5c..b0b9378b7da 100644
--- a/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm
+++ b/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm
@@ -42,7 +42,8 @@
desc = "A crate containing a backup of all the NT Software available"
name = "Backup Software Crate"
-/obj/structure/closet/crate/software_backup/initialize()
+/obj/structure/closet/crate/software_backup/Initialize()
+ . = ..()
for(var/F in typesof(/datum/computer_file/program))
var/datum/computer_file/program/prog = new F
// Invalid type (shouldn't be possible but just in case), invalid filetype (not executable program) or invalid filename (unset program)
diff --git a/code/modules/modular_computers/hardware/tesla_link.dm b/code/modules/modular_computers/hardware/tesla_link.dm
index d8ee0e0936d..b4588bd8740 100644
--- a/code/modules/modular_computers/hardware/tesla_link.dm
+++ b/code/modules/modular_computers/hardware/tesla_link.dm
@@ -12,4 +12,4 @@
/obj/item/weapon/computer_hardware/tesla_link/Destroy()
if(holder2 && (holder2.tesla_link == src))
holder2.tesla_link = null
- ..()
+ return ..()
diff --git a/code/modules/multiz/basic.dm b/code/modules/multiz/basic.dm
index e76c6516aa7..0ed4e5364a5 100644
--- a/code/modules/multiz/basic.dm
+++ b/code/modules/multiz/basic.dm
@@ -11,25 +11,43 @@ var/z_levels = 0 // Each bit represents a connection between adjacent levels. S
qdel(src)
// The storage of connections between adjacent levels means some bitwise magic is needed.
-proc/HasAbove(var/z)
+/proc/HasAbove(var/z)
if(z >= world.maxz || z > 16 || z < 1)
return 0
return z_levels & (1 << (z - 1))
-proc/HasBelow(var/z)
+/proc/HasBelow(var/z)
if(z > world.maxz || z > 17 || z < 2)
return 0
return z_levels & (1 << (z - 2))
// Thankfully, no bitwise magic is needed here.
-proc/GetAbove(var/atom/atom)
+/proc/GetAbove(var/atom/atom)
var/turf/turf = get_turf(atom)
if(!turf)
return null
return HasAbove(turf.z) ? get_step(turf, UP) : null
-proc/GetBelow(var/atom/atom)
+/proc/GetBelow(var/atom/atom)
var/turf/turf = get_turf(atom)
if(!turf)
return null
return HasBelow(turf.z) ? get_step(turf, DOWN) : null
+
+/proc/GetConnectedZlevels(z)
+ . = list(z)
+ for(var/level = z, HasBelow(level), level--)
+ . |= level-1
+ for(var/level = z, HasAbove(level), level++)
+ . |= level+1
+
+proc/AreConnectedZLevels(var/zA, var/zB)
+ return zA == zB || (zB in GetConnectedZlevels(zA))
+
+/proc/get_zstep(ref, dir)
+ if(dir == UP)
+ . = GetAbove(ref)
+ else if (dir == DOWN)
+ . = GetBelow(ref)
+ else
+ . = get_step(ref, dir)
\ No newline at end of file
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index dd0a93fec11..bd0652e4e13 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -1,51 +1,196 @@
-/obj/item/weapon/tank/jetpack/verb/moveup()
+/mob/verb/up()
set name = "Move Upwards"
- set category = "Object"
+ set category = "IC"
- . = 1
- if(!allow_thrust(0.01, usr))
- usr << "\The [src] is disabled. "
+ if(zMove(UP))
+ to_chat(usr, "You move upwards. ")
+
+/mob/verb/down()
+ set name = "Move Down"
+ set category = "IC"
+
+ if(zMove(DOWN))
+ to_chat(usr, "You move down. ")
+
+/mob/proc/zMove(direction)
+ if(eyeobj)
+ return eyeobj.zMove(direction)
+ if(!can_ztravel())
+ to_chat(usr, "You lack means of travel in that direction. ")
return
- var/turf/above = GetAbove(src)
- if(!istype(above))
- usr << "There is nothing of interest in this direction. "
- return
+ var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
- if(!istype(above, /turf/space) && !istype(above, /turf/simulated/open))
- usr << "You bump against \the [above]. "
- return
+ if(!destination)
+ to_chat(usr, "There is nothing of interest in this direction. ")
+ return 0
- for(var/atom/A in above)
- if(A.density)
- usr << "\The [A] blocks you. "
- return
+ var/turf/start = get_turf(src)
+ if(!start.CanZPass(src, direction))
+ to_chat(usr, "\The [start] is in the way. ")
+ return 0
+ if(!destination.CanZPass(src, direction))
+ to_chat(usr, "You bump against \the [destination]. ")
+ return 0
- usr.Move(above)
- usr << "You move upwards. "
+ var/area/area = get_area(src)
+ if(direction == UP && area.has_gravity)
+ to_chat(usr, "Gravity stops you from moving upward. ")
+ return 0
-/obj/item/weapon/tank/jetpack/verb/movedown()
- set name = "Move Downwards"
- set category = "Object"
+ for(var/atom/A in destination)
+ if(!A.CanPass(src, start, 1.5, 0))
+ to_chat(usr, "\The [A] blocks you. ")
+ return 0
+ Move(destination)
+ return 1
- . = 1
- if(!allow_thrust(0.01, usr))
- usr << "\The [src] is disabled. "
+/mob/eye/zMove(direction)
+ var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
+ if(destination)
+ setLoc(destination)
+ else
+ to_chat(usr, "There is nothing of interest in this direction. ")
+
+/mob/dead/observer/zMove(direction)
+ var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
+ if(destination)
+ forceMove(destination)
+ else
+ to_chat(usr, "There is nothing of interest in this direction. ")
+
+/mob/living/carbon/human/bst/zMove(direction)
+ var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
+ if(destination)
+ forceMove(destination)
+ else
+ to_chat(usr, "There is nothing of interest in this direction. ")
+
+/mob/proc/can_ztravel()
+ return 0
+
+/mob/dead/observer/can_ztravel()
+ return 1
+
+/mob/living/carbon/human/can_ztravel()
+ if(incapacitated())
+ return 0
+
+ if(Allow_Spacemove())
+ return 1
+
+ if(Check_Shoegrip()) //scaling hull with magboots
+ for(var/turf/simulated/T in trange(1,src))
+ if(T.density)
+ return 1
+
+/mob/living/silicon/robot/can_ztravel()
+ if(incapacitated() || is_dead())
+ return 0
+
+ if(Allow_Spacemove()) //Checks for active jetpack
+ return 1
+
+ for(var/turf/simulated/T in trange(1,src)) //Robots get "magboots"
+ if(T.density)
+ return 1
+
+//FALLING STUFF
+
+//Holds fall checks that should not be overriden by children
+/atom/movable/proc/fall()
+ if(!isturf(loc))
return
var/turf/below = GetBelow(src)
- if(!istype(below))
- usr << "There is nothing of interest in this direction. "
+ if(!below)
return
- if(below.density)
- usr << "You bump against \the [below]. "
+ var/turf/T = loc
+ if(!T.CanZPass(src, DOWN) || !below.CanZPass(src, DOWN))
return
+ // No gravity in space, apparently.
+ var/area/area = get_area(src)
+ if(!area.has_gravity())
+ return
+
+ if(throwing)
+ return
+
+ if(can_fall())
+ handle_fall(below)
+
+//For children to override
+/atom/movable/proc/can_fall()
+ if(anchored)
+ return FALSE
+
+ if(locate(/obj/structure/lattice, loc))
+ return FALSE
+
+ // See if something prevents us from falling.
+ var/turf/below = GetBelow(src)
for(var/atom/A in below)
- if(A.density)
- usr << "\The [A] blocks you. "
+ if(!A.CanPass(src, src.loc))
+ return FALSE
+
+ return TRUE
+
+/obj/effect/can_fall()
+ return FALSE
+
+/obj/effect/decal/cleanable/can_fall()
+ return TRUE
+
+/obj/item/pipe/can_fall()
+ var/turf/simulated/open/below = loc
+ below = below.below
+
+ . = ..()
+
+ if(anchored)
+ return FALSE
+
+ if((locate(/obj/structure/disposalpipe/up) in below) || locate(/obj/machinery/atmospherics/pipe/zpipe/up in below))
+ return FALSE
+
+/atom/movable/proc/handle_fall(var/turf/landing)
+ Move(landing)
+ if(locate(/obj/structure/stairs) in landing)
+ return 1
+
+ if(istype(landing, /turf/simulated/open))
+ visible_message("\The [src] falls from the level above through \the [landing]!", "You hear a whoosh of displaced air.")
+ else if(!istype(landing, /turf/space))
+ visible_message("\The [src] falls from the level above and slams onto \the [landing]!", "You hear something slam onto the floor.")
+
+/mob/living/carbon/human/handle_fall(var/turf/landing)
+ if(..())
+ return
+
+ var/area/area1 = get_area(landing)
+ if(!area1.has_gravity())
+ return
+
+ if(istype(landing, /turf/simulated/open))
+ var/turf/simulated/open/open = landing
+ var/area/area2 = get_area(open.below)
+ if(!area2.has_gravity())
return
- usr.Move(below)
- usr << "You move downwards. "
+ var/damage = 20
+ apply_damage(rand(0, damage), BRUTE, "head")
+ apply_damage(rand(0, damage), BRUTE, "chest")
+ apply_damage(10 + rand(10, damage), BRUTE, "l_leg")
+ apply_damage(10 + rand(10, damage), BRUTE, "r_leg")
+ apply_damage(rand(0, damage), BRUTE, "l_arm")
+ apply_damage(rand(0, damage), BRUTE, "r_arm")
+ Weaken(2)
+ updatehealth()
+
+/mob/living/carbon/human/bst/can_fall()
+ return FALSE
+
+/mob/living/carbon/human/bst/handle_fall(turf/landing)
+ return
diff --git a/code/modules/multiz/openspace.dm b/code/modules/multiz/openspace.dm
new file mode 100644
index 00000000000..e2d09915466
--- /dev/null
+++ b/code/modules/multiz/openspace.dm
@@ -0,0 +1,108 @@
+/turf
+ // Reference to any open turf that might be above us to speed up atom Entered() updates.
+ var/tmp/turf/simulated/open/above
+ var/tmp/oo_light_set // If the turf has had a light set by starlight.
+
+/turf/Entered(atom/movable/thing, atom/oldLoc)
+ . = ..()
+ if (above && !istype(oldLoc, /turf/simulated/open))
+ above.update_icon()
+
+/turf/Destroy()
+ above = null
+ return ..()
+
+/atom/movable
+ var/tmp/atom/movable/openspace/overlay/bound_overlay // The overlay that is directly mirroring us that we proxy movement to.
+ var/no_z_overlay // If TRUE, this atom will not be drawn on open turfs.
+
+/atom/movable/Destroy()
+ . = ..()
+ if (bound_overlay)
+ if (istype(bound_overlay.loc, /turf/simulated/open))
+ bound_overlay.loc:update_icon()
+
+ QDEL_NULL(bound_overlay)
+
+/atom/movable/Move()
+ . = ..()
+ if (bound_overlay)
+ // These should only ever be located on open-turf tiles.
+ var/turf/the_loc = bound_overlay.loc
+ if (!istype(the_loc, /turf/simulated/open))
+ addtimer(CALLBACK(bound_overlay, /atom/movable/openspace/overlay/.proc/check_existence), 1 SECOND, TIMER_UNIQUE | TIMER_OVERRIDE)
+ else
+ bound_overlay.forceMove(get_step(src, UP))
+
+/atom/movable/forceMove(atom/dest)
+ . = ..(dest)
+ if (bound_overlay)
+ // These should only ever be located on open-turf tiles.
+ var/turf/the_loc = bound_overlay.loc
+ if (!istype(the_loc, /turf/simulated/open))
+ addtimer(CALLBACK(bound_overlay, /atom/movable/openspace/overlay/.proc/check_existence), 1 SECOND, TIMER_UNIQUE)
+ else
+ bound_overlay.forceMove(get_step(src, UP))
+
+/atom/movable/proc/update_oo()
+ if (!bound_overlay)
+ return
+
+ // check_existence returns TRUE if the overlay is valid.
+ if (bound_overlay.check_existence())
+ SSopenturf.queued_overlays += bound_overlay
+
+/atom/movable/proc/get_above_oo()
+ . = list()
+ var/atom/movable/curr = src
+ while (curr.bound_overlay)
+ . += curr.bound_overlay
+ curr = curr.bound_overlay
+
+// -- Openspace movables --
+
+/atom/movable/openspace
+ name = ""
+ simulated = FALSE
+ anchored = TRUE
+ mouse_opacity = FALSE
+
+/atom/movable/openspace/can_fall()
+ return FALSE
+
+// No blowing up abstract objects.
+/atom/movable/openspace/ex_act(ex_sev)
+ return
+
+/atom/movable/openspace/singularity_act()
+ return
+
+/atom/movable/openspace/singularity_pull()
+ return
+
+/atom/movable/openspace/singuloCanEat()
+ return
+
+// Used to darken the atoms on the openturf without fucking up colors.
+/atom/movable/openspace/multiplier
+ name = "openspace multiplier"
+ desc = "You shouldn't see this."
+ icon = 'icons/misc/openspace.dmi'
+ icon_state = "white"
+ plane = OPENTURF_CAP_PLANE
+ blend_mode = BLEND_MULTIPLY
+ color = list(
+ 0.75, 0, 0,
+ 0, 0.75, 0,
+ 0, 0, 0.75
+ )
+ no_z_overlay = TRUE
+
+/atom/movable/openspace/multiplier/Destroy()
+ var/turf/simulated/open/myturf = loc
+ if (istype(myturf))
+ myturf.shadower = null
+
+ return ..()
+
+// /atom/movable/openspace/overlay is in openspace_overlay.dm
diff --git a/code/modules/multiz/openspace_overlay.dm b/code/modules/multiz/openspace_overlay.dm
new file mode 100644
index 00000000000..abbacc12a1f
--- /dev/null
+++ b/code/modules/multiz/openspace_overlay.dm
@@ -0,0 +1,43 @@
+// The visual representation of an atom under an openspace turf.
+/atom/movable/openspace/overlay
+ plane = OPENTURF_MAX_PLANE
+ var/atom/movable/associated_atom
+ var/depth
+
+/atom/movable/openspace/overlay/New()
+ SSopenturf.openspace_overlays += src
+
+/atom/movable/openspace/overlay/Destroy()
+ SSopenturf.openspace_overlays -= src
+
+ if (associated_atom)
+ associated_atom.bound_overlay = null
+ associated_atom = null
+
+ return ..()
+
+/atom/movable/openspace/overlay/attackby(obj/item/W, mob/user)
+ user << span("notice", "\The [src] is too far away.")
+
+/atom/movable/openspace/overlay/attack_hand(mob/user as mob)
+ user << span("notice", "You cannot reach \the [src] from here.")
+
+/atom/movable/openspace/overlay/attack_generic(mob/user as mob)
+ user << span("notice", "You cannot reach \the [src] from here.")
+
+/atom/movable/openspace/overlay/forceMove(atom/dest)
+ . = ..()
+ check_existence()
+
+/atom/movable/openspace/overlay/Move()
+ . = ..()
+ check_existence()
+
+// Checks if we've moved off of an openturf.
+// Returns TRUE if we're continuing to exist, FALSE if we're deleting ourselves.
+/atom/movable/openspace/overlay/proc/check_existence()
+ if (!istype(loc, /turf/simulated/open))
+ qdel(src)
+ return FALSE
+ else
+ return TRUE
diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm
index 1cb5b9b4da7..9ed5908b02e 100644
--- a/code/modules/multiz/pipes.dm
+++ b/code/modules/multiz/pipes.dm
@@ -88,7 +88,7 @@ obj/machinery/atmospherics/pipe/zpipe/Destroy()
node1.disconnect(src)
if(node2)
node2.disconnect(src)
- ..()
+ return ..()
obj/machinery/atmospherics/pipe/zpipe/pipeline_expansion()
return list(node1, node2)
@@ -192,7 +192,6 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers
name = "upwards scrubbers pipe"
desc = "A scrubbers pipe segment to connect upwards."
connect_types = CONNECT_TYPE_SCRUBBER
- layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -201,7 +200,6 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply
name = "upwards supply pipe"
desc = "A supply pipe segment to connect upwards."
connect_types = CONNECT_TYPE_SUPPLY
- layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -210,7 +208,6 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers
name = "downwards scrubbers pipe"
desc = "A scrubbers pipe segment to connect downwards."
connect_types = CONNECT_TYPE_SCRUBBER
- layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -219,6 +216,16 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply
name = "downwards supply pipe"
desc = "A supply pipe segment to connect downwards."
connect_types = CONNECT_TYPE_SUPPLY
- layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
+
+// Colored misc. pipes
+obj/machinery/atmospherics/pipe/zpipe/up/cyan
+ color = PIPE_COLOR_CYAN
+obj/machinery/atmospherics/pipe/zpipe/down/cyan
+ color = PIPE_COLOR_CYAN
+
+obj/machinery/atmospherics/pipe/zpipe/up/red
+ color = PIPE_COLOR_RED
+obj/machinery/atmospherics/pipe/zpipe/down/red
+ color = PIPE_COLOR_RED
diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm
index 36a606bfcf9..6f0b926cf6a 100644
--- a/code/modules/multiz/structures.dm
+++ b/code/modules/multiz/structures.dm
@@ -4,54 +4,124 @@
/obj/structure/ladder
name = "ladder"
- desc = "A ladder. You can climb it up and down."
- icon_state = "ladderdown"
+ desc = "A ladder. You can climb it up and down."
+ icon_state = "ladder01"
icon = 'icons/obj/structures.dmi'
density = 0
opacity = 0
anchored = 1
- var/obj/structure/ladder/target
+ var/allowed_directions = DOWN
+ var/obj/structure/ladder/target_up
+ var/obj/structure/ladder/target_down
- initialize()
- // the upper will connect to the lower
- if(icon_state == "ladderup")
- return
+ var/const/climb_time = 2 SECONDS
+/obj/structure/ladder/Initialize()
+ . = ..()
+ // the upper will connect to the lower
+ if(allowed_directions & DOWN) //we only want to do the top one, as it will initialize the ones before it.
for(var/obj/structure/ladder/L in GetBelow(src))
- if(L.icon_state == "ladderup")
- target = L
- L.target = src
+ if(L.allowed_directions & UP)
+ target_down = L
+ L.target_up = src
return
+ update_icon()
- Destroy()
- if(target && icon_state == "ladderdown")
- qdel(target)
- return ..()
+/obj/structure/ladder/Destroy()
+ if(target_down)
+ target_down.target_up = null
+ target_down = null
+ if(target_up)
+ target_up.target_down = null
+ target_up = null
+ return ..()
- attackby(obj/item/C as obj, mob/user as mob)
- . = ..()
- attack_hand(user)
+/obj/structure/ladder/attackby(obj/item/C as obj, mob/user as mob)
+ attack_hand(user)
+ return
+
+/obj/structure/ladder/attack_hand(var/mob/M)
+ if(!M.may_climb_ladders(src))
return
- attack_hand(var/mob/M)
- if(!target || !istype(target.loc, /turf))
- M << "\The [src] is incomplete and can't be climbed. "
+ var/obj/structure/ladder/target_ladder = getTargetLadder(M)
+ if(!target_ladder)
+ return
+ if(!M.Move(get_turf(src)))
+ to_chat(M, "You fail to reach \the [src]. ")
+ return
+
+ var/direction = target_ladder == target_up ? "up" : "down"
+
+ M.visible_message("\The [M] begins climbing [direction] \the [src]! ",
+ "You begin climbing [direction] \the [src]!",
+ "You hear the grunting and clanging of a metal ladder being used.")
+
+ target_ladder.audible_message("You hear something coming [direction] \the [src] ")
+
+ if(do_after(M, climb_time))
+ climbLadder(M, target_ladder)
+
+/obj/structure/ladder/attack_ghost(var/mob/M)
+ var/target_ladder = getTargetLadder(M)
+ if(target_ladder)
+ M.forceMove(get_turf(target_ladder))
+
+/obj/structure/ladder/proc/getTargetLadder(var/mob/M)
+ if((!target_up && !target_down) || (target_up && !istype(target_up.loc, /turf) || (target_down && !istype(target_down.loc,/turf))))
+ to_chat(M, "\The [src] is incomplete and can't be climbed. ")
+ return
+ if(target_down && target_up)
+ var/direction = alert(M,"Do you want to go up or down?", "Ladder", "Up", "Down", "Cancel")
+
+ if(direction == "Cancel")
return
- var/turf/T = target.loc
- for(var/atom/A in T)
- if(A.density)
- M << "\A [A] is blocking \the [src]. "
- return
+ if(!M.may_climb_ladders(src))
+ return
- M.visible_message("\A [M] climbs [icon_state == "ladderup" ? "up" : "down"] \a [src]! ",
- "You climb [icon_state == "ladderup" ? "up" : "down"] \the [src]!",
- "You hear the grunting and clanging of a metal ladder being used.")
- M.Move(T)
+ switch(direction)
+ if("Up")
+ return target_up
+ if("Down")
+ return target_down
+ else
+ return target_down || target_up
- CanPass(obj/mover, turf/source, height, airflow)
- return airflow || !density
+/mob/proc/may_climb_ladders(var/ladder)
+ if(!Adjacent(ladder))
+ to_chat(src, "You need to be next to \the [ladder] to start climbing. ")
+ return FALSE
+ if(incapacitated())
+ to_chat(src, "You are physically unable to climb \the [ladder]. ")
+ return FALSE
+ return TRUE
+
+/mob/observer/ghost/may_climb_ladders(var/ladder)
+ return TRUE
+
+/obj/structure/ladder/proc/climbLadder(var/mob/M, var/target_ladder)
+ var/turf/T = get_turf(target_ladder)
+ for(var/atom/A in T)
+ if(!A.CanPass(M, M.loc, 1.5, 0))
+ to_chat(M, "\The [A] is blocking \the [src]. ")
+ return FALSE
+ return M.Move(T)
+
+/obj/structure/ladder/CanPass(obj/mover, turf/source, height, airflow)
+ return airflow || !density
+
+/obj/structure/ladder/update_icon()
+ icon_state = "ladder[!!(allowed_directions & UP)][!!(allowed_directions & DOWN)]"
+
+/obj/structure/ladder/up
+ allowed_directions = UP
+ icon_state = "ladder10"
+
+/obj/structure/ladder/updown
+ allowed_directions = UP|DOWN
+ icon_state = "ladder11"
/obj/structure/stairs
name = "Stairs"
@@ -61,7 +131,8 @@
opacity = 0
anchored = 1
- initialize()
+ Initialize()
+ . = ..()
for(var/turf/turf in locs)
var/turf/simulated/open/above = GetAbove(turf)
if(!above)
@@ -103,4 +174,4 @@
west
dir = WEST
- bound_width = 64
\ No newline at end of file
+ bound_width = 64
diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm
index b358cd0fbbd..6dff3cf5cd2 100644
--- a/code/modules/multiz/turf.dm
+++ b/code/modules/multiz/turf.dm
@@ -1,88 +1,101 @@
+/turf/proc/CanZPass(atom/A, direction)
+ if(z == A.z) //moving FROM this turf
+ return direction == UP //can't go below
+ else
+ if(direction == UP) //on a turf below, trying to enter
+ return 0
+ if(direction == DOWN) //on a turf above, trying to enter
+ return !density
+
+/turf/simulated/open/CanZPass(atom, direction)
+ return 1
+
+/turf/space/CanZPass(atom, direction)
+ return 1
+
/turf/simulated/open
name = "open space"
icon = 'icons/turf/space.dmi'
- icon_state = "black"
- alpha = 16
- layer = 0
+ icon_state = ""
+ plane = PLANE_SPACE_BACKGROUND
density = 0
pathweight = 100000 //Seriously, don't try and path over this one numbnuts
+ is_hole = TRUE
- var/turf/below
- var/list/underlay_references
- var/global/overlay_map = list()
+ var/tmp/turf/below
+ var/tmp/atom/movable/openspace/multiplier/shadower // Overlay used to multiply color of all OO overlays at once.
+ var/tmp/updating = FALSE // If this turf is queued for openturf update.
+ var/tmp/last_seen_turf // A soft reference to the last turf present when this was updated.
-/turf/simulated/open/initialize()
+ var/tmp/depth
+
+/turf/simulated/open/proc/is_above_space()
+ var/turf/T = GetBelow(src)
+ while (T && T.is_hole)
+ if (istype(T, /turf/space))
+ return TRUE
+ T = GetBelow(T)
+
+ return FALSE
+
+/turf/simulated/open/Destroy()
+ SSopenturf.openspace_turfs -= src
+ SSopenturf.queued_turfs -= src
+ QDEL_NULL(shadower)
+
+ for (var/atom/movable/openspace/overlay in src)
+ qdel(overlay)
+
+ if (istype(above))
+ above.update()
+ above = null
+
+ below = null
+ return ..()
+
+/turf/simulated/open/airless
+ oxygen = 0
+ nitrogen = 0
+ temperature = TCMB
+
+/turf/simulated/open/post_change()
..()
+ update()
+
+/turf/simulated/open/Initialize()
+ . = ..()
+ update()
+ SSopenturf.openspace_turfs += src
+
+/turf/simulated/open/proc/update()
+ set waitfor = FALSE
below = GetBelow(src)
- ASSERT(HasBelow(z))
+ below.above = src
+ levelupdate()
+ for(var/atom/movable/A in src)
+ A.fall()
+ update_icon()
-/turf/simulated/open/Entered(var/atom/movable/mover)
- // only fall down in defined areas (read: areas with artificial gravitiy)
- if(!istype(below)) //make sure that there is actually something below
- below = GetBelow(src)
- if(!below)
- return
+/turf/simulated/open/update_dirt()
+ return 0
- // No gravity in space, apparently.
- var/area/area = get_area(src)
- if(area.name == "Space")
- return
-
- // Prevent pipes from falling into the void... if there is a pipe to support it.
- if(mover.anchored || istype(mover, /obj/item/pipe) && \
- (locate(/obj/structure/disposalpipe/up) in below) || \
- locate(/obj/machinery/atmospherics/pipe/zpipe/up in below))
- return
-
- // See if something prevents us from falling.
- var/soft = 0
- for(var/atom/A in below)
- if(A.density)
- if(!istype(A, /obj/structure/window))
- return
- else
- var/obj/structure/window/W = A
- if(W.is_fulltile())
- return
- // Dont break here, since we still need to be sure that it isnt blocked
- if(istype(A, /obj/structure/stairs))
- soft = 1
-
- // We've made sure we can move, now.
- mover.Move(below)
-
- if(!soft)
- if(!istype(mover, /mob))
- if(istype(below, /turf/simulated/open))
- mover.visible_message("\The [mover] falls from the deck above through \the [below]!", "You hear a whoosh of displaced air.")
- else
- mover.visible_message("\The [mover] falls from the deck above and slams into \the [below]!", "You hear something slam into the deck.")
- else
- var/mob/M = mover
- if(istype(below, /turf/simulated/open))
- below.visible_message("\The [mover] falls from the deck above through \the [below]!", "You hear a soft whoosh.[M.stat ? "" : ".. and some screaming."]")
- else
- M.visible_message("\The [mover] falls from the deck above and slams into \the [below]!", "You land on \the [below].", "You hear a soft whoosh and a crunch")
-
- // Handle people getting hurt, it's funny!
- if (istype(mover, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = mover
- var/damage = 5
- H.apply_damage(rand(0, damage), BRUTE, "head")
- H.apply_damage(rand(0, damage), BRUTE, "chest")
- H.apply_damage(rand(0, damage), BRUTE, "l_leg")
- H.apply_damage(rand(0, damage), BRUTE, "r_leg")
- H.apply_damage(rand(0, damage), BRUTE, "l_arm")
- H.apply_damage(rand(0, damage), BRUTE, "r_arm")
- H.weakened = max(H.weakened,2)
- H.updatehealth()
+/turf/simulated/open/Entered(atom/movable/mover)
+ ..()
+ mover.fall()
// override to make sure nothing is hidden
/turf/simulated/open/levelupdate()
for(var/obj/O in src)
O.hide(0)
-// Straight copy from space.
+/turf/simulated/open/update_icon()
+ if(!updating && below)
+ updating = TRUE
+ SSopenturf.queued_turfs += src
+ if (above)
+ // Cascade updates until we hit the top openturf.
+ above.update_icon()
+
/turf/simulated/open/attackby(obj/item/C as obj, mob/user as mob)
if (istype(C, /obj/item/stack/rods))
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
@@ -90,12 +103,12 @@
return
var/obj/item/stack/rods/R = C
if (R.use(1))
- user << "Constructing support lattice ... "
+ to_chat(user, "You lay down the support lattice. ")
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
- ReplaceWithLattice()
+ new /obj/structure/lattice(locate(src.x, src.y, src.z))
return
- if (istype(C, /obj/item/stack/tile/floor))
+ if (istype(C, /obj/item/stack/tile))
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L)
var/obj/item/stack/tile/floor/S = C
@@ -107,5 +120,15 @@
ChangeTurf(/turf/simulated/floor/airless)
return
else
- user << "The plating is going to need some support. "
- return
\ No newline at end of file
+ to_chat(user, "The plating is going to need some support. ")
+
+ //To lay cable.
+ if(istype(C, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/coil = C
+ coil.turf_place(src, user)
+ return
+ return
+
+//Most things use is_plating to test if there is a cover tile on top (like regular floors)
+/turf/simulated/open/is_plating()
+ return 1
diff --git a/code/modules/nano/modules/alarm_monitor.dm b/code/modules/nano/modules/alarm_monitor.dm
index 2b259fa6f95..6121380e133 100644
--- a/code/modules/nano/modules/alarm_monitor.dm
+++ b/code/modules/nano/modules/alarm_monitor.dm
@@ -13,7 +13,7 @@
/datum/nano_module/alarm_monitor/all/New()
..()
- alarm_handlers = alarm_manager.all_handlers
+ alarm_handlers = SSalarm.all_handlers
/datum/nano_module/alarm_monitor/engineering/New()
..()
diff --git a/code/modules/nano/modules/atmos_control.dm b/code/modules/nano/modules/atmos_control.dm
index dedf4ca197d..ede55314623 100644
--- a/code/modules/nano/modules/atmos_control.dm
+++ b/code/modules/nano/modules/atmos_control.dm
@@ -23,7 +23,7 @@
if(alarm.alarm_id && alarm.alarm_id in monitored_alarm_ids)
monitored_alarms += alarm
// machines may not yet be ordered at this point
- monitored_alarms = dd_sortedObjectList(monitored_alarms)
+ sortTim(monitored_alarms, /proc/cmp_alarm, FALSE)
/datum/nano_module/atmos_control/Topic(href, href_list)
if(..())
diff --git a/code/modules/nano/modules/crew_monitor.dm b/code/modules/nano/modules/crew_monitor.dm
index 9008c860312..5ea89950262 100644
--- a/code/modules/nano/modules/crew_monitor.dm
+++ b/code/modules/nano/modules/crew_monitor.dm
@@ -3,10 +3,7 @@
/datum/nano_module/crew_monitor/Topic(href, href_list)
if(..()) return 1
- var/turf/T = get_turf(nano_host()) // TODO: Allow setting any config.contact_levels from the interface.
- if (!T || !(T.z in config.player_levels))
- usr << "Unable to establish a connection : You're too far away from the station!"
- return 0
+
if(href_list["track"])
if(isAI(usr))
var/mob/living/silicon/ai/AI = usr
@@ -17,15 +14,20 @@
/datum/nano_module/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
var/list/data = host.initial_data()
- var/turf/T = get_turf(nano_host())
- data["isAI"] = isAI(user)
- data["crewmembers"] = crew_repository.health_data(T)
+ // This checks if TCOMS is online using the test proc. If it isn't, the suit sensor data isn't loaded.
+ var/datum/signal/signal
+ signal = telecomms_process_active()
+ if(signal.data["done"] == 1)
+ data["isAI"] = isAI(user)
+ data["crewmembers"] = list()
+ for(var/z_level in map_levels)
+ data["crewmembers"] += crew_repository.health_data(z_level)
+
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800, state = state)
-
// adding a template with the key "mapContent" enables the map ui functionality
ui.add_template("mapContent", "crew_monitor_map_content.tmpl")
// adding a template with the key "mapHeader" replaces the map header content
diff --git a/code/modules/nano/modules/lighting_ctrl.dm b/code/modules/nano/modules/lighting_ctrl.dm
index aca4d5bd5a4..ce6a3b14ff9 100644
--- a/code/modules/nano/modules/lighting_ctrl.dm
+++ b/code/modules/nano/modules/lighting_ctrl.dm
@@ -6,7 +6,7 @@
/datum/nano_module/lighting_ctrl/New()
..()
- lstate = nl_ctrl.is_active() ? "dark" : "full"
+ lstate = SSnightlight.is_active() ? "dark" : "full"
/datum/nano_module/lighting_ctrl/proc/update_lighting()
if (!config.night_lighting)
@@ -15,17 +15,14 @@
// whether to only select areas explicitly marked for nightlighting
var/wl_only = context == "all" ? 0 : 1
- if (!wl_only && lstate == "dark")
- nl_ctrl.manual_override = 1
- else if (!wl_only)
- nl_ctrl.manual_override = 0
+ SSnightlight.suspend()
if (lstate == "dark")
log_and_message_admins("enabled night-mode [wl_only ? "in public areas" : "globally"].", lusr)
- nl_ctrl.activate(wl_only)
+ SSnightlight.activate(wl_only)
else if (lstate == "full")
log_and_message_admins("disabled night-mode [wl_only ? "in public areas" : "globally"].", lusr)
- nl_ctrl.deactivate(wl_only)
+ SSnightlight.deactivate(wl_only)
/datum/nano_module/lighting_ctrl/Topic(href, href_list)
if(..())
@@ -51,4 +48,4 @@
ui.auto_update_layout = 1
ui.set_initial_data(data)
ui.open()
- ui.set_auto_update(1)
\ No newline at end of file
+ ui.set_auto_update(1)
diff --git a/code/modules/nano/modules/rcon.dm b/code/modules/nano/modules/rcon.dm
index b5212eb76ef..1266055a96d 100644
--- a/code/modules/nano/modules/rcon.dm
+++ b/code/modules/nano/modules/rcon.dm
@@ -1,19 +1,17 @@
/datum/nano_module/rcon
name = "Power RCON"
- var/list/known_SMESs = null
- var/list/known_breakers = null
// Allows you to hide specific parts of the UI
var/hide_SMES = 0
var/hide_SMES_details = 0
var/hide_breakers = 0
/datum/nano_module/rcon/ui_interact(mob/user, ui_key = "rcon", datum/nanoui/ui=null, force_open=1, var/datum/topic_state/state = default_state)
- FindDevices() // Update our devices list
+ //FindDevices() // Update our devices list
var/list/data = host.initial_data()
// SMES DATA (simplified view)
var/list/smeslist[0]
- for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs)
+ for(var/obj/machinery/power/smes/buildable/SMES in SSmachinery.rcon_smes_units)
smeslist.Add(list(list(
"charge" = round(SMES.Percentage()),
"input_set" = SMES.input_attempt,
@@ -24,11 +22,10 @@
"RCON_tag" = SMES.RCon_tag
)))
- data["smes_info"] = sortByKey(smeslist, "RCON_tag")
-
+ data["smes_info"] = smeslist
// BREAKER DATA (simplified view)
var/list/breakerlist[0]
- for(var/obj/machinery/power/breakerbox/BR in known_breakers)
+ for(var/obj/machinery/power/breakerbox/BR in SSmachinery.rcon_breaker_units)
breakerlist.Add(list(list(
"RCON_tag" = BR.RCon_tag,
"enabled" = BR.on
@@ -74,10 +71,7 @@
SMES.set_output(outputset)
if(href_list["toggle_breaker"])
- var/obj/machinery/power/breakerbox/toggle = null
- for(var/obj/machinery/power/breakerbox/breaker in known_breakers)
- if(breaker.RCon_tag == href_list["toggle_breaker"])
- toggle = breaker
+ var/obj/machinery/power/breakerbox/toggle = SSmachinery.rcon_breaker_units_by_tag[href_list["toggle_breaker"]]
if(toggle)
if(toggle.update_locked)
usr << "The breaker box was recently toggled. Please wait before toggling it again."
@@ -98,20 +92,4 @@
if(!tag)
return
- for(var/obj/machinery/power/smes/buildable/S in known_SMESs)
- if(S.RCon_tag == tag)
- return S
-
-// Proc: FindDevices()
-// Parameters: None
-// Description: Refreshes local list of known devices.
-/datum/nano_module/rcon/proc/FindDevices()
- known_SMESs = new /list()
- for(var/obj/machinery/power/smes/buildable/SMES in machines)
- if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
- known_SMESs.Add(SMES)
-
- known_breakers = new /list()
- for(var/obj/machinery/power/breakerbox/breaker in machines)
- if(breaker.RCon_tag != "NO_TAG")
- known_breakers.Add(breaker)
+ return SSmachinery.rcon_smes_units_by_tag[tag]
diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm
index 4ecda08bfab..afdfad95865 100644
--- a/code/modules/nano/nanomanager.dm
+++ b/code/modules/nano/nanomanager.dm
@@ -1,3 +1,21 @@
+/datum/asset/nanoui/register()
+ var/list/nano_asset_dirs = list(\
+ "nano/css/",
+ "nano/images/",
+ "nano/images/status_icons/",
+ "nano/js/",
+ "nano/templates/"
+ )
+
+ var/list/filenames = null
+ for (var/path in nano_asset_dirs)
+ filenames = flist(path)
+ for(var/filename in filenames)
+ if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore
+ var/fullpath = path + filename
+ if(fexists(fullpath))
+ register_asset(filename, fcopy_rsc(fullpath))
+
// This is the window/UI manager for Nano UI
// There should only ever be one (global) instance of nanomanger
/datum/nanomanager
@@ -8,31 +26,6 @@
// a list of asset filenames which are to be sent to the client on user logon
var/list/asset_files = list()
- /**
- * Create a new nanomanager instance.
- * This proc generates a list of assets which are to be sent to each client on connect
- *
- * @return /nanomanager new nanomanager object
- */
-/datum/nanomanager/New()
- var/list/nano_asset_dirs = list(\
- "nano/css/",\
- "nano/images/",\
- "nano/images/status_icons/",\
- "nano/js/",\
- "nano/templates/"\
- )
-
- var/list/filenames = null
- for (var/path in nano_asset_dirs)
- filenames = flist(path)
- for(var/filename in filenames)
- if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore
- if(fexists(path + filename))
- asset_files.Add(fcopy_rsc(path + filename)) // add this file to asset_files for sending to clients when they connect
-
- return
-
/**
* Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data
*
@@ -256,17 +249,3 @@
oldMob.open_uis.Cut()
return 1 // success
-
- /**
- * Sends all nano assets to the client
- * This is called on user login
- *
- * @param client /client The user's client
- *
- * @return nothing
- */
-
-/datum/nanomanager/proc/send_resources(client)
- for(var/file in asset_files)
- client << browse_rsc(file) // send the file to the client
-
diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm
index e0e65eba6ce..120fdfeeee8 100644
--- a/code/modules/nano/nanomapgen.dm
+++ b/code/modules/nano/nanomapgen.dm
@@ -74,7 +74,7 @@
world.log << "NanoMapGen: [count] tiles done "
sleep(1)
- var/mapFilename = "nanomap_z[currentZ]-new.png"
+ var/mapFilename = "new_Aurora[currentZ]"
world.log << "NanoMapGen: sending [mapFilename] to client "
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index b1dffe62962..9ac23dfde08 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -44,7 +44,7 @@ nanoui is used to open and update nano browser uis
// show the map ui, this is used by the default layout
var/show_map = 0
// the map z level to display
- var/map_z_level = 1
+ var/map_z_level = 3
// initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on)
var/list/initial_data[0]
// set to 1 to update the ui automatically every master_controller tick
@@ -185,7 +185,9 @@ nanoui is used to open and update nano browser uis
"autoUpdateLayout" = auto_update_layout,
"autoUpdateContent" = auto_update_content,
"showMap" = show_map,
+ "mapName" = "Aurora",
"mapZLevel" = map_z_level,
+ "mapZLevels" = map_levels,
"user" = list("name" = user.name)
)
return config_data
@@ -488,8 +490,12 @@ nanoui is used to open and update nano browser uis
map_update = 1
if(href_list["mapZLevel"])
- set_map_z_level(text2num(href_list["mapZLevel"]))
- map_update = 1
+ var/map_z = (text2num(href_list["mapZLevel"]))
+ if(map_z in map_levels)
+ set_map_z_level(map_z)
+ map_update = 1
+ else
+ return
if ((src_object && src_object.Topic(href, href_list, state)) || map_update)
nanomanager.update_uis(src_object) // update all UIs attached to src_object
@@ -502,7 +508,7 @@ nanoui is used to open and update nano browser uis
*
* @return nothing
*/
-/datum/nanoui/proc/process(update = 0)
+/datum/nanoui/process(update = 0)
if (!src_object || !user)
close()
return
diff --git a/code/modules/orbit/orbit.dm b/code/modules/orbit/orbit.dm
new file mode 100644
index 00000000000..79d3df233c3
--- /dev/null
+++ b/code/modules/orbit/orbit.dm
@@ -0,0 +1,100 @@
+/datum/orbit
+ var/atom/movable/orbiter
+ var/atom/orbiting
+ var/lock = TRUE
+ var/turf/lastloc
+ var/lastprocess
+
+/datum/orbit/New(_orbiter, _orbiting, _lock)
+ orbiter = _orbiter
+ orbiting = _orbiting
+ SSorbit.processing += src
+ if (!orbiting.orbiters)
+ orbiting.orbiters = list()
+ orbiting.orbiters += src
+
+ if (orbiter.orbiting)
+ orbiter.stop_orbit()
+ orbiter.orbiting = src
+ Check()
+ lock = _lock
+
+//do not qdel directly, use stop_orbit on the orbiter. (This way the orbiter can bind to the orbit stopping)
+/datum/orbit/Destroy(force = FALSE)
+ SSorbit.processing -= src
+ if (orbiter)
+ orbiter.orbiting = null
+ orbiter = null
+ if (orbiting)
+ if (orbiting.orbiters)
+ orbiting.orbiters -= src
+ if (!orbiting.orbiters.len)//we are the last orbit, delete the list
+ orbiting.orbiters = null
+ orbiting = null
+ return ..()
+
+/datum/orbit/proc/Check(turf/targetloc)
+ if (!orbiter)
+ qdel(src)
+ return
+ if (!orbiting)
+ orbiter.stop_orbit()
+ return
+ if (!orbiter.orbiting) //admin wants to stop the orbit.
+ orbiter.orbiting = src //set it back to us first
+ orbiter.stop_orbit()
+ lastprocess = world.time
+ if (!targetloc)
+ targetloc = get_turf(orbiting)
+ if (!targetloc || (!lock && orbiter.loc != lastloc && orbiter.loc != targetloc))
+ orbiter.stop_orbit()
+ return
+ orbiter.loc = targetloc
+ lastloc = orbiter.loc
+
+/atom/movable/var/datum/orbit/orbiting = null
+/atom/var/list/orbiters = null
+
+//A: atom to orbit
+//radius: range to orbit at, radius of the circle formed by orbiting (in pixels)
+//clockwise: whether you orbit clockwise or anti clockwise
+//rotation_speed: how fast to rotate (how many ds should it take for a rotation to complete)
+//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
+//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
+//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts)
+
+/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE)
+ if (!istype(A))
+ return
+
+ new/datum/orbit(src, A, lockinorbit)
+ if (!orbiting) //something failed, and our orbit datum deleted itself
+ return
+ var/matrix/initial_transform = matrix(transform)
+
+ //Head first!
+ if (pre_rotation)
+ var/matrix/M = matrix(transform)
+ var/pre_rot = 90
+ if(!clockwise)
+ pre_rot = -90
+ M.Turn(pre_rot)
+ transform = M
+
+ var/matrix/shift = matrix(transform)
+ shift.Translate(0,radius)
+ transform = shift
+
+ SpinAnimation(rotation_speed, -1, clockwise, rotation_segments)
+
+ //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
+ transform = initial_transform
+
+/atom/movable/proc/stop_orbit()
+ SpinAnimation(0,0)
+ qdel(orbiting)
+
+/atom/movable/Destroy(force = FALSE)
+ . = ..()
+ if (orbiting)
+ stop_orbit()
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 4a539bc0af0..2f084155ddb 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -23,8 +23,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
return
vessel.add_reagent("blood",560)
- spawn(1)
- fixblood()
+ addtimer(CALLBACK(src, .proc/fixblood), 1)
//Resets blood data
/mob/living/carbon/human/proc/fixblood()
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index f70ad4ddf62..078832047a5 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -30,7 +30,7 @@ var/list/organ_cache = list()
var/force_skintone = FALSE // If true, icon generation will skip is-robotic checks. Used for synthskin limbs.
/obj/item/organ/Destroy()
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
if(!owner)
return ..()
@@ -92,7 +92,7 @@ var/list/organ_cache = list()
return
damage = max_damage
status |= ORGAN_DEAD
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
if(dead_icon)
icon_state = dead_icon
if(owner && vital)
@@ -105,7 +105,7 @@ var/list/organ_cache = list()
if (QDELETED(src))
log_debug("QDELETED organ [DEBUG_REF(src)] had process() called!")
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
return
//dead already, no need for more processing
@@ -302,7 +302,7 @@ var/list/organ_cache = list()
if(affected) affected.internal_organs -= src
loc = get_turf(owner)
- processing_objects |= src
+ START_PROCESSING(SSprocessing, src)
rejecting = null
if (!reagents)
create_reagents(5)
@@ -337,7 +337,7 @@ var/list/organ_cache = list()
owner = target
loc = owner
- processing_objects -= src
+ STOP_PROCESSING(SSprocessing, src)
target.internal_organs |= src
affected.internal_organs |= src
target.internal_organs_by_name[organ_tag] = src
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 8eb4e04c6bf..2ba2d78a9d5 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -170,8 +170,8 @@
if(owner)
replaced(owner)
sync_colour_to_human(owner)
- spawn(1)
- get_icon()
+
+ addtimer(CALLBACK(src, .proc/get_icon), 1)
if ((status & ORGAN_PLANT))
cannot_break = 1
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index 5917e9d8e1f..9fb96e1148a 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -9,8 +9,9 @@ var/global/list/limb_icon_cache = list()
for(var/obj/item/organ/external/organ in contents)
if(organ.children && organ.children.len)
for(var/obj/item/organ/external/child in organ.children)
- overlays += child.mob_icon
- overlays += organ.mob_icon
+ add_overlay(child.mob_icon)
+
+ overlays |= organ.mob_icon
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
s_tone = null
@@ -54,7 +55,6 @@ var/global/list/limb_icon_cache = list()
..()
/obj/item/organ/external/head/get_icon()
-
..()
overlays.Cut()
if(!owner || !owner.species)
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index c2cd06e0d70..97d290b0cbd 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -249,7 +249,7 @@ obj/item/organ/vaurca/neuralsocket/process()
src.air_contents.temperature = T20C
src.distribute_pressure = ((pick(1.0,1.1,1.2,1.3)*ONE_ATMOSPHERE)*O2STANDARD)
- processing_objects.Add(src)
+ START_PROCESSING(SSprocessing, src)
var/mob/living/carbon/location = loc
location.internal = src
@@ -263,8 +263,8 @@ obj/item/organ/vaurca/neuralsocket/process()
if(air_contents)
qdel(air_contents)
- processing_objects.Remove(src)
- ..()
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
/obj/item/organ/vaurca/preserve/examine(mob/user)
. = ..(user, 0)
diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm
index 6b9b7975c9c..1af02f3c7e7 100644
--- a/code/modules/organs/subtypes/diona.dm
+++ b/code/modules/organs/subtypes/diona.dm
@@ -3,7 +3,7 @@
return 0
//This is a terrible hack and I should be ashamed.
- var/datum/seed/diona = plant_controller.seeds["diona"]
+ var/datum/seed/diona = SSplants.seeds["diona"]
if(!diona)
return 0
diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm
index 5309b05096f..902b062b044 100644
--- a/code/modules/overmap/sectors.dm
+++ b/code/modules/overmap/sectors.dm
@@ -115,6 +115,8 @@ var/global/list/map_sectors = list()
testing("Associated zlevel disappeared.")
world.maxz--
+ return QDEL_HINT_QUEUE
+
/obj/effect/map/sector/temporary/proc/can_die(var/mob/observer)
testing("Checking if sector at [map_z] can die.")
for(var/mob/M in player_list)
diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm
index 931ea68902a..939174324fa 100644
--- a/code/modules/overmap/ships/computers/engine_control.dm
+++ b/code/modules/overmap/ships/computers/engine_control.dm
@@ -8,7 +8,8 @@
var/list/engines = list()
var/obj/effect/map/ship/linked
-/obj/machinery/computer/engines/initialize()
+/obj/machinery/computer/engines/Initialize()
+ . = ..()
linked = map_sectors["[z]"]
if (linked)
if (!linked.eng_control)
diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm
index b634f82f507..678897ada3a 100644
--- a/code/modules/overmap/ships/computers/helm.dm
+++ b/code/modules/overmap/ships/computers/helm.dm
@@ -10,7 +10,8 @@
var/dx //desitnation
var/dy //coordinates
-/obj/machinery/computer/helm/initialize()
+/obj/machinery/computer/helm/Initialize()
+ . = ..()
linked = map_sectors["[z]"]
if (linked)
if(!linked.nav_control)
diff --git a/code/modules/overmap/ships/computers/shuttle.dm b/code/modules/overmap/ships/computers/shuttle.dm
index ea837740518..407cbabaf03 100644
--- a/code/modules/overmap/ships/computers/shuttle.dm
+++ b/code/modules/overmap/ships/computers/shuttle.dm
@@ -8,8 +8,8 @@
var/obj/effect/map/destination //current destination
var/obj/effect/map/home //current destination
-/obj/machinery/computer/shuttle_control/explore/initialize()
- ..()
+/obj/machinery/computer/shuttle_control/explore/Initialize()
+ . = ..()
home = map_sectors["[z]"]
shuttle_tag = "[shuttle_tag]-[z]"
if(!shuttle_controller.shuttles[shuttle_tag])
@@ -18,7 +18,7 @@
shuttle.area_station = locate(landing_type)
shuttle.area_offsite = shuttle.area_station
shuttle_controller.shuttles[shuttle_tag] = shuttle
- shuttle_controller.process_shuttles += shuttle
+ START_PROCESSING(shuttle_controller, shuttle)
testing("Exploration shuttle '[shuttle_tag]' at zlevel [z] successfully added.")
//Sets destination to new sector. Can be null.
diff --git a/code/modules/overmap/ships/engines/thermal.dm b/code/modules/overmap/ships/engines/thermal.dm
index b2f537bb963..1324f972138 100644
--- a/code/modules/overmap/ships/engines/thermal.dm
+++ b/code/modules/overmap/ships/engines/thermal.dm
@@ -54,11 +54,11 @@
var/datum/ship_engine/thermal/controller
/obj/machinery/atmospherics/unary/engine/initialize()
- ..()
+ . = ..()
controller = new(src)
/obj/machinery/atmospherics/unary/engine/Destroy()
- ..()
+ . = ..()
controller.die()
/obj/machinery/atmospherics/unary/engine/proc/burn()
@@ -96,4 +96,4 @@
nloc.hotspot_expose(temp,125)
spawn(20)
- loc = null
\ No newline at end of file
+ loc = null
diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm
index 9b8557363da..d0761e40116 100644
--- a/code/modules/overmap/ships/ship.dm
+++ b/code/modules/overmap/ships/ship.dm
@@ -14,7 +14,8 @@
var/obj/machinery/computer/helm/nav_control
var/obj/machinery/computer/engines/eng_control
-/obj/effect/map/ship/initialize()
+/obj/effect/map/ship/Initialize()
+ . = ..()
for(var/obj/machinery/computer/engines/E in machines)
if (E.z == map_z)
eng_control = E
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 2253e049a5a..116b710d384 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -33,14 +33,16 @@
return
/obj/item/weapon/clipboard/update_icon()
- overlays.Cut()
+ cut_overlays()
if(toppaper)
- overlays += toppaper.icon_state
- overlays += toppaper.overlays
+ add_overlay(toppaper.icon_state)
+ // The overlay list is a special internal format.
+ // We need to copy it into a normal list before we can give it to SSoverlay.
+ var/list/paper_overlays = toppaper.overlays.Copy()
+ add_overlay(paper_overlays)
if(haspen)
- overlays += "clipboard_pen"
- overlays += "clipboard_over"
- return
+ add_overlay("clipboard_pen")
+ add_overlay("clipboard_over")
/obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 322456dc9fe..5d1d11b8930 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -27,7 +27,8 @@
icon_state = "tallcabinet"
-/obj/structure/filingcabinet/initialize()
+/obj/structure/filingcabinet/Initialize()
+ . = ..()
for(var/obj/item/I in loc)
if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle))
I.loc = src
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index a14ef11720d..c56ade5e345 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -22,9 +22,9 @@
icon_state = "folder_white"
/obj/item/weapon/folder/update_icon()
- overlays.Cut()
+ cut_overlays()
if(contents.len)
- overlays += "folder_paper"
+ add_overlay("folder_paper")
return
/obj/item/weapon/folder/attackby(obj/item/weapon/W as obj, mob/user as mob)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 9ea20407159..dff70cff085 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -36,14 +36,16 @@
var/const/signfont = "Times New Roman"
var/const/crayonfont = "Comic Sans MS"
-/obj/item/weapon/paper/New(loc, text,title)
- ..(loc)
- set_content(title, text ? text : info)
-
-// needed for subtyped papers with pre-defined content
-/obj/item/weapon/paper/New()
- ..()
- update_icon()
+/obj/item/weapon/paper/Initialize(mapload, text, title)
+ . = ..()
+ if (text || title)
+ set_content(title, text ? text : info)
+ else
+ updateinfolinks()
+ if (mapload)
+ update_icon()
+ else
+ addtimer(CALLBACK(src, /atom/.proc/update_icon), 1)
/obj/item/weapon/paper/proc/set_content(title, text)
if(title)
@@ -53,7 +55,7 @@
info = parsepencode(text)
else
info = ""
-
+
update_icon()
update_space(info)
updateinfolinks()
@@ -68,7 +70,7 @@
info = ""
update_icon()
- update_space()
+ update_space(info)
updateinfolinks()
/obj/item/weapon/paper/update_icon()
@@ -134,7 +136,7 @@
if (icon_state == "paper_plane")
user.show_message(span("alert", "The paper is already folded into a plane."))
return
- user.visible_message(span("notice", "\The [user] carefully folds \the [src] into a plane."),
+ user.visible_message(span("notice", "\The [user] carefully folds \the [src] into a plane."),
span("notice", "You carefully fold \the [src] into a plane."), "You hear paper rustling.")
icon_state = "paper_plane"
throw_range = 8
@@ -547,4 +549,4 @@ Please note: Cell timers will \[b\]NOT\[/b\] function without a valid incident f
..()
/obj/item/weapon/paper/sentencing/update_icon()
- return
+ return
\ No newline at end of file
diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm
index 88b13259b0a..0ea03104021 100644
--- a/code/modules/paperwork/papershredder.dm
+++ b/code/modules/paperwork/papershredder.dm
@@ -103,7 +103,7 @@
if(!paperamount)
return
paperamount--
- return getFromPool(/obj/item/weapon/shreddedp, get_turf(src))
+ return new /obj/item/weapon/shreddedp(get_turf(src))
/obj/machinery/papershredder/update_icon()
icon_state = "papershredder[max(0,min(5,Floor(paperamount/2)))]"
@@ -133,7 +133,7 @@
var/mob/living/M = loc
if(istype(M))
M.drop_from_inventory(src)
- getFromPool(/obj/effect/decal/cleanable/ash,get_turf(src))
+ new /obj/effect/decal/cleanable/ash(get_turf(src))
qdel(src)
/obj/item/weapon/shreddedp
diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm
index 2ed4d447265..6a5aec5517b 100644
--- a/code/modules/power/antimatter/control.dm
+++ b/code/modules/power/antimatter/control.dm
@@ -46,9 +46,10 @@
for(var/obj/machinery/am_shielding/AMS in linked_cores)
AMS.control_unit = null
qdel(AMS)
+
qdel(fueljar)
fueljar = null
- ..()
+ return ..()
/obj/machinery/power/am_control_unit/process()
@@ -266,7 +267,7 @@
stored_core_stability = 0
for(var/thing in linked_cores)
var/obj/machinery/am_shielding/AMS = thing
- if (!AMS || AMS.gcDestroyed)
+ if (QDELETED(AMS))
continue
stored_core_stability += AMS.stability
@@ -384,3 +385,4 @@
updateDialog()
return 1
+
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index ece15f20691..f3d02115732 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -63,7 +63,7 @@ proc/cardinalrange(var/center)
shutdown_core()
visible_message("\The [src.name] melts! ")
//Might want to have it leave a mess on the floor but no sprites for now
- ..()
+ return ..()
/obj/machinery/am_shielding/proc/controllerscan(var/priorscan = 0)
//Make sure we are the only one here
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index fb81b76cbcb..00f2ac71380 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -24,9 +24,6 @@
#define APC_UPOVERLAY_LOCKED 4096
#define APC_UPOVERLAY_OPERATING 8192
-
-#define APC_UPDATE_ICON_COOLDOWN 100 // 10 seconds
-
// the Area Power Controller (APC), formerly Power Distribution Unit (PDU)
// one per area, needs wire conection to power network through a terminal
@@ -154,8 +151,8 @@
return cell.drain_power(drain_check, surge, amount)
-/obj/machinery/power/apc/New(turf/loc, var/ndir, var/building=0)
- ..()
+/obj/machinery/power/apc/Initialize(mapload, var/ndir, var/building=0)
+ . = ..()
wires = new(src)
// offset 24 pixels in direction of dir
@@ -168,7 +165,7 @@
pixel_x = (src.tdir & 3)? 0 : (src.tdir == 4 ? 24 : -24)
pixel_y = (src.tdir & 3)? (src.tdir ==1 ? 24 : -24) : 0
if (building==0)
- init()
+ init(mapload)
else
area = get_area(src)
area.apc = src
@@ -194,6 +191,8 @@
if(cell)
cell.forceMove(loc)
cell = null
+
+ QDEL_NULL(spark_system)
QDEL_NULL(spark_system)
@@ -213,7 +212,7 @@
terminal.set_dir(tdir)
terminal.master = src
-/obj/machinery/power/apc/proc/init()
+/obj/machinery/power/apc/proc/init(mapload)
has_electronics = 2 //installed and secured
// is starting with a power cell installed, create it and set its charge level
if(cell_type)
@@ -234,8 +233,8 @@
make_terminal()
- spawn(5)
- src.update()
+ if (!mapload)
+ addtimer(CALLBACK(src, .proc/update), 5, TIMER_UNIQUE)
/obj/machinery/power/apc/examine(mob/user)
if(..(user, 1))
@@ -327,19 +326,18 @@
if(!(update_state & UPDATE_ALLGOOD))
if(overlays.len)
- overlays = 0
+ cut_overlays()
return
if(update & 2)
- if(overlays.len)
- overlays.len = 0
+ cut_overlays()
if(!(stat & (BROKEN|MAINT)) && update_state & UPDATE_ALLGOOD)
- overlays += status_overlays_lock[locked+1]
- overlays += status_overlays_charging[charging+1]
+ add_overlay(status_overlays_lock[locked+1])
+ add_overlay(status_overlays_charging[charging+1])
if(operating)
- overlays += status_overlays_equipment[equipment+1]
- overlays += status_overlays_lighting[lighting+1]
- overlays += status_overlays_environ[environ+1]
+ add_overlay(status_overlays_equipment[equipment+1])
+ add_overlay(status_overlays_lighting[lighting+1])
+ add_overlay(status_overlays_environ[environ+1])
if(update & 3)
if(update_state & UPDATE_BLUESCREEN)
@@ -427,16 +425,6 @@
results += 2
return results
-// Used in process so it doesn't update the icon too much
-/obj/machinery/power/apc/proc/queue_icon_update()
-
- if(!updating_icon)
- updating_icon = 1
- // Start the update
- spawn(APC_UPDATE_ICON_COOLDOWN)
- update_icon()
- updating_icon = 0
-
//attack with an item - open/close cover, insert cell, or (un)lock interface
/obj/machinery/power/apc/attackby(obj/item/W, mob/user)
@@ -1244,12 +1232,14 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
update()
update_icon()
- spawn(600)
- update_channels()
- update()
- update_icon()
+ addtimer(CALLBACK(src, .proc/post_emp_act), 600)
..()
+/obj/machinery/power/apc/proc/post_emp_act()
+ update_channels()
+ update()
+ queue_icon_update()
+
/obj/machinery/power/apc/ex_act(severity)
switch(severity)
@@ -1300,6 +1290,12 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
L.broken()
sleep(1)
+/obj/machinery/power/apc/proc/flicker_all()
+ var/offset = 0
+ for (var/obj/machinery/light/L in area)
+ addtimer(CALLBACK(L, /obj/machinery/light/.proc/flicker), offset)
+ offset += rand(5, 10)
+
/obj/machinery/power/apc/proc/toggle_nightlight(var/force = null)
for (var/obj/machinery/light/L in area.contents)
if (force == "on")
@@ -1332,5 +1328,3 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
locked = 1
update_icon()
return 1
-
-#undef APC_UPDATE_ICON_COOLDOWN
diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm
index a70b19421ec..1021179c0bd 100644
--- a/code/modules/power/batteryrack.dm
+++ b/code/modules/power/batteryrack.dm
@@ -47,30 +47,17 @@
/obj/machinery/power/smes/batteryrack/update_icon()
- overlays.Cut()
+ cut_overlays()
if(stat & BROKEN) return
- if(!br_cache)
- br_cache = list()
- br_cache.len = 7
- br_cache[1] = image('icons/obj/power.dmi', "gsmes_outputting")
- br_cache[2] = image('icons/obj/power.dmi', "gsmes_charging")
- br_cache[3] = image('icons/obj/power.dmi', "gsmes_overcharge")
- br_cache[4] = image('icons/obj/power.dmi', "gsmes_og1")
- br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2")
- br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3")
- br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4")
-
if (output_attempt)
- overlays += br_cache[1]
+ add_overlay("gsmes_outputting")
if(inputting)
- overlays += br_cache[2]
+ add_overlay("gsmes_charging")
var/clevel = chargedisplay()
if(clevel>0)
- overlays += br_cache[3+clevel]
- return
-
+ add_overlay("gsmes_og[clevel]")
/obj/machinery/power/smes/batteryrack/chargedisplay()
return round(4 * charge/(capacity ? capacity : 5e6))
@@ -130,20 +117,19 @@
/obj/machinery/power/smes/batteryrack/makeshift/update_icon()
- overlays.Cut()
+ cut_overlays()
if(stat & BROKEN) return
if (output_attempt)
- overlays += br_cache[1]
+ add_overlay("gsmes_outputting")
if(inputting)
- overlays += br_cache[2]
+ add_overlay("gsmes_charging")
if (overcharge_percent > 100)
- overlays += br_cache[3]
+ add_overlay("gsmes_overcharge")
else
var/clevel = chargedisplay()
if(clevel>0)
- overlays += br_cache[3+clevel]
- return
+ add_overlay("gsmes_og[clevel]")
//This mess of if-elses and magic numbers handles what happens if the engies don't pay attention and let it eat too much charge
//What happens depends on how much capacity has the ghetto smes and how much it is overcharged.
diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm
index 4f842d82b67..ccda2970859 100644
--- a/code/modules/power/breaker_box.dm
+++ b/code/modules/power/breaker_box.dm
@@ -20,17 +20,22 @@
var/RCon_tag = "NO_TAG"
var/update_locked = 0
+/obj/machinery/power/breakerbox/Initialize()
+ LAZYADD(SSmachinery.breaker_boxes, src)
+ return ..()
+
/obj/machinery/power/breakerbox/Destroy()
- ..()
- for(var/datum/nano_module/rcon/R in world)
- R.FindDevices()
+ LAZYREMOVE(SSmachinery.breaker_boxes, src)
+ SSmachinery.queue_rcon_update()
+ return ..()
/obj/machinery/power/breakerbox/activated
icon_state = "bbox_on"
// Enabled on server startup. Used in substations to keep them in bypass mode.
-/obj/machinery/power/breakerbox/activated/initialize()
- set_state(1)
+/obj/machinery/power/breakerbox/activated/Initialize()
+ . = ..()
+ set_state(1)
/obj/machinery/power/breakerbox/examine(mob/user)
..()
@@ -54,10 +59,12 @@
set_state(!on)
user << "Update Completed. New setting:[on ? "on": "off"] "
update_locked = 1
- spawn(600)
- update_locked = 0
+ addtimer(CALLBACK(src, .proc/reset_locked), 600)
busy = 0
+/obj/machinery/power/breakerbox/proc/reset_locked()
+ update_locked = 0
+
/obj/machinery/power/breakerbox/attack_hand(mob/user)
if(update_locked)
@@ -78,8 +85,7 @@
"[user.name] [on ? "enabled" : "disabled"] the breaker box! ",\
"You [on ? "enabled" : "disabled"] the breaker box! ")
update_locked = 1
- spawn(600)
- update_locked = 0
+ addtimer(CALLBACK(src, .proc/reset_locked), 600)
busy = 0
/obj/machinery/power/breakerbox/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
@@ -88,6 +94,7 @@
if(newtag)
RCon_tag = newtag
user << "You changed the RCON tag to: [newtag] "
+ SSmachinery.queue_rcon_update()
/obj/machinery/power/breakerbox/proc/set_state(var/state)
on = state
@@ -126,8 +133,4 @@
if(!update_locked)
set_state(!on)
update_locked = 1
- spawn(600)
- update_locked = 0
-
-/obj/machinery/power/breakerbox/process()
- return 1
+ addtimer(CALLBACK(src, .proc/reset_locked), 600)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 50dba504ebb..5182aac20f3 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -78,7 +78,7 @@ var/list/possible_cable_coil_colours = list(
color = COLOR_WHITE
/obj/structure/cable/New()
- ..()
+ . = ..()
// ensure d1 & d2 reflect the icon_state for entering and exiting cable
@@ -97,7 +97,7 @@ var/list/possible_cable_coil_colours = list(
if(powernet)
cut_cable_from_powernet() // update the powernets
cable_list -= src //remove it from global cable list
- ..() // then go ahead and delete the cable
+ return ..() // then go ahead and delete the cable
///////////////////////////////////
// General procedures
@@ -482,8 +482,8 @@ obj/structure/cable/proc/cableColor(var/colorC)
uses_charge = 1
charge_costs = list(1)
-/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/param_color = null)
- ..()
+/obj/item/stack/cable_coil/Initialize(mapload, length = MAXCOIL, var/param_color = null)
+ . = ..()
src.amount = length
if (param_color) // It should be red by default, so only recolor it if parameter was specified.
color = param_color
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 71dac77f037..53ca584fb55 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -2,15 +2,11 @@
// charge from 0 to 100%
// fits in APC to provide backup power
-/obj/item/weapon/cell/New()
- ..()
+/obj/item/weapon/cell/Initialize()
+ . = ..()
charge = maxcharge
update_icon()
-/obj/item/weapon/cell/initialize()
- ..()
- update_icon()
-
/obj/item/weapon/cell/Created()
//Newly built cells spawn with no charge to prevent power exploits
charge = 0
@@ -50,7 +46,7 @@
// use power from a cell, returns the amount actually used
/obj/item/weapon/cell/proc/use(var/amount)
- if (gcDestroyed)
+ if (QDELING(src))
return 0
if(rigged && amount > 0)
@@ -70,7 +66,7 @@
// recharge the cell
/obj/item/weapon/cell/proc/give(var/amount)
- if (gcDestroyed)
+ if (QDELING(src))
return 0
if(rigged && amount > 0)
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index e8429fa0c20..8069e575604 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -25,8 +25,8 @@
var/datum/effect_system/sparks/spark_system
-/obj/machinery/power/generator/New()
- ..()
+/obj/machinery/power/generator/Initialize()
+ . = ..()
desc = initial(desc) + " Rated for [round(max_power/1000)] kW."
var/dirs
if (dir == NORTH || dir == SOUTH)
@@ -35,8 +35,13 @@
dirs = list(NORTH,SOUTH)
spark_system = bind_spark(src, 3, dirs)
- spawn(1)
- reconnect()
+ reconnect()
+
+/obj/machinery/power/generator/Destroy()
+ QDEL_NULL(spark_system)
+ circ1 = null
+ circ2 = null
+ return ..()
//generators connect in dir and reverse_dir(dir) directions
//mnemonic to determine circulator/generator directions: the cirulators orbit clockwise around the generator
@@ -65,13 +70,9 @@
circ2 = null
/obj/machinery/power/generator/proc/updateicon()
- if(stat & (NOPOWER|BROKEN))
- overlays.Cut()
- else
- overlays.Cut()
-
- if(lastgenlev != 0)
- overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
+ cut_overlays()
+ if(!(stat & (NOPOWER|BROKEN)) && lastgenlev)
+ add_overlay("teg-op[lastgenlev]")
/obj/machinery/power/generator/process()
if(!circ1 || !circ2 || !anchored || stat & (BROKEN|NOPOWER))
diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm
index 7ca407ac9f3..6153fc7c154 100644
--- a/code/modules/power/generator_type2.dm
+++ b/code/modules/power/generator_type2.dm
@@ -13,14 +13,13 @@
var/lastgenlev = -1
-/obj/machinery/power/generator_type2/New()
- ..()
- spawn(5)
- input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90))
- input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90))
- if(!input1 || !input2)
- stat |= BROKEN
- updateicon()
+/obj/machinery/power/generator_type2/Initialize()
+ . = ..()
+ input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90))
+ input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90))
+ if(!input1 || !input2)
+ stat |= BROKEN
+ updateicon()
/obj/machinery/power/generator_type2/proc/updateicon()
@@ -140,4 +139,4 @@
/obj/machinery/power/generator_type2/power_change()
..()
- updateicon()
\ No newline at end of file
+ updateicon()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index dbd2bcf3b65..0a8a7864e7e 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -177,7 +177,7 @@
/obj/machinery/light/small/emergency
brightness_range = 6
brightness_power = 1
- brightness_color = "#FF0000"
+ brightness_color = "#FA8282"//"#FF0000"
/obj/machinery/light/small/red
brightness_range = 2.5
@@ -192,41 +192,38 @@
brightness_power = 4
supports_nightmode = FALSE
-/obj/machinery/light/built/New()
+/obj/machinery/light/built/Initialize()
+ . = ..()
status = LIGHT_EMPTY
update(0)
- ..()
-/obj/machinery/light/small/built/New()
+/obj/machinery/light/small/built/Initialize()
+ . = ..()
status = LIGHT_EMPTY
update(0)
- ..()
// create a new lighting fixture
-/obj/machinery/light/New()
- ..()
-
+/obj/machinery/light/Initialize(mapload)
+ . = ..()
spark_system = bind_spark(src, 3)
+ on = has_power()
- spawn(2)
- on = has_power()
+ switch(fitting)
+ if("tube")
+ if(mapload && prob(2))
+ broken(1)
+ if("bulb")
+ if(mapload && prob(5))
+ broken(1)
- switch(fitting)
- if("tube")
- if(prob(2))
- broken(1)
- if("bulb")
- if(prob(5))
- broken(1)
- spawn(1)
- update(0)
+ update(0)
/obj/machinery/light/Destroy()
var/area/A = get_area(src)
if(A)
on = 0
-// A.update_lights()
- ..()
+ QDEL_NULL(spark_system)
+ return ..()
/obj/machinery/light/update_icon()
switch(status) // set icon_states
@@ -379,7 +376,7 @@
for(var/mob/M in viewers(src))
if(M == user)
continue
- M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
+ M.show_message("[user.name] smashes the light!", 3, "You hear a tinkle of breaking glass", 2)
if(on && (W.flags & CONDUCT))
//if(!user.mutations & COLD_RESISTANCE)
if (prob(12))
@@ -426,19 +423,29 @@
var/area/A = get_area(src)
return A && A.lightswitch && (!A.requires_power || A.power_light)
-/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
- if(flickering) return
- flickering = 1
- spawn(0)
- if(on && status == LIGHT_OK)
- for(var/i = 0; i < amount; i++)
- if(status != LIGHT_OK) break
- on = !on
- update(0)
- sleep(rand(5, 15))
- on = (status == LIGHT_OK)
- update(0)
- flickering = 0
+/obj/machinery/light/proc/flicker(amount = rand(10,20))
+ set waitfor = FALSE
+ if (flickering || !on || status != LIGHT_OK)
+ return
+
+ flickering = TRUE
+ var/offset = 1
+ var/thecallback = CALLBACK(src, .proc/handle_flicker)
+ for (var/i = 0; i < amount; i++)
+ addtimer(thecallback, offset)
+ offset += rand(5, 15)
+
+ addtimer(CALLBACK(src, .proc/end_flicker), offset)
+
+/obj/machinery/light/proc/handle_flicker()
+ if (status == LIGHT_OK)
+ on = !on
+ update(FALSE)
+
+/obj/machinery/light/proc/end_flicker()
+ on = (status == LIGHT_OK)
+ update(FALSE)
+ flickering = FALSE
// ai attack - make lights flicker, because why not
@@ -576,8 +583,10 @@
// called when area power state changes
/obj/machinery/light/power_change()
- spawn(10)
- seton(has_power())
+ addtimer(CALLBACK(src, .proc/handle_power_change), 10, TIMER_UNIQUE)
+
+/obj/machinery/light/proc/handle_power_change()
+ seton(has_power())
// called when on fire
@@ -588,13 +597,13 @@
// explode the light
/obj/machinery/light/proc/explode()
+ set waitfor = FALSE
var/turf/T = get_turf(src.loc)
- spawn(0)
- broken() // break it first to give a warning
- sleep(2)
- explosion(T, 0, 0, 2, 2)
- sleep(1)
- qdel(src)
+ broken() // break it first to give a warning
+ sleep(2)
+ explosion(T, 0, 0, 2, 2)
+ sleep(1)
+ qdel(src)
// Sets the light being output by a light tube or other static source
// Non or negative inputs will reset to default
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 400e7281b6f..b1caf911a7d 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -109,13 +109,8 @@
var/temperature = 0 //The current temperature
var/overheating = 0 //if this gets high enough the generator explodes
-/obj/machinery/power/port_gen/pacman/initialize()
- ..()
- if(anchored)
- connect_to_network()
-
-/obj/machinery/power/port_gen/pacman/New()
- ..()
+/obj/machinery/power/port_gen/pacman/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
@@ -125,6 +120,9 @@
component_parts += new board_path(src)
RefreshParts()
+ if(anchored)
+ connect_to_network()
+
/obj/machinery/power/port_gen/pacman/Destroy()
DropFuel()
return ..()
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index acae27083aa..b9d135840f7 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -19,7 +19,7 @@
disconnect_from_network()
disconnect_terminal()
- ..()
+ return ..()
///////////////////////////////
// General procedures
@@ -233,9 +233,6 @@
. += C
return .
-/hook/startup/proc/buildPowernets()
- return makepowernets()
-
// rebuild all power networks from scratch - only called at world creation or by the admin verb
/proc/makepowernets()
for(var/datum/powernet/PN in powernets)
diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm
index 7dcc3a02433..6cc1976128c 100644
--- a/code/modules/power/sensors/powernet_sensor.dm
+++ b/code/modules/power/sensors/powernet_sensor.dm
@@ -22,8 +22,8 @@
// Proc: New()
// Parameters: None
// Description: Automatically assigns name according to ID tag.
-/obj/machinery/power/sensor/New()
- ..()
+/obj/machinery/power/sensor/Initialize()
+ . = ..()
auto_set_name()
// Proc: auto_set_name()
@@ -167,7 +167,7 @@
APC_entry["total_load"] = reading_to_text(A.lastused_total)
// Hopefully removes those goddamn \improper s which are screwing up the UI
var/N = A.area.name
- if(findtext(N, "ÿ"))
+ if(findtext(N, "�"))
N = copytext(N, 3)
APC_entry["name"] = N
// Add data into main list of APC data.
diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm
index e2d83e6176e..8169b1fbdd8 100644
--- a/code/modules/power/sensors/sensor_monitoring.dm
+++ b/code/modules/power/sensors/sensor_monitoring.dm
@@ -41,8 +41,8 @@
..()
// On creation automatically connects to active sensors. This is delayed to ensure sensors already exist.
-/obj/machinery/computer/power_monitor/New()
- ..()
+/obj/machinery/computer/power_monitor/Initialize()
+ . = ..()
power_monitor = new(src)
// On user click opens the UI of this computer.
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index dee15d9f140..1cb337ff085 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -23,7 +23,7 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/Destroy()
rad_collectors -= src
- ..()
+ return ..()
/obj/machinery/power/rad_collector/process()
//so that we don't zero out the meter if the SM is processed first.
@@ -134,13 +134,13 @@ var/global/list/rad_collectors = list()
/obj/machinery/power/rad_collector/proc/update_icons()
- overlays.Cut()
+ cut_overlays()
if(P)
- overlays += image('icons/obj/singularity.dmi', "ptank")
+ add_overlay("ptank")
if(stat & (NOPOWER|BROKEN))
return
if(active)
- overlays += image('icons/obj/singularity.dmi', "on")
+ add_overlay("on")
/obj/machinery/power/rad_collector/proc/toggle_power()
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 751e2cf1578..7f0e54f0a22 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -20,7 +20,7 @@
FG1.cleanup()
if(FG2 && !FG2.clean_up)
FG2.cleanup()
- ..()
+ return ..()
/obj/machinery/containment_field/attack_hand(mob/user as mob)
if(get_dist(src, user) > 1)
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 9b3b714f87c..5ec597f730c 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -29,10 +29,6 @@
var/datum/effect_system/sparks/spark_system
-/obj/machinery/power/emitter/New()
- ..()
- spark_system = bind_spark(src, 5, alldirs)
-
/obj/machinery/power/emitter/Destroy()
QDEL_NULL(spark_system)
return ..()
@@ -48,8 +44,9 @@
src.set_dir(turn(src.dir, 90))
return 1
-/obj/machinery/power/emitter/initialize()
- ..()
+/obj/machinery/power/emitter/Initialize()
+ . = ..()
+ spark_system = bind_spark(src, 5, alldirs)
if(state == 2 && anchored)
connect_to_network()
if(_wifi_id)
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 6368e7348d6..e0109ff7aea 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -38,22 +38,19 @@ field_generator power level display
/obj/machinery/field_generator/update_icon()
- overlays.Cut()
+ cut_overlays()
if(!active)
if(warming_up)
- overlays += "+a[warming_up]"
+ add_overlay("+a[warming_up]")
if(fields.len)
- overlays += "+on"
+ add_overlay("+on")
// Power level indicator
// Scale % power to % num_power_levels and truncate value
var/level = round(num_power_levels * power / field_generator_max_power)
// Clamp between 0 and num_power_levels for out of range power values
level = between(0, level, num_power_levels)
if(level)
- overlays += "+p[level]"
-
- return
-
+ add_overlay("+p[level]")
/obj/machinery/field_generator/New()
..()
@@ -133,7 +130,7 @@ field_generator power level display
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
"You start to weld the [src] to the floor.", \
"You hear welding")
- if (do_after(user,20))
+ if (do_after(user,20, act_target = src))
if(!src || !WT.isOn()) return
state = 2
user << "You weld the field generator to the floor."
@@ -145,7 +142,7 @@ field_generator power level display
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
"You start to cut the [src] free from the floor.", \
"You hear welding")
- if (do_after(user,20))
+ if (do_after(user,20, act_target = src))
if(!src || !WT.isOn()) return
state = 1
user << "You cut the [src] free from the floor."
@@ -168,14 +165,11 @@ field_generator power level display
/obj/machinery/field_generator/Destroy()
src.cleanup()
- ..()
-
-
+ return ..()
/obj/machinery/field_generator/proc/turn_off()
active = 0
- spawn(1)
- src.cleanup()
+ addtimer(CALLBACK(src, .proc/cleanup), 1)
update_icon()
/obj/machinery/field_generator/proc/turn_on()
@@ -190,7 +184,6 @@ field_generator power level display
start_fields()
update_icon()
-
/obj/machinery/field_generator/proc/calc_power()
if(Varpower)
return 1
@@ -210,9 +203,7 @@ field_generator power level display
if(draw_power(round(power_draw)) >= power_draw)
return 1
else
- for(var/mob/M in viewers(src))
- M.show_message("\red \The [src] shuts down!")
- turn_off()
+ visible_message(span("alert", "\The [src] shuts down!"))
investigate_log("ran out of power and deactivated ","singulo")
src.power = 0
return 0
@@ -242,32 +233,27 @@ field_generator power level display
if(!src.state == 2 || !anchored)
turn_off()
return
- spawn(1)
- setup_field(1)
- spawn(2)
- setup_field(2)
- spawn(3)
- setup_field(4)
- spawn(4)
- setup_field(8)
+ addtimer(CALLBACK(src, .proc/setup_field, 1), 1)
+ addtimer(CALLBACK(src, .proc/setup_field, 2), 2)
+ addtimer(CALLBACK(src, .proc/setup_field, 4), 3)
+ addtimer(CALLBACK(src, .proc/setup_field, 8), 4)
src.active = 2
-
/obj/machinery/field_generator/proc/setup_field(var/NSEW)
var/turf/T = src.loc
var/obj/machinery/field_generator/G
var/steps = 0
- if(!NSEW)//Make sure its ran right
+ if(!NSEW) //Make sure its ran right
return
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator
T = get_step(T, NSEW)
- if(T.density)//We cant shoot a field though this
+ if(T.density) //We cant shoot a field though this
return 0
for(var/atom/A in T.contents)
if(ismob(A))
continue
if(!istype(A,/obj/machinery/field_generator))
- if((istype(A,/obj/machinery/door)||istype(A,/obj/machinery/the_singularitygen))&&(A.density))
+ if((istype(A,/obj/machinery/door) || istype(A,/obj/machinery/the_singularitygen)) && (A.density))
return 0
steps += 1
G = locate(/obj/machinery/field_generator) in T
@@ -308,16 +294,15 @@ field_generator power level display
if(!listcheck)
G.connected_gens.Add(src)
-
/obj/machinery/field_generator/proc/cleanup()
clean_up = 1
for (var/obj/machinery/containment_field/F in fields)
- if (isnull(F))
+ if (QDELETED(F))
continue
qdel(F)
fields = list()
for(var/obj/machinery/field_generator/FG in connected_gens)
- if (isnull(FG))
+ if (QDELETED(FG))
continue
FG.connected_gens.Remove(src)
if(!FG.clean_up)//Makes the other gens clean up as well
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index f98df8a06ef..651a1fec58b 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -76,7 +76,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
construction_state = 0
if(master)
master.part_scan()
- ..()
+ return ..()
/obj/structure/particle_accelerator/end_cap
name = "Alpha Particle Generation Array"
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 456be9ed7c2..049832a1068 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -60,7 +60,7 @@
/obj/machinery/particle_accelerator/control_box/update_icon()
if(active)
- icon_state = "[reference]p1"
+ icon_state = "[reference]p[strength]"
else
if(use_power)
if(assembled)
@@ -115,6 +115,8 @@
part.strength = strength
part.update_icon()
+ update_icon()
+
/obj/machinery/particle_accelerator/control_box/proc/add_strength(var/s)
if(assembled)
strength++
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 7b70b10b5b5..b78d406dd96 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -35,19 +35,18 @@
energy = starting_energy
if (temp)
- spawn (temp)
- qdel(src)
+ QDEL_IN(src, temp)
..()
- processing_objects += src
+ START_PROCESSING(SScalamity, src)
for(var/obj/machinery/power/singularity_beacon/singubeacon in machines)
if(singubeacon.active)
target = singubeacon
break
/obj/singularity/Destroy()
- processing_objects -= src
- ..()
+ STOP_PROCESSING(SScalamity, src)
+ return ..()
/obj/singularity/attack_hand(mob/user as mob)
consume(user)
@@ -267,19 +266,22 @@
return 1
/obj/singularity/proc/eat()
- for(var/atom/X in orange(grav_pull, src))
- var/dist = get_dist(X, src)
- var/obj/singularity/S = src
- if(!istype(src))
- return
- if(dist > consume_range)
- X.singularity_pull(S, current_size)
- else if(dist <= consume_range)
- consume(X)
-
- //for (var/turf/T in trange(grav_pull, src)) //TODO: Create a similar trange for orange to prevent snowflake of self check.
- // consume(T)
-
+ for(var/tile in spiral_range_turfs(grav_pull, src))
+ var/turf/T = tile
+ if(!T || !isturf(loc))
+ continue
+ if(get_dist(T, src) > consume_range)
+ T.singularity_pull(src, current_size)
+ else
+ consume(T)
+ for(var/thing in T)
+ if(isturf(loc) && thing != src)
+ var/atom/movable/X = thing
+ if(get_dist(X, src) > consume_range)
+ X.singularity_pull(src, current_size)
+ else
+ consume(X)
+ CHECK_TICK
return
/obj/singularity/proc/consume(const/atom/A)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index aed7576af13..e3058818ace 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -5,6 +5,19 @@
#define SMESMAXCHARGELEVEL 250000
#define SMESMAXOUTPUT 250000
+//Cache defines
+#define SMES_CLEVEL_1 1
+#define SMES_CLEVEL_2 2
+#define SMES_CLEVEL_3 3
+#define SMES_CLEVEL_4 4
+#define SMES_CLEVEL_5 5
+#define SMES_OUTPUTTING 6
+#define SMES_OUTPUT_ATTEMPT 7
+#define SMES_NOT_OUTPUTTING 8
+#define SMES_INPUTTING 9
+#define SMES_INPUT_ATTEMPT 10
+#define SMES_INPUT_MAX 11
+
/obj/machinery/power/smes
name = "power storage unit"
desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."
@@ -52,6 +65,8 @@
var/datum/effect_system/sparks/big_spark
var/datum/effect_system/sparks/small_spark
+ var/static/list/smesImageCache
+
/obj/machinery/power/smes/drain_power(var/drain_check, var/surge, var/amount = 0)
if(drain_check)
@@ -62,36 +77,30 @@
return smes_amt / SMESRATE
-/obj/machinery/power/smes/New()
- ..()
+/obj/machinery/power/smes/Initialize()
+ . = ..()
big_spark = bind_spark(src, 5, alldirs)
small_spark = bind_spark(src, 3)
- spawn(5)
- if(!powernet)
- connect_to_network()
+ if(!powernet)
+ connect_to_network()
- dir_loop:
- for(var/d in cardinal)
- var/turf/T = get_step(src, d)
- for(var/obj/machinery/power/terminal/term in T)
- if(term && term.dir == turn(d, 180))
- terminal = term
- break dir_loop
- if(!terminal)
- stat |= BROKEN
- return
- terminal.master = src
- if(!terminal.powernet)
- terminal.connect_to_network()
- update_icon()
+ dir_loop:
+ for(var/d in cardinal)
+ var/turf/T = get_step(src, d)
+ for(var/obj/machinery/power/terminal/term in T)
+ if(term && term.dir == turn(d, 180))
+ terminal = term
+ break dir_loop
+ if(!terminal)
+ stat |= BROKEN
+ return
+ terminal.master = src
+ if(!terminal.powernet)
+ terminal.connect_to_network()
+ update_icon()
-
-
-
- if(!should_be_mapped)
- warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z")
-
- return
+ if(!should_be_mapped)
+ warning("Non-buildable or Non-magical SMES at [src.x]X [src.y]Y [src.z]Z")
/obj/machinery/power/smes/add_avail(var/amount)
if(..(amount))
@@ -108,28 +117,27 @@
return 0
/obj/machinery/power/smes/update_icon()
- overlays.Cut()
- if(stat & BROKEN) return
-
- overlays += image('icons/obj/power.dmi', "smes-op[outputting]")
+ cut_overlays()
+ if(stat & BROKEN)
+ return
if(inputting == 2)
- overlays += image('icons/obj/power.dmi', "smes-oc2")
+ add_overlay("smes-oc2")
else if (inputting == 1)
- overlays += image('icons/obj/power.dmi', "smes-oc1")
+ add_overlay("smes-oc1")
else if (input_attempt)
- overlays += image('icons/obj/power.dmi', "smes-oc0")
+ add_overlay("smes-oc0")
var/clevel = chargedisplay()
if(clevel)
- overlays += image('icons/obj/power.dmi', "smes-og[clevel]")
+ add_overlay("smes-og[clevel]")
if(outputting == 2)
- overlays += image('icons/obj/power.dmi', "smes-op2")
+ add_overlay("smes-op2")
else if (outputting == 1)
- overlays += image('icons/obj/power.dmi', "smes-op1")
+ add_overlay("smes-op1")
else
- overlays += image('icons/obj/power.dmi', "smes-op0")
+ add_overlay("smes-op0")
/obj/machinery/power/smes/proc/chargedisplay()
return round(5.5*charge/(capacity ? capacity : 5e6))
@@ -454,3 +462,15 @@
/obj/machinery/power/smes/magical/process()
charge = 5000000
..()
+
+#undef SMES_CLEVEL_1
+#undef SMES_CLEVEL_2
+#undef SMES_CLEVEL_3
+#undef SMES_CLEVEL_4
+#undef SMES_CLEVEL_5
+#undef SMES_OUTPUTTING
+#undef SMES_OUTPUT_ATTEMPT
+#undef SMES_NOT_OUTPUTTING
+#undef SMES_INPUTTING
+#undef SMES_INPUT_ATTEMPT
+#undef SMES_INPUT_MAX
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index 40e469eec5c..bc080e4715f 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -41,25 +41,21 @@
// These are used on individual outposts as backup should power line be cut, or engineering outpost lost power.
// 1M Charge, 150K I/O
-/obj/machinery/power/smes/buildable/outpost_substation/New()
- ..(0)
+/obj/machinery/power/smes/buildable/outpost_substation/Initialize()
+ . = ..()
component_parts += new /obj/item/weapon/smes_coil/weak(src)
recalc_coils()
// This one is pre-installed on engineering shuttle. Allows rapid charging/discharging for easier transport of power to outpost
// 11M Charge, 2.5M I/O
-/obj/machinery/power/smes/buildable/power_shuttle/New()
- ..(0)
+/obj/machinery/power/smes/buildable/power_shuttle/Initialize()
+ . = ..()
component_parts += new /obj/item/weapon/smes_coil/super_io(src)
component_parts += new /obj/item/weapon/smes_coil/super_io(src)
component_parts += new /obj/item/weapon/smes_coil(src)
recalc_coils()
-
-
-
-
// END SMES SUBTYPES
// SMES itself
@@ -78,8 +74,7 @@
/obj/machinery/power/smes/buildable/Destroy()
qdel(wires)
wires = null
- for(var/datum/nano_module/rcon/R in world)
- R.FindDevices()
+ SSmachinery.queue_rcon_update()
return ..()
// Proc: process()
@@ -122,6 +117,9 @@
for(var/i = 1, i <= cur_coils, i++)
component_parts += new /obj/item/weapon/smes_coil(src)
recalc_coils()
+
+ SSmachinery.queue_rcon_update()
+
..()
// Proc: attack_hand()
@@ -289,8 +287,8 @@
// Description: Allows us to use special icon overlay for critical SMESs
/obj/machinery/power/smes/buildable/update_icon()
if (failing)
- overlays.Cut()
- overlays += image('icons/obj/power.dmi', "smes-crit")
+ cut_overlays()
+ add_overlay("smes-crit")
else
..()
@@ -313,6 +311,7 @@
if(newtag)
RCon_tag = newtag
user << "You changed the RCON tag to: [newtag] "
+ SSmachinery.queue_rcon_update()
return
// Charged above 1% and safeties are enabled.
if((charge > (capacity/100)) && safeties_enabled)
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 39d52a93566..478c7688339 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -1,8 +1,6 @@
#define SOLAR_MAX_DIST 40
#define SOLARGENRATE 1500
-var/list/solars_list = list()
-
/obj/machinery/power/solar
name = "solar panel"
desc = "A solar electrical generator."
@@ -25,14 +23,14 @@ var/list/solars_list = list()
/obj/machinery/power/solar/drain_power()
return -1
-/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S)
- ..(loc)
+/obj/machinery/power/solar/Initialize(mapload, var/obj/item/solar_assembly/S)
+ . = ..()
Make(S)
connect_to_network()
/obj/machinery/power/solar/Destroy()
unset_control() //remove from control computer
- ..()
+ return ..()
//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC)
@@ -94,11 +92,11 @@ var/list/solars_list = list()
/obj/machinery/power/solar/update_icon()
..()
- overlays.Cut()
+ cut_overlays()
if(stat & BROKEN)
- overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
+ add_overlay("solar_panel-b")
else
- overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
+ add_overlay("solar_panel")
src.set_dir(angle2dir(adir))
return
@@ -166,8 +164,8 @@ var/list/solars_list = list()
return
-/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S)
- ..(loc, S, 0)
+/obj/machinery/power/solar/fake/Initialize(mapload, var/obj/item/solar_assembly/S)
+ . = ..(mapload, S, 0)
/obj/machinery/power/solar/fake/process()
. = PROCESS_KILL
@@ -301,16 +299,16 @@ var/list/solars_list = list()
M.unset_control()
if(connected_tracker)
connected_tracker.unset_control()
- ..()
+ return ..()
/obj/machinery/power/solar_control/disconnect_from_network()
..()
- solars_list.Remove(src)
+ sun.solars -= src
/obj/machinery/power/solar_control/connect_to_network()
var/to_return = ..()
if(powernet) //if connected and not already in solar_list...
- solars_list |= src //... add it
+ sun.solars |= src //... add it
return to_return
//search for unconnected panels and trackers in the computer powernet and connect them
@@ -346,24 +344,24 @@ var/list/solars_list = list()
updateDialog()
-/obj/machinery/power/solar_control/initialize()
- ..()
+/obj/machinery/power/solar_control/Initialize()
+ . = ..()
if(!connect_to_network()) return
set_panels(cdir)
/obj/machinery/power/solar_control/update_icon()
if(stat & BROKEN)
icon_state = "broken"
- overlays.Cut()
+ cut_overlays()
return
if(stat & NOPOWER)
icon_state = "computer"
- overlays.Cut()
+ cut_overlays()
return
icon_state = "solar_control"
- overlays.Cut()
+ cut_overlays()
if(cdir > -1)
- overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir))
+ add_overlay(image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)))
return
/obj/machinery/power/solar_control/attack_hand(mob/user)
@@ -530,13 +528,12 @@ var/list/solars_list = list()
/obj/machinery/power/solar_control/autostart
track = 2 // Auto tracking mode
-/obj/machinery/power/solar_control/autostart/New()
- ..()
- spawn(150) // Wait 15 seconds to ensure everything was set up properly (such as, powernets, solar panels, etc.
- src.search_for_connected()
- if(connected_tracker && track == 2)
- connected_tracker.set_angle(sun.angle)
- src.set_panels(cdir)
+/obj/machinery/power/solar_control/autostart/Initialize()
+ . = ..()
+ src.search_for_connected()
+ if(connected_tracker && track == 2)
+ connected_tracker.set_angle(sun.angle)
+ src.set_panels(cdir)
//
// MISC
diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm
index 7cbe2c828b3..91802ec0531 100644
--- a/code/modules/power/terminal.dm
+++ b/code/modules/power/terminal.dm
@@ -14,10 +14,11 @@
layer = 2.6 // a bit above wires
-/obj/machinery/power/terminal/New()
- ..()
+/obj/machinery/power/terminal/Initialize()
+ . = ..()
var/turf/T = src.loc
- if(level==1) hide(!T.is_plating())
+ if(level == 1)
+ hide(!T.is_plating())
return
/obj/machinery/power/terminal/Destroy()
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 80f6ff98075..32cf9c37a2f 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -41,14 +41,18 @@
default_deconstruction_crowbar(user, W)
/obj/machinery/power/tesla_coil/tesla_act(var/power)
- being_shocked = 1
- var/power_produced = power / power_loss
- add_avail(power_produced*input_power_multiplier)
- flick("coilhit", src)
- playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
- tesla_zap(src, 5, power_produced)
- spawn(10)
- being_shocked = 0
+ if(anchored)
+ being_shocked = 1
+ //don't lose arc power when it's not connected to anything
+ //please place tesla coils all around the station to maximize effectiveness
+ var/power_produced = powernet ? power / power_loss : power
+ add_avail(power_produced*input_power_multiplier)
+ flick("coilhit", src)
+ playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
+ tesla_zap(src, 5, power_produced)
+ addtimer(CALLBACK(src, .proc/reset_shocked), 10)
+ else
+ ..()
/obj/machinery/power/grounding_rod
name = "Grounding Rod"
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index cd1c8439a19..b001773a6b2 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -1,7 +1,7 @@
-#define TESLA_DEFAULT_POWER 3476520
-#define TESLA_MINI_POWER 1738260
+#define TESLA_DEFAULT_POWER 1738260
+#define TESLA_MINI_POWER 869130
-var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
+var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
/obj/machinery/power/emitter,
/obj/machinery/field_generator,
/mob/living/simple_animal,
@@ -13,8 +13,13 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/structure/particle_accelerator/power_box,
/obj/structure/particle_accelerator/end_cap,
/obj/machinery/containment_field,
- /obj/structure/disposalpipe)
-
+ /obj/structure/disposalpipe,
+ /obj/structure/sign,
+ /obj/machinery/gateway,
+ /obj/structure/lattice,
+ /obj/structure/grille,
+ /obj/machinery/the_singularitygen/tesla,
+ /obj/machinery/atmospherics/pipe))
/obj/singularity/energy_ball
name = "energy ball"
desc = "An energy ball."
@@ -27,31 +32,51 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
grav_pull = 0
contained = 0
density = 1
+ energy = 0
+ dissipate = 1
+ dissipate_delay = 5
+ dissipate_strength = 1
+ layer = LIGHTING_LAYER + 0.1
+ blend_mode = BLEND_ADD
var/list/orbiting_balls = list()
var/produced_power
- var/is_orbiting
+ var/energy_to_raise = 32
+ var/energy_to_lower = -20
+
+/obj/singularity/energy_ball/ex_act(severity, target)
+ return
/obj/singularity/energy_ball/Destroy()
- for(var/obj/singularity/energy_ball/EB in orbiting_balls)
+ if(orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
+ var/obj/singularity/energy_ball/EB = orbiting.orbiting
+ EB.orbiting_balls -= src
+
+ for(var/ball in orbiting_balls)
+ var/obj/singularity/energy_ball/EB = ball
qdel(EB)
- ..()
+
+ . = ..()
/obj/singularity/energy_ball/process()
- if(!is_orbiting)
+ if(!orbiting)
handle_energy()
- var/amount_to_move = 2 + orbiting_balls.len * 2
- var/what_does_the_scouter_say_about_the_balls_power_level = (TESLA_DEFAULT_POWER + (TESLA_MINI_POWER * orbiting_balls.len))
- move_the_basket_ball(amount_to_move)
+
+ move_the_basket_ball(4 + orbiting_balls.len * 1.5)
+
+ playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 30)
+
pixel_x = 0
pixel_y = 0
- playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5)
- tesla_zap(src, 7, what_does_the_scouter_say_about_the_balls_power_level)
+
+ dir = tesla_zap(src, 7, TESLA_DEFAULT_POWER, TRUE)
+
pixel_x = -32
pixel_y = -32
- energy += rand(1,3) // ensure it generates energy without needing to be blasted by the PA too much due to its size, and that a tesla engine will always get bigger over time
+ for (var/ball in orbiting_balls)
+ var/range = rand(1, Clamp(orbiting_balls.len, 3, 7))
+ tesla_zap(ball, range, TESLA_MINI_POWER/7*range, TRUE)
else
energy = 0 // ensure we dont have miniballs of miniballs
- return
/obj/singularity/energy_ball/examine(mob/user)
..()
@@ -60,28 +85,50 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/singularity/energy_ball/proc/move_the_basket_ball(var/move_amount)
- for(var/i = 0, i < move_amount, i++)
- var/move_dir = pick(alldirs)
- var/turf/T = get_step(src,move_dir)
+ //we face the last thing we zapped, so this lets us favor that direction a bit
+ var/first_move = dir
+ for(var/i in 0 to move_amount)
+ var/move_dir = pick(alldirs + first_move) //give the first move direction a bit of favoring.
+ if(target && prob(60))
+ move_dir = get_dir(src,target)
+ var/turf/T = get_step(src, move_dir)
if(can_move(T))
- loc = get_step(src,move_dir)
+ forceMove(T)
+ dir = move_dir
+ for(var/mob/living/carbon/C in loc)
+ dust_mobs(C)
+
/obj/singularity/energy_ball/proc/handle_energy()
- if(energy >= 300)
- energy -= 300
- playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 5)
- spawn(100)
- var/obj/singularity/energy_ball/EB = new(loc)
- orbiting_balls.Add(EB)
- EB.transform *= pick(0.3,0.4,0.5,0.6,0.7)
- EB.is_orbiting = 1
- var/icon/I = icon(icon,icon_state,dir)
+ if(energy >= energy_to_raise)
+ energy_to_lower = energy_to_raise - 20
+ energy_to_raise = energy_to_raise * 1.25
- var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7)
- orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
- spawn(1)
- EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36))
+ playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 30)
+ addtimer(CALLBACK(src, .proc/new_mini_ball), 100)
+ else if(energy < energy_to_lower && orbiting_balls.len)
+ energy_to_raise = energy_to_raise / 1.25
+ energy_to_lower = (energy_to_raise / 1.25) - 20
+
+ var/Orchiectomy_target = pick(orbiting_balls)
+ qdel(Orchiectomy_target)
+
+ else if(orbiting_balls.len)
+ dissipate() //sing code has a much better system.
+
+/obj/singularity/energy_ball/proc/new_mini_ball()
+ if(!loc)
+ return
+ var/obj/singularity/energy_ball/EB = new(loc)
+
+ EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7)
+ var/icon/I = icon(icon,icon_state,dir)
+
+ var/orbitsize = (I.Width() + I.Height()) * pick(0.4, 0.5, 0.6, 0.7, 0.8)
+ orbitsize -= (orbitsize / world.icon_size) * (world.icon_size * 0.25)
+
+ EB.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36))
/obj/singularity/energy_ball/Bump(atom/A)
@@ -90,120 +137,127 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/singularity/energy_ball/Bumped(atom/A)
dust_mobs(A)
+/obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target)
+ if (istype(target))
+ target.orbiting_balls += src
+ target.dissipate_strength = target.orbiting_balls.len
+
+ . = ..()
+/obj/singularity/energy_ball/stop_orbit()
+ if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
+ var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting
+ orbitingball.orbiting_balls -= src
+ orbitingball.dissipate_strength = orbitingball.orbiting_balls.len
+ ..()
+ if (!loc && !QDELETED(src))
+ qdel(src)
+
+
/obj/singularity/energy_ball/proc/dust_mobs(atom/A)
- if(istype(A, /mob/living/carbon))
- var/mob/living/carbon/C = A
- C.dust()
- return
-
-/proc/get_closest_atom(type, list, source)
- var/closest_atom
- var/closest_distance
- for(var/A in list)
- if(!istype(A, type))
- continue
- var/distance = get_dist(source, A)
- if(!closest_distance)
- closest_distance = distance
- closest_atom = A
- else
- if(closest_distance > distance)
- closest_distance = distance
- closest_atom = A
- return closest_atom
-
-/proc/tesla_zap(var/atom/source, zap_range = 3, power)
- if(power < 500)
+ if(!iscarbon(A))
return
- var/list/tesla_coils = list()
- var/list/grounding_rods = list()
- var/list/potential_machine_zaps = list()
- var/list/potential_mob_zaps = list()
- var/list/potential_structure_zaps = list()
+ for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2))
+ if(GR.anchored)
+ return
+ var/mob/living/carbon/C = A
+ C.dust()
+
+/proc/tesla_zap(atom/source, zap_range = 3, power, explosive = FALSE, stun_mobs = TRUE)
+ . = source.dir
+ if(power < 1000)
+ return
+
+ var/closest_dist = 0
var/closest_atom
- for(var/atom/A in oview(source, zap_range))
+ var/obj/machinery/power/tesla_coil/closest_tesla_coil
+ var/obj/machinery/power/grounding_rod/closest_grounding_rod
+ var/mob/living/closest_mob
+ var/obj/machinery/closest_machine
+ var/obj/structure/closest_structure
+
+ for(var/A in oview(source, zap_range+2))
if(istype(A, /obj/machinery/power/tesla_coil))
+ var/dist = get_dist(source, A)
var/obj/machinery/power/tesla_coil/C = A
- if(C.being_shocked)
- continue
- tesla_coils.Add(C)
+ if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !C.being_shocked)
+ closest_dist = dist
+
+ //we use both of these to save on istype and typecasting overhead later on
+ //while still allowing common code to run before hand
+ closest_tesla_coil = C
+ closest_atom = C
+
+ else if(closest_tesla_coil)
+ continue //no need checking these other things
+
+ else if(istype(A, /obj/machinery/power/grounding_rod))
+ var/dist = get_dist(source, A)-2
+ if(dist <= zap_range && (dist < closest_dist || !closest_grounding_rod))
+ closest_grounding_rod = A
+ closest_atom = A
+ closest_dist = dist
+
+ else if(closest_grounding_rod || is_type_in_typecache(A, blacklisted_tesla_types))
continue
- if(istype(A, /obj/machinery/power/grounding_rod))
- var/obj/machinery/power/grounding_rod/R = A
- grounding_rods.Add(R)
- continue
- if(istype(A, /obj/machinery))
- var/obj/machinery/M = A
- if(is_type_in_list(M, blacklisted_tesla_types))
- continue
- if(M.being_shocked)
- continue
- potential_machine_zaps.Add(M)
- continue
- if(istype(A, /obj/structure))
- var/obj/structure/M = A
- if(is_type_in_list(M, blacklisted_tesla_types))
- continue
- if(M.being_shocked)
- continue
- potential_structure_zaps.Add(M)
- continue
- if(istype(A, /mob/living))
+
+ else if(isliving(A))
+ var/dist = get_dist(source, A)
var/mob/living/L = A
- if(L.stat == DEAD)
- continue
- if(is_type_in_list(L, blacklisted_tesla_types))
- continue
- potential_mob_zaps.Add(L)
+ if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD && !L.tesla_ignore)
+ closest_mob = L
+ closest_atom = A
+ closest_dist = dist
+
+ else if(closest_mob)
continue
- closest_atom = get_closest_atom(/obj/machinery/power/tesla_coil, tesla_coils, source)
- if(closest_atom && istype(closest_atom, /obj/machinery/power/tesla_coil))
- var/obj/machinery/power/tesla_coil/C = closest_atom
- source.Beam(C,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
- C.tesla_act(power)
- return
- if(!closest_atom)
- closest_atom = get_closest_atom(/obj/machinery/power/grounding_rod, grounding_rods, source)
- if(closest_atom && istype(closest_atom, /obj/machinery/power/grounding_rod))
- var/obj/machinery/power/grounding_rod/R = closest_atom
- source.Beam(R,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
- R.tesla_act(power)
- return
- if(!closest_atom)
- closest_atom = get_closest_atom(/mob/living, potential_mob_zaps, source)
- if(closest_atom && istype(closest_atom, /mob/living))
- var/mob/living/L = closest_atom
- var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5,5)
- source.Beam(L,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
- L.electrocute_act(shock_damage, source, 1, tesla_shock = 1)
- if(istype(L, /mob/living/silicon))
- var/mob/living/silicon/S = L
+
+ else if(istype(A, /obj/machinery))
+ var/obj/machinery/M = A
+ var/dist = get_dist(source, A)
+ if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !M.being_shocked)
+ closest_machine = M
+ closest_atom = A
+ closest_dist = dist
+
+ else if(closest_mob)
+ continue
+
+ else if(istype(A, /obj/structure))
+ var/obj/structure/S = A
+ var/dist = get_dist(source, A)
+ if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked)
+ closest_structure = S
+ closest_atom = A
+ closest_dist = dist
+
+ //Alright, we've done our loop, now lets see if was anything interesting in range
+ if(closest_atom)
+ //common stuff
+ source.Beam(closest_atom, icon_state="lightning[rand(1,12)]", icon = 'icons/effects/effects.dmi', time=5)
+ var/zapdir = get_dir(source, closest_atom)
+ if(zapdir)
+ . = zapdir
+
+ //per type stuff:
+ if(closest_tesla_coil)
+ closest_tesla_coil.tesla_act(power)
+
+ else if(closest_grounding_rod)
+ closest_grounding_rod.tesla_act(power)
+
+ else if(closest_mob)
+ var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
+ closest_mob.electrocute_act(shock_damage, source, 1, tesla_shock = 1)
+ if(issilicon(closest_mob))
+ var/mob/living/silicon/S = closest_mob
+ if(stun_mobs)
S.emp_act(2)
- tesla_zap(S, 7, power / 1.5) // metallic folks bounce it further
- else
- tesla_zap(L, 5, power / 1.5)
- return
- if(!closest_atom)
- closest_atom = get_closest_atom(/obj/machinery, potential_machine_zaps, source)
- if(closest_atom)
- var/obj/machinery/M = closest_atom
- source.Beam(M,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
- M.tesla_act(power)
- if(prob(85))
- M.emp_act(2)
- else
- if(prob(50))
- M.ex_act(3)
- else
- if(prob(90))
- M.ex_act(2)
- else
- M.ex_act(1)
- return
- if(!closest_atom)
- closest_atom = get_closest_atom(/obj/structure, potential_structure_zaps, source)
- if(closest_atom)
- var/obj/structure/S = closest_atom
- source.Beam(S,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5)
- S.tesla_act(power)
- return
+ tesla_zap(S, 7, power / 1.5, explosive, stun_mobs) // metallic folks bounce it further
+ else
+ tesla_zap(closest_mob, 5, power / 1.5, explosive, stun_mobs)
+
+ else if(closest_machine)
+ closest_machine.tesla_act(power)
+
+ else if(closest_structure)
+ closest_structure.tesla_act(power)
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 34e20d499c3..b1f3d4f8d2f 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -16,14 +16,14 @@
var/sun_angle = 0 // sun angle as set by sun datum
var/obj/machinery/power/solar_control/control = null
-/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S)
- ..(loc)
+/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S)
+ . = ..()
Make(S)
connect_to_network()
/obj/machinery/power/tracker/Destroy()
unset_control() //remove from control computer
- ..()
+ return ..()
//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST
/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC)
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index b81500d6715..25fac3a110f 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -180,7 +180,7 @@
return
if (usr.stat || usr.restrained() )
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
+ if (usr.IsAdvancedToolUser())
if(!istype(usr, /mob/living/silicon/ai))
usr << "\red You don't have the dexterity to do this!"
return
@@ -317,4 +317,4 @@
/obj/machinery/computer/turbine_computer/process()
src.updateDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index cf16954816a..65bebc04439 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -14,8 +14,8 @@
var/obj/item/projectile/BB = null //The loaded bullet - make it so that the projectiles are created only when needed?
var/spent_icon = "s-casing-spent"
-/obj/item/ammo_casing/New()
- ..()
+/obj/item/ammo_casing/Initialize()
+ . = ..()
if(ispath(projectile_type))
BB = new projectile_type(src)
pixel_x = rand(-10, 10)
diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm
index a18b3efc85b..77ce0579976 100644
--- a/code/modules/projectiles/effects.dm
+++ b/code/modules/projectiles/effects.dm
@@ -12,10 +12,8 @@
transform = M
/obj/effect/projectile/proc/activate(var/kill_delay = 3)
- spawn(kill_delay)
- qdel(src) //see effect_system.dm - sets loc to null and lets GC handle removing these effects
+ QDEL_IN(src, kill_delay) //see effect_system.dm - sets loc to null and lets GC handle removing these effects
- return
//----------------------------
// Laser beam
@@ -148,6 +146,18 @@
/obj/effect/projectile/solar/impact
icon_state = "impact_solar"
+//----------------------------
+// Treye beam
+//----------------------------
+/obj/effect/projectile/trilaser/tracer
+ icon_state = "plasmacutter"
+
+/obj/effect/projectile/trilaser/muzzle
+ icon_state = "muzzle_plasmacutter"
+
+/obj/effect/projectile/trilaser/impact
+ icon_state = "impact_plasmacutter"
+
//----------------------------
// Pulse muzzle
//----------------------------
@@ -178,4 +188,4 @@
icon_state = "muzzle_hcult"
/obj/effect/projectile/cult/heavy/impact
- icon_state = "impact_hcult"
\ No newline at end of file
+ icon_state = "impact_hcult"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 504c1b14468..dcdc7198935 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -199,9 +199,6 @@
user.setMoveCooldown(move_delay)
next_fire_time = world.time + fire_delay
- if(muzzle_flash)
- set_light(0)
-
//obtains the next projectile to fire
/obj/item/weapon/gun/proc/consume_next_projectile()
return null
@@ -245,6 +242,7 @@
if(muzzle_flash)
set_light(muzzle_flash)
+ addtimer(CALLBACK(src, /atom/.proc/set_light, 0), 2)
if(recoil)
spawn()
@@ -510,10 +508,18 @@
name = "offhand"
unwield()
- qdel(src)
+ if (ismob(loc))
+ var/mob/the_mob = loc
+ the_mob.drop_from_inventory(src)
+ else
+ qdel(src)
wield()
- qdel(src)
+ if (ismob(loc))
+ var/mob/the_mob = loc
+ the_mob.drop_from_inventory(src)
+ else
+ qdel(src)
dropped(mob/living/user as mob)
if(user)
@@ -522,7 +528,8 @@
user << "You are no-longer stabilizing the [name] with both hands. "
O.unwield()
unwield()
- if(src)
+
+ if (!QDELETED(src))
qdel(src)
mob_can_equip(M as mob, slot)
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index 54be74e5fa5..2c34a4af766 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -17,12 +17,10 @@
/obj/item/weapon/gun/launcher/spikethrower/New()
..()
- processing_objects.Add(src)
last_regen = world.time
/obj/item/weapon/gun/launcher/spikethrower/Destroy()
- processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/gun/launcher/spikethrower/process()
if(spikes < max_spikes && world.time > last_regen + spike_gen_time)
@@ -30,6 +28,12 @@
last_regen = world.time
update_icon()
+/obj/item/weapon/gun/launcher/spikethrower/proc/regen_spike()
+ spikes++
+ update_icon()
+ if (spikes < max_spikes)
+ addtimer(CALLBACK(src, .proc/regen_spike), spike_gen_time, TIMER_UNIQUE)
+
/obj/item/weapon/gun/launcher/spikethrower/examine(mob/user)
..(user)
user << "It has [spikes] spike\s remaining."
@@ -51,6 +55,7 @@
/obj/item/weapon/gun/launcher/spikethrower/consume_next_projectile()
if(spikes < 1) return null
spikes--
+ addtimer(CALLBACK(src, .proc/regen_spike), spike_gen_time, TIMER_UNIQUE)
return new /obj/item/weapon/spike(src)
//This gun only functions for armalis. The on-sprite is too huge to render properly on other sprites.
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 53986e151ca..994a7a04bd5 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -28,43 +28,38 @@
..()
update_icon()
-/obj/item/weapon/gun/energy/New()
- ..()
+/obj/item/weapon/gun/energy/Initialize()
+ . = ..()
if(cell_type)
power_supply = new cell_type(src)
else
power_supply = new /obj/item/weapon/cell/device/variable(src, max_shots*charge_cost)
- if(self_recharge)
- processing_objects.Add(src)
update_icon()
/obj/item/weapon/gun/energy/Destroy()
- if(self_recharge)
- processing_objects.Remove(src)
- ..()
+ QDEL_NULL(power_supply)
+ return ..()
-/obj/item/weapon/gun/energy/process()
- if(self_recharge) //Every [recharge_time] ticks, recharge a shot for the cyborg
- charge_tick++
- if(charge_tick < recharge_time) return 0
- charge_tick = 0
+/obj/item/weapon/gun/energy/proc/try_recharge()
+ . = 1
+ if (!power_supply || power_supply.charge >= power_supply.maxcharge || !self_recharge)
+ return 0 // check if we actually need to recharge
+
+ if (use_external_power)
+ var/obj/item/weapon/cell/external = get_external_power_supply()
+ if(!external || !external.use(charge_cost)) //Take power from the borg...
+ return 0
- if(!power_supply || power_supply.charge >= power_supply.maxcharge)
- return 0 // check if we actually need to recharge
+ power_supply.give(charge_cost) //... to recharge the shot
+ update_icon()
- if(use_external_power)
- var/obj/item/weapon/cell/external = get_external_power_supply()
- if(!external || !external.use(charge_cost)) //Take power from the borg...
- return 0
-
- power_supply.give(charge_cost) //... to recharge the shot
- update_icon()
- return 1
+ addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE)
/obj/item/weapon/gun/energy/consume_next_projectile()
if(!power_supply) return null
if(!ispath(projectile_type)) return null
if(!power_supply.checked_use(charge_cost)) return null
+ if (self_recharge) addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE)
return new projectile_type(src)
/obj/item/weapon/gun/energy/proc/get_external_power_supply()
diff --git a/code/modules/projectiles/guns/energy/mining.dm b/code/modules/projectiles/guns/energy/mining.dm
new file mode 100644
index 00000000000..de195ff5161
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/mining.dm
@@ -0,0 +1,343 @@
+/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg
+ self_recharge = 1
+ use_external_power = 1
+
+/obj/item/weapon/gun/energy/kinetic_accelerator
+ name = "proto-kinetic accelerator"
+ desc = "A reloadable, ranged mining tool that does increased damage in low pressure. Capable of holding up to six slots worth of mod kits."
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "kineticgun"
+ item_state = "kineticgun"
+ contained_sprite = 1
+ charge_meter = 0
+ fire_delay = 16
+ origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4, TECH_POWER = 4)
+ projectile_type = /obj/item/projectile/kinetic
+ fire_sound = 'sound/weapons/Kenetic_accel.ogg'
+
+ var/max_mod_capacity = 100
+ var/list/modkits = list()
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user as mob)
+ if(power_supply.charge < power_supply.maxcharge)
+ user << "You begin charging \the [src]... "
+ if(do_after(user,20))
+ playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
+ user.visible_message(
+ "\The [user] pumps \the [src]! ",
+ "You pump \the [src]]! "
+ )
+ power_supply.charge = power_supply.maxcharge
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user)
+ ..()
+ if(max_mod_capacity)
+ user << "[get_remaining_mod_capacity()]% mod capacity remaining."
+ for(var/A in get_modkits())
+ var/obj/item/borg/upgrade/modkit/M = A
+ user << "There is a [M.name] mod installed, using [M.cost]% capacity. "
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
+ if(istype(A, /obj/item/weapon/crowbar))
+ if(modkits.len)
+ user << "You pry the modifications out. "
+ playsound(loc, 100, 1)
+ for(var/obj/item/borg/upgrade/modkit/M in modkits)
+ M.uninstall(src)
+ else
+ user << "There are no modifications currently installed. "
+ else if(istype(A, /obj/item/borg/upgrade/modkit))
+ var/obj/item/borg/upgrade/modkit/MK = A
+ MK.install(src, user)
+ else
+ ..()
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity()
+ var/current_capacity_used = 0
+ for(var/A in get_modkits())
+ var/obj/item/borg/upgrade/modkit/M = A
+ current_capacity_used += M.cost
+ return max_mod_capacity - current_capacity_used
+
+/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_modkits()
+ . = list()
+ for(var/A in modkits)
+ . += A
+
+//Projectiles
+/obj/item/projectile/kinetic
+ name = "kinetic force"
+ icon_state = null
+ damage = 30
+ damage_type = BRUTE
+ check_armour = "bomb"
+ kill_count = 5
+
+ var/pressure_decrease = 0.25
+ var/turf_aoe = FALSE
+ var/mob_aoe = 0
+ var/list/hit_overlays = list()
+
+/obj/item/projectile/kinetic/launch_from_gun(atom/target, mob/user, obj/item/weapon/gun/launcher, var/target_zone, var/x_offset=0, var/y_offset=0)
+ if(istype(launcher, /obj/item/weapon/gun/energy/kinetic_accelerator))
+ var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = launcher
+ for(var/A in KA.get_modkits())
+ var/obj/item/borg/upgrade/modkit/M = A
+ M.modify_projectile(src)
+ ..()
+
+/obj/item/projectile/kinetic/on_impact(var/atom/A)
+ strike_thing(A)
+ . = ..()
+
+/obj/item/projectile/kinetic/proc/strike_thing(atom/target)
+ var/turf/target_turf = get_turf(target)
+ if(!target_turf)
+ target_turf = get_turf(src)
+ var/datum/gas_mixture/environment = target_turf.return_air()
+ var/pressure = environment.return_pressure()
+ if(pressure > 50)
+ name = "weakened [name]"
+ damage *= pressure_decrease
+ if(istype(target_turf, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = target_turf
+ M.GetDrilled(1)
+ var/obj/effect/overlay/temp/kinetic_blast/K = new /obj/effect/overlay/temp/kinetic_blast(target_turf)
+ K.color = color
+ for(var/type in hit_overlays)
+ new type(target_turf)
+ if(turf_aoe)
+ for(var/T in orange(1, target_turf))
+ if(istype(T, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = T
+ M.GetDrilled(1)
+ if(mob_aoe)
+ for(var/mob/living/L in range(1, target_turf) - firer - target)
+ L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor)
+ L << "You're struck by a [name]! "
+
+
+//Modkits
+/obj/item/borg/upgrade/modkit
+ name = "modification kit"
+ desc = "An upgrade for kinetic accelerators."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "modkit"
+ origin_tech = "programming=2;materials=2;magnets=4"
+ var/denied_type = null
+ var/maximum_of_type = 1
+ var/cost = 30
+ var/modifier = 1 //For use in any mod kit that has numerical modifiers
+
+/obj/item/borg/upgrade/modkit/examine(mob/user)
+ ..()
+ user << "Occupies [cost]% of mod capacity. "
+
+/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
+ if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user))
+ install(A, user)
+ else
+ ..()
+
+/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R)
+ if(..())
+ return
+
+ for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules)
+ return install(H, usr)
+
+/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
+ . = TRUE
+ if(denied_type)
+ var/number_of_denied = 0
+ for(var/A in KA.get_modkits())
+ var/obj/item/borg/upgrade/modkit/M = A
+ if(istype(M, denied_type))
+ number_of_denied++
+ if(number_of_denied >= maximum_of_type)
+ . = FALSE
+ break
+ if(KA.get_remaining_mod_capacity() >= cost)
+ if(.)
+ user << "You install the modkit. "
+ playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1)
+ user.unEquip(src)
+ forceMove(KA)
+ KA.modkits += src
+ else
+ user << "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits. "
+ else
+ user << "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits. "
+ . = FALSE
+
+
+
+/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
+ forceMove(get_turf(KA))
+ KA.modkits -= src
+
+/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
+
+
+//Range
+/obj/item/borg/upgrade/modkit/range
+ name = "range increase"
+ desc = "Increases the range of a kinetic accelerator when installed."
+ modifier = 20
+ cost = 24 //so you can fit four plus a tracer cosmetic
+
+/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K)
+ K.kill_count += modifier
+
+
+//Damage
+/obj/item/borg/upgrade/modkit/damage
+ name = "damage increase"
+ desc = "Increases the damage of kinetic accelerator when installed."
+ modifier = 10
+
+/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K)
+ K.damage += modifier
+
+
+//Cooldown
+/obj/item/borg/upgrade/modkit/cooldown
+ name = "cooldown decrease"
+ desc = "Decreases the cooldown of a kinetic accelerator and increases the recharge rate."
+ modifier = 2
+
+/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
+ . = ..()
+ if(.)
+ KA.fire_delay -= modifier
+ KA.recharge_time -= modifier
+
+/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
+ KA.fire_delay += modifier
+ KA.recharge_time += modifier
+ ..()
+
+
+//AoE blasts
+/obj/item/borg/upgrade/modkit/aoe
+ modifier = 0
+
+/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K)
+ K.name = "kinetic explosion"
+ if(!K.turf_aoe && !K.mob_aoe)
+ K.hit_overlays += /obj/effect/overlay/temp/explosion/fast
+ K.mob_aoe += modifier
+
+/obj/item/borg/upgrade/modkit/aoe/turfs
+ name = "mining explosion"
+ desc = "Causes the kinetic accelerator to destroy rock in an AoE."
+ denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs
+
+/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K)
+ ..()
+ K.turf_aoe = TRUE
+
+/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs
+ name = "offensive mining explosion"
+ desc = "Causes the kinetic accelerator to destroy rock and damage mobs in an AoE."
+ maximum_of_type = 3
+ modifier = 0.25
+
+/obj/item/borg/upgrade/modkit/aoe/mobs
+ name = "offensive explosion"
+ desc = "Causes the kinetic accelerator to damage mobs in an AoE."
+ modifier = 0.2
+
+
+//Indoors
+/obj/item/borg/upgrade/modkit/indoors
+ name = "decrease pressure penalty"
+ desc = "Increases the damage a kinetic accelerator does in a high pressure environment."
+ modifier = 2
+ denied_type = /obj/item/borg/upgrade/modkit/indoors
+ maximum_of_type = 2
+ cost = 40
+
+/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
+ K.pressure_decrease *= modifier
+
+/obj/item/borg/upgrade/modkit/tracer
+ name = "white tracer bolts"
+ desc = "Causes kinetic accelerator bolts to have a white tracer trail and explosion."
+ cost = 4
+ denied_type = /obj/item/borg/upgrade/modkit/tracer
+ var/bolt_color = "#FFFFFF"
+
+/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K)
+ K.icon_state = "ka_tracer"
+ K.color = bolt_color
+
+/obj/item/borg/upgrade/modkit/tracer/adjustable
+ name = "adjustable tracer bolts"
+ desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color."
+
+/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user)
+ bolt_color = input(user,"Choose Color") as color
+
+/*******************PLASMA CUTTER*******************/
+
+/obj/item/weapon/gun/energy/plasmacutter/mounted
+ self_recharge = 1
+ use_external_power = 1
+
+/obj/item/weapon/gun/energy/plasmacutter
+ name = "plasma cutter"
+ desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
+ contained_sprite = 1
+ charge_meter = 0
+ icon = 'icons/obj/mining_contained.dmi'
+ icon_state = "plasma"
+ item_state = "plasma"
+ fire_sound = 'sound/weapons/plasma_cutter.ogg'
+ slot_flags = SLOT_BELT|SLOT_BACK
+ w_class = 3
+ force = 15
+ sharp = 1
+ edge = 1
+ origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 4000)
+ projectile_type = /obj/item/projectile/beam/plasmacutter
+ max_shots = 15
+
+/obj/item/projectile/beam/plasmacutter
+ name = "plasma arc"
+ icon_state = "omnilaser"
+ damage = 15
+ damage_type = BURN
+ check_armour = "laser"
+ kill_count = 5
+ pass_flags = PASSTABLE
+
+ muzzle_type = /obj/effect/projectile/trilaser/muzzle
+ tracer_type = /obj/effect/projectile/trilaser/tracer
+ impact_type = /obj/effect/projectile/trilaser/impact
+
+/obj/item/projectile/beam/plasmacutter/on_impact(var/atom/A)
+ strike_thing(A)
+ . = ..()
+
+/obj/item/projectile/beam/plasmacutter/proc/strike_thing(var/atom/A)
+ if(istype(A, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = A
+ if(prob(33))
+ M.GetDrilled(1)
+ return
+ else if(prob(88))
+ M.emitter_blasts_taken += 2
+ M.emitter_blasts_taken += 1
+
+ else if(istype(A, /mob/living))
+ var/mob/living/L = A
+ L.apply_damage(damage, BRUTE, def_zone)
+ if(istype(A, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = L
+ var/ultimate_def_zone = check_zone(def_zone)
+ if(H.has_organ(ultimate_def_zone))
+ var/obj/item/organ/external/E = H.get_organ(ultimate_def_zone)
+ if(E.damage > 15 && prob((3*E.damage)))
+ E.droplimb(0,DROPLIMB_EDGE)
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index d3de13e2caf..a023c495d2b 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -41,16 +41,6 @@
var/lightfail = 0
-//override for failcheck behaviour
-/obj/item/weapon/gun/energy/gun/nuclear/process()
- charge_tick++
- if(charge_tick < 4) return 0
- charge_tick = 0
- if(!power_supply) return 0
- if((power_supply.charge / power_supply.maxcharge) != 1)
- power_supply.give(charge_cost)
- update_icon()
- return 1
/obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck()
lightfail = 0
@@ -70,42 +60,43 @@
M << "You feel a wave of heat wash over you. "
M.apply_effect(300, IRRADIATE)
crit_fail = 1 //break the gun so it stops recharging
- processing_objects.Remove(src)
+ self_recharge = FALSE
update_icon()
return 0
-
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge()
if (crit_fail)
- overlays += "nucgun-whee"
+ add_overlay("nucgun-whee")
return
var/ratio = power_supply.charge / power_supply.maxcharge
ratio = round(ratio, 0.25) * 100
- overlays += "nucgun-[ratio]"
+ add_overlay("nucgun-[ratio]")
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor()
if(crit_fail)
- overlays += "nucgun-crit"
+ add_overlay("nucgun-crit")
return
if(lightfail)
- overlays += "nucgun-medium"
+ add_overlay("nucgun-medium")
else if ((power_supply.charge/power_supply.maxcharge) <= 0.5)
- overlays += "nucgun-light"
+ add_overlay("nucgun-light")
else
- overlays += "nucgun-clean"
+ add_overlay("nucgun-clean")
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_mode()
var/datum/firemode/current_mode = firemodes[sel_mode]
switch(current_mode.name)
- if("stun") overlays += "nucgun-stun"
- if("lethal") overlays += "nucgun-kill"
+ if("stun")
+ add_overlay("nucgun-stun")
+ if("lethal")
+ add_overlay("nucgun-kill")
/*
/obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity)
..()
reliability -= round(15/severity)
*/
/obj/item/weapon/gun/energy/gun/nuclear/update_icon()
- overlays.Cut()
+ cut_overlays()
update_charge()
update_reactor()
update_mode()
@@ -121,7 +112,7 @@
fire_delay = 4
projectile_type = /obj/item/projectile/beam/stun
- origin_tech = "combat=3;magnets=2"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
modifystate = "epistolstun"
firemodes = list(
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 10209f62024..4c434a56230 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -181,7 +181,7 @@
force = 30
projectile_type = /obj/item/projectile/energy/bfg
slot_flags = SLOT_BACK
- max_shots = 10
+ max_shots = 3
sel_mode = 1
fire_delay = 10
accuracy = 20
@@ -212,6 +212,7 @@
)
action_button_name = "Wield gatling laser"
+ charge_cost = 50
/obj/item/weapon/gun/energy/vaurca/gatlinglaser/can_wield()
return 1
@@ -335,7 +336,7 @@
"You hear a low pulsing roar! "
)
is_charging = 1
- sleep(40)
+ sleep(20)
is_charging = 0
if(!istype(user.get_active_hand(), src))
return
@@ -387,6 +388,7 @@
self_recharge = 1
recharge_time = 1
charge_meter = 1
+ charge_cost = 50
firemodes = list(
list(mode_name="2 second burst", burst=10, burst_delay = 1, fire_delay = 20),
@@ -424,7 +426,49 @@
"You hear a low pulsing roar! "
)
is_charging = 1
- sleep(60)
+ sleep(40)
+ is_charging = 0
+ if(!istype(user.get_active_hand(), src))
+ return
+ msg_admin_attack("[key_name_admin(user)] shot with \a [src.type] [key_name_admin(src)]'s target (JMP )")
+ return 1
+
+/obj/item/weapon/gun/energy/vaurca/mountedthermaldrill
+ name = "mounted thermal drill"
+ desc = "Pierce the heavens? Son, there won't be any heavens when you're through with it."
+ contained_sprite = 1
+ icon = 'icons/obj/vaurca_items.dmi'
+ icon_state = "thermaldrill"
+ item_state = "thermaldrill"
+ origin_tech = "combat=6;phorontech=8,"
+ fire_sound = 'sound/magic/lightningbolt.ogg'
+ slot_flags = SLOT_BACK
+ w_class = 4
+ force = 15
+ projectile_type = /obj/item/projectile/beam/thermaldrill
+ max_shots = 90
+ sel_mode = 1
+ burst = 30
+ burst_delay = 1
+ fire_delay = 60
+ self_recharge = 1
+ recharge_time = 1
+ charge_meter = 1
+ use_external_power = 1
+ charge_cost = 50
+
+/obj/item/weapon/gun/energy/vaurca/mountedthermaldrill/special_check(var/mob/user)
+ ..()
+ if(is_charging)
+ user << "\The [src] is already charging! "
+ return 0
+ user.visible_message(
+ "\The [user] begins charging the [src]! ",
+ "You begin charging the [src]! ",
+ "You hear a low pulsing roar! "
+ )
+ is_charging = 1
+ sleep(30)
is_charging = 0
if(!istype(user.get_active_hand(), src))
return
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
index a3a88245cfb..d96da8671f7 100644
--- a/code/modules/projectiles/guns/projectile/boltaction.dm
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -61,7 +61,7 @@
/obj/item/weapon/gun/projectile/boltaction/attackby(var/obj/item/A as obj, mob/user as mob)
- if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3)
+ if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter) && w_class != 3)
user << "You begin to shorten the barrel and stock of \the [src]. "
if(loaded.len)
afterattack(user, user)
diff --git a/code/modules/projectiles/guns/projectile/improvised.dm b/code/modules/projectiles/guns/projectile/improvised.dm
index ac2b430350a..acc614ee18d 100644
--- a/code/modules/projectiles/guns/projectile/improvised.dm
+++ b/code/modules/projectiles/guns/projectile/improvised.dm
@@ -31,7 +31,7 @@
/obj/item/weapon/gun/projectile/shotgun/improvised/attackby(var/obj/item/A as obj, mob/user as mob)
- if(w_class > 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter)))
+ if(w_class == 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter)))
user << "You begin to shorten the barrel of \the [src]. "
if(loaded.len)
for(var/i in 1 to max_shells)
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index ab1a6427b46..aa1af66eb7a 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -105,7 +105,7 @@
//this is largely hacky and bad :( -Pete
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob)
- if(w_class > 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter)))
+ if(w_class == 3 && (istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/gun/energy/plasmacutter)))
user << "You begin to shorten the barrel of \the [src]. "
if(loaded.len)
for(var/i in 1 to max_shells)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 1da05c6eecf..b919ba165d3 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -224,7 +224,7 @@
/obj/item/projectile/beam/megaglaive
name = "thermal lance"
icon_state = "megaglaive"
- damage = 6
+ damage = 10
incinerate = 5
armor_penetration = 10
no_attack_log = 1
@@ -239,10 +239,27 @@
src.transform = effect_transform
..()
+/obj/item/projectile/beam/megaglaive/on_impact(var/atom/A)
+ if(isturf(A))
+ if(istype(A, /turf/simulated/mineral))
+ if(prob(75)) //likely because its a mining tool
+ var/turf/simulated/mineral/M = A
+ if(prob(10))
+ M.GetDrilled(1)
+ else if(!M.emitter_blasts_taken)
+ M.emitter_blasts_taken += 1
+ else if(prob(33))
+ M.emitter_blasts_taken += 1
+ if(ismob(A))
+ var/mob/living/M = A
+ M.apply_effect(1, INCINERATE, 0)
+ explosion(A, -1, 0, 2)
+ ..()
+
/obj/item/projectile/beam/thermaldrill
name = "thermal lance"
icon_state = "megaglaive"
- damage = 3
+ damage = 5
no_attack_log = 1
muzzle_type = /obj/effect/projectile/solar/muzzle
@@ -254,7 +271,13 @@
if(istype(A, /turf/simulated/mineral))
if(prob(75)) //likely because its a mining tool
var/turf/simulated/mineral/M = A
- M.GetDrilled()
+ if(prob(33))
+ M.GetDrilled(1)
+ else if(!M.emitter_blasts_taken)
+ M.emitter_blasts_taken += 2
+ else if(prob(66))
+ M.emitter_blasts_taken += 2
+
if(ismob(A))
var/mob/living/M = A
M.apply_effect(1, INCINERATE, 0)
diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm
index 01c57f2f76b..8c4106ebdfc 100644
--- a/code/modules/random_map/_random_map_setup.dm
+++ b/code/modules/random_map/_random_map_setup.dm
@@ -19,4 +19,11 @@
#define ROOM_TEMP_CHAR 4
#define MONSTER_CHAR 5
#define ARTIFACT_TURF_CHAR 6
-#define ARTIFACT_CHAR 7
\ No newline at end of file
+#define ARTIFACT_CHAR 7
+
+#define GET_MAP_CELL(X,Y) ((((Y) - 1) * limit_x) + (X))
+#define PREPARE_CELL(X,Y) \
+ tmp_cell = GET_MAP_CELL(X,Y);\
+ if (tmp_cell < 1 || tmp_cell > map.len) {\
+ tmp_cell = null;\
+ }
diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm
index f3867d78bdc..a2a6320e409 100644
--- a/code/modules/random_map/automata/automata.dm
+++ b/code/modules/random_map/automata/automata.dm
@@ -1,3 +1,7 @@
+#define CELL_ALIVE(VAL) (VAL == cell_live_value)
+#define KILL_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_dead_value;
+#define REVIVE_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_live_value;
+
/datum/random_map/automata
descriptor = "generic caves"
initial_wall_cell = 55
@@ -16,43 +20,57 @@
/datum/random_map/automata/proc/iterate(var/iteration)
var/list/next_map[limit_x*limit_y]
+ var/tmp_cell
+ var/current_cell
+ var/count
+ if (!islist(map))
+ set_map_size()
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- var/current_cell = get_map_cell(x,y)
+ PREPARE_CELL(x,y)
+ current_cell = tmp_cell
next_map[current_cell] = map[current_cell]
- var/count = 0
+ count = 0
// Every attempt to place this in a proc or a list has resulted in
// the generator being totally bricked and useless. Fuck it. We're
// hardcoding this shit. Feel free to rewrite and PR a fix. ~ Z
- var/tmp_cell = get_map_cell(x,y)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x+1,y+1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x-1,y-1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x+1,y-1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x-1,y+1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x-1,y)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x,y-1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x+1,y)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
- tmp_cell = get_map_cell(x,y+1)
- if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ PREPARE_CELL(x,y)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x+1,y+1)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x-1,y-1)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x+1,y-1)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x-1,y+1)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x-1,y)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x,y-1)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x+1,y)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
+ PREPARE_CELL(x,y+1)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ count++
if(count >= cell_threshold)
- revive_cell(current_cell, next_map, (iteration == iterations))
+ REVIVE_CELL(current_cell, next_map)
else
- kill_cell(current_cell, next_map, (iteration == iterations))
- map = next_map
+ KILL_CELL(current_cell, next_map)
+
+ CHECK_TICK
-// Check if a given tile counts as alive for the automata generations.
-/datum/random_map/automata/proc/cell_is_alive(var/value)
- return (value == cell_live_value) && (value != cell_dead_value)
+ map = next_map
/datum/random_map/automata/proc/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter)
if(!use_next_map)
@@ -62,4 +80,7 @@
/datum/random_map/automata/proc/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter)
if(!use_next_map)
use_next_map = map
- use_next_map[target_cell] = cell_dead_value
\ No newline at end of file
+ use_next_map[target_cell] = cell_dead_value
+
+#undef KILL_CELL
+#undef REVIVE_CELL
diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm
index fe959c72b52..3f93358f138 100644
--- a/code/modules/random_map/automata/caves.dm
+++ b/code/modules/random_map/automata/caves.dm
@@ -1,3 +1,6 @@
+#define GET_BELOW_OR_NULL(atom, z) \
+ (!(z > world.maxz || z > 17 || z < 2) && z_levels & (1 << (z - 2))) ? get_step(atom, DOWN) : null
+
/datum/random_map/automata/cave_system
iterations = 5
descriptor = "moon caves"
@@ -27,26 +30,161 @@
return "X"
return ..(value)
-/datum/random_map/automata/cave_system/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter)
- ..()
- if(final_iter)
- ore_turfs |= target_cell
-
-/datum/random_map/automata/cave_system/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter)
- ..()
- if(final_iter)
- ore_turfs -= target_cell
-
// Create ore turfs.
/datum/random_map/automata/cave_system/cleanup()
+ var/tmp_cell
+ for (var/x = 1; x < limit_x; x++)
+ for (var/y = 1; y < limit_y; y++)
+ PREPARE_CELL(x, y)
+ if (tmp_cell && CELL_ALIVE(map[tmp_cell]))
+ ore_turfs += tmp_cell
+
+ game_log("ASGEN", "Found [ore_turfs.len] ore turfs.")
var/ore_count = round(map.len/20)
+ var/door_count = 0
+ var/empty_count = 0
while((ore_count>0) && (ore_turfs.len>0))
- if(!priority_process) sleep(-1)
+
+ if(!priority_process)
+ CHECK_TICK
+
var/check_cell = pick(ore_turfs)
ore_turfs -= check_cell
if(prob(75))
map[check_cell] = DOOR_CHAR // Mineral block
+ door_count += 1
else
map[check_cell] = EMPTY_CHAR // Rare mineral block.
+ empty_count += 1
ore_count--
+
+ game_log("ASGEN", "Set [door_count] turfs to random minerals.")
+ game_log("ASGEN", "Set [empty_count] turfs to high-chance random minerals.")
return 1
+
+/datum/random_map/automata/cave_system/apply_to_map()
+ if(!origin_x) origin_x = 1
+ if(!origin_y) origin_y = 1
+ if(!origin_z) origin_z = 1
+
+ var/tmp_cell
+ var/x
+ var/y
+ var/new_path
+ var/num_applied = 0
+ for (var/thing in block(locate(origin_x, origin_y, origin_z), locate(limit_x, limit_y, origin_z)))
+ var/turf/T = thing
+ new_path = null
+ if (!T || (target_turf_type && !istype(T, target_turf_type)))
+ continue
+
+ x = T.x
+ y = T.y
+
+ PREPARE_CELL(x,y)
+
+ if (!tmp_cell)
+ continue
+
+ switch (map[tmp_cell])
+ if(DOOR_CHAR)
+ new_path = mineral_sparse
+ if(EMPTY_CHAR)
+ new_path = mineral_rich
+ if(FLOOR_CHAR)
+ new_path = floor_type
+ if(WALL_CHAR)
+ new_path = wall_type
+
+ if (!new_path)
+ continue
+
+ num_applied += 1
+ new new_path(T)
+
+ CHECK_TICK
+
+ game_log("ASGEN", "Applied [num_applied] turfs.")
+
+/datum/random_map/automata/cave_system/high_yield
+ descriptor = "high yield caves"
+ wall_type = /turf/simulated/mineral
+ mineral_sparse = /turf/simulated/mineral/random/high_chance
+ mineral_rich = /turf/simulated/mineral/random/higher_chance
+
+/datum/random_map/automata/cave_system/chasms
+ descriptor = "chasm caverns"
+ wall_type = /turf/unsimulated/mask
+ floor_type = /turf/simulated/open/airless
+ target_turf_type = /turf/unsimulated/chasm_mask
+ mineral_sparse = /turf/unsimulated/mask
+ mineral_rich = /turf/unsimulated/mask
+ cell_threshold = 5
+
+/datum/random_map/automata/cave_system/chasms/apply_to_map()
+ if(!origin_x) origin_x = 1
+ if(!origin_y) origin_y = 1
+ if(!origin_z) origin_z = 1
+
+ var/tmp_cell
+ var/x
+ var/y
+ var/z
+ var/new_path
+ var/num_applied = 0
+ for (var/thing in block(locate(origin_x, origin_y, origin_z), locate(limit_x, limit_y, origin_z)))
+ var/turf/T = thing
+ new_path = null
+ if (!T || (target_turf_type && !istype(T, target_turf_type)))
+ continue
+
+ x = T.x
+ y = T.y
+ z = T.z
+
+ PREPARE_CELL(x,y)
+
+ if (!tmp_cell)
+ continue
+
+ switch (map[tmp_cell])
+ if(DOOR_CHAR)
+ new_path = mineral_sparse
+ if(EMPTY_CHAR)
+ new_path = mineral_rich
+ if(FLOOR_CHAR)
+ var/turf/below = GET_BELOW_OR_NULL(T, z)
+ if(below)
+ var/area/below_area = below.loc // Let's just assume that the turf is not in nullspace.
+ if(below_area.station_area)
+ new_path = wall_type
+ else if(below.density)
+ new_path = wall_type
+ else
+ new_path = floor_type
+
+ if(WALL_CHAR)
+ new_path = wall_type
+
+ if (!new_path)
+ continue
+
+ num_applied += 1
+ new new_path(T)
+
+ CHECK_TICK
+
+ game_log("ASGEN", "Applied [num_applied] turfs.")
+
+/datum/random_map/automata/cave_system/chasms/cleanup()
+ return
+
+/datum/random_map/automata/cave_system/chasms/surface
+ descriptor = "chasm surface"
+ wall_type = /turf/simulated/floor/asteroid
+ floor_type = /turf/simulated/open/airless
+ target_turf_type = /turf/unsimulated/chasm_mask
+ mineral_sparse = /turf/simulated/floor/asteroid
+ mineral_rich = /turf/simulated/floor/asteroid
+
+#undef GET_BELOW_OR_NULL
diff --git a/code/modules/random_map/automata/diona.dm b/code/modules/random_map/automata/diona.dm
index fc0bbb034b8..5b0f437cd25 100644
--- a/code/modules/random_map/automata/diona.dm
+++ b/code/modules/random_map/automata/diona.dm
@@ -1,5 +1,5 @@
-/turf/simulated/wall/diona/New(var/newloc)
- ..(newloc,"biomass")
+/turf/simulated/wall/diona/Initialize(mapload)
+ . = ..(mapload,"biomass")
/turf/simulated/wall/diona/attack_generic(var/mob/user, var/damage, var/attack_message)
if(istype(user, /mob/living/carbon/alien/diona))
@@ -38,7 +38,7 @@
if(1)
new_growth = 2
var/obj/structure/diona/vines/existing = locate() in T
- if(!istype(existing)) existing = getFromPool(/obj/structure/diona/vines, T)
+ if(!istype(existing)) existing = new /obj/structure/diona/vines(T)
if(existing.growth < new_growth)
existing.growth = new_growth
existing.update_icon()
@@ -50,10 +50,9 @@
name = "glow bulb"
desc = "A glowing bulb of some sort."
icon_state = "glowbulb"
-
-/obj/structure/diona/bulb/New(var/newloc)
- ..()
- set_light(3,3,"#557733")
+ light_power = 3
+ light_range = 3
+ light_color = "#557733"
/datum/random_map/automata/diona
iterations = 3
@@ -161,12 +160,12 @@
switch(value)
if(ARTIFACT_CHAR)
- getFromPool(/obj/structure/diona/bulb,T)
+ new /obj/structure/diona/bulb(T)
if(MONSTER_CHAR)
spawn_diona_nymph(T)
if(DOOR_CHAR)
- var/obj/structure/diona/vines/V = getFromPool(/obj/structure/diona/vines,T)
+ var/obj/structure/diona/vines/V = new(T)
V.growth = 3
V.update_icon()
spawn(1)
- V.spread()
\ No newline at end of file
+ V.spread()
diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm
index 9bdc2c8eb95..22564db8634 100644
--- a/code/modules/random_map/drop/drop_types.dm
+++ b/code/modules/random_map/drop/drop_types.dm
@@ -3,7 +3,7 @@ var/global/list/datum/supply_drop_loot/supply_drop
/proc/supply_drop_random_loot_types()
if(!supply_drop)
supply_drop = init_subtypes(/datum/supply_drop_loot)
- supply_drop = dd_sortedObjectList(supply_drop)
+ sortTim(supply_drop, /proc/cmp_supply_drop, FALSE)
return supply_drop
/datum/supply_drop_loot
@@ -19,9 +19,6 @@ var/global/list/datum/supply_drop_loot/supply_drop
for(var/content in contents())
new content(C)
-/datum/supply_drop_loot/dd_SortValue()
- return name
-
/datum/supply_drop_loot/supermatter
name = "Supermatter"
/datum/supply_drop_loot/supermatter/New()
diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm
index 7e4323158e4..1ee03fb2526 100644
--- a/code/modules/random_map/noise/noise.dm
+++ b/code/modules/random_map/noise/noise.dm
@@ -35,13 +35,13 @@
// Instantiate the grid.
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- map[get_map_cell(x,y)] = 0
+ map[GET_MAP_CELL(x,y)] = 0
// Now dump in the actual random data.
- map[get_map_cell(1,1)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(1,limit_y)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(limit_x,limit_y)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(limit_x,1)] = cell_base+rand(initial_cell_range)
+ map[GET_MAP_CELL(1,1)] = cell_base+rand(initial_cell_range)
+ map[GET_MAP_CELL(1,limit_y)] = cell_base+rand(initial_cell_range)
+ map[GET_MAP_CELL(limit_x,limit_y)] = cell_base+rand(initial_cell_range)
+ map[GET_MAP_CELL(limit_x,1)] = cell_base+rand(initial_cell_range)
/datum/random_map/noise/generate_map()
// Begin recursion.
@@ -69,33 +69,33 @@
(x,y)----------(x+hsize,y)----------(x+isize,y)
*/
// Central edge values become average of corners.
- map[get_map_cell(x+hsize,y+isize)] = round((\
- map[get_map_cell(x,y+isize)] + \
- map[get_map_cell(x+isize,y+isize)] \
+ map[GET_MAP_CELL(x+hsize,y+isize)] = round((\
+ map[GET_MAP_CELL(x,y+isize)] + \
+ map[GET_MAP_CELL(x+isize,y+isize)] \
)/2)
- map[get_map_cell(x+hsize,y)] = round(( \
- map[get_map_cell(x,y)] + \
- map[get_map_cell(x+isize,y)] \
+ map[GET_MAP_CELL(x+hsize,y)] = round(( \
+ map[GET_MAP_CELL(x,y)] + \
+ map[GET_MAP_CELL(x+isize,y)] \
)/2)
map[get_map_cell(x,y+hsize)] = round(( \
- map[get_map_cell(x,y+isize)] + \
- map[get_map_cell(x,y)] \
+ map[GET_MAP_CELL(x,y+isize)] + \
+ map[GET_MAP_CELL(x,y)] \
)/2)
- map[get_map_cell(x+isize,y+hsize)] = round(( \
- map[get_map_cell(x+isize,y+isize)] + \
- map[get_map_cell(x+isize,y)] \
+ map[GET_MAP_CELL(x+isize,y+hsize)] = round(( \
+ map[GET_MAP_CELL(x+isize,y+isize)] + \
+ map[GET_MAP_CELL(x+isize,y)] \
)/2)
// Centre value becomes the average of all other values + possible random variance.
- var/current_cell = get_map_cell(x+hsize,y+hsize)
+ var/current_cell = GET_MAP_CELL(x+hsize,y+hsize)
map[current_cell] = round(( \
- map[get_map_cell(x+hsize,y+isize)] + \
- map[get_map_cell(x+hsize,y)] + \
- map[get_map_cell(x,y+hsize)] + \
- map[get_map_cell(x+isize,y)] \
+ map[GET_MAP_CELL(x+hsize,y+isize)] + \
+ map[GET_MAP_CELL(x+hsize,y)] + \
+ map[GET_MAP_CELL(x,y+hsize)] + \
+ map[GET_MAP_CELL(x+isize,y)] \
)/4)
if(prob(random_variance_chance))
@@ -104,7 +104,8 @@
// Recurse until size is too small to subdivide.
if(isize>3)
- if(!priority_process) sleep(-1)
+ if(!priority_process)
+ CHECK_TICK
iteration++
subdivide(iteration, x, y, hsize)
subdivide(iteration, x+hsize, y, hsize)
@@ -124,35 +125,36 @@
var/total = 0
// Get the average neighboring value.
- var/tmp_cell = get_map_cell(x+1,y+1)
+ var/tmp_cell
+ PREPARE_CELL(x+1,y+1)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x-1,y-1)
+ PREPARE_CELL(x-1,y-1)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x+1,y-1)
+ PREPARE_CELL(x+1,y-1)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x-1,y+1)
+ PREPARE_CELL(x-1,y+1)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x-1,y)
+ PREPARE_CELL(x-1,y)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x,y-1)
+ PREPARE_CELL(x,y-1)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x+1,y)
+ PREPARE_CELL(x+1,y)
if(tmp_cell)
total += map[tmp_cell]
val_count++
- tmp_cell = get_map_cell(x,y+1)
+ PREPARE_CELL(x,y+1)
if(tmp_cell)
total += map[tmp_cell]
val_count++
@@ -165,4 +167,4 @@
else if(map[current_cell] < total)
map[current_cell]-=cell_smooth_amt
map[current_cell] = max(0,min(cell_range,map[current_cell]))
- map = next_map
\ No newline at end of file
+ map = next_map
diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm
index 4caacb70995..889fdf38507 100644
--- a/code/modules/random_map/noise/ore.dm
+++ b/code/modules/random_map/noise/ore.dm
@@ -46,13 +46,16 @@
var/turf/simulated/T = locate(tx+j, ty+i, origin_z)
if(!istype(T) || !T.has_resources)
continue
- if(!priority_process) sleep(-1)
+ if(!priority_process)
+ CHECK_TICK
T.resources = list()
T.resources["silicates"] = rand(3,5)
T.resources["carbonaceous rock"] = rand(3,5)
- var/current_cell = map[get_map_cell(x,y)]
- if(current_cell < rare_val) // Surface metals.
+ var/tmp_cell
+ PREPARE_CELL(x, y)
+
+ if(tmp_cell < rare_val) // Surface metals.
T.resources["iron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
T.resources["gold"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
T.resources["silver"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
@@ -61,7 +64,7 @@
T.resources["phoron"] = 0
T.resources["osmium"] = 0
T.resources["hydrogen"] = 0
- else if(current_cell < deep_val) // Rare metals.
+ else if(tmp_cell < deep_val) // Rare metals.
T.resources["gold"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
@@ -87,4 +90,4 @@
else if(value < deep_val)
return "R"
else
- return "D"
\ No newline at end of file
+ return "D"
diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm
index f1d7d02637a..faae9b37854 100644
--- a/code/modules/random_map/random_map.dm
+++ b/code/modules/random_map/random_map.dm
@@ -54,7 +54,7 @@ var/global/list/map_count = list()
var/start_time = world.timeofday
if(!do_not_announce) admin_notice("Generating [name]. ", R_DEBUG)
- sleep(-1)
+ CHECK_TICK
// Testing needed to see how reliable this is (asynchronous calls, called during worldgen), DM ref is not optimistic
if(seed)
@@ -156,7 +156,8 @@ var/global/list/map_count = list()
for(var/x = 1, x <= limit_x, x++)
for(var/y = 1, y <= limit_y, y++)
- if(!priority_process) sleep(-1)
+ if(!priority_process)
+ CHECK_TICK
apply_to_turf(x,y)
/datum/random_map/proc/apply_to_turf(var/x,var/y)
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index cdda0e9d906..2a85b0e3a9a 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -23,9 +23,9 @@
chemical_reagents_list[D.id] = D
/datum/reagents/Destroy()
- ..()
- if(chemistryProcess)
- chemistryProcess.active_holders -= src
+ . = ..()
+ if(SSchemistry)
+ SSchemistry.active_holders -= src
for(var/datum/reagent/R in reagent_list)
qdel(R)
@@ -94,8 +94,8 @@
my_atom.reagents = null
/datum/reagents/proc/handle_reactions()
- if(chemistryProcess)
- chemistryProcess.mark_for_update(src)
+ if(SSchemistry)
+ SSchemistry.mark_for_update(src)
//returns 1 if the holder should continue reactiong, 0 otherwise.
/datum/reagents/proc/process_reactions()
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 123dd289618..c13fb0c206c 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -417,7 +417,7 @@
if(archive_diseases[id])
var/datum/disease/advance/A = archive_diseases[id]
A.AssignName(new_name)
- for(var/datum/disease/advance/AD in active_diseases)
+ for(var/datum/disease/advance/AD in SSdisease.processing)
AD.Refresh()
src.updateUsrDialog()
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 0a73f5c0bf7..fe759ca1a4a 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -112,7 +112,7 @@
return null
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
- ..()
+ . = ..()
holder = null
/* DEPRECATED - TODO: REMOVE EVERYWHERE */
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index 69495a4bd43..c9e15eddf75 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -166,7 +166,7 @@
if(holder && holder.my_atom && ismob(holder.my_atom))
var/mob/M = holder.my_atom
M.status_flags &= ~FAKEDEATH
- ..()
+ return ..()
/datum/reagent/toxin/fertilizer //Reagents used for plant fertilizers.
name = "fertilizer"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 4683a953b1f..99a6da19069 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -96,7 +96,7 @@
return progress
-/datum/chemical_reaction/proc/process(var/datum/reagents/holder)
+/datum/chemical_reaction/process(var/datum/reagents/holder)
//determine how far the reaction can proceed
var/list/reaction_limits = list()
for(var/reactant in required_reagents)
diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm
index df63f5c8a78..c33fed21862 100644
--- a/code/modules/reagents/dispenser/dispenser2.dm
+++ b/code/modules/reagents/dispenser/dispenser2.dm
@@ -18,8 +18,8 @@
density = 1
anchored = 1
-/obj/machinery/chemical_dispenser/New()
- ..()
+/obj/machinery/chemical_dispenser/Initialize()
+ . = ..()
if(spawn_cartridges)
for(var/type in spawn_cartridges)
@@ -56,7 +56,7 @@
C.loc = src
cartridges[C.label] = C
- cartridges = sortAssoc(cartridges)
+ sortTim(cartridges, /proc/cmp_text_asc)
nanomanager.update_uis(src)
/obj/machinery/chemical_dispenser/proc/remove_cartridge(label)
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 83d706e2c49..c9cfce51061 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -44,8 +44,8 @@
if (reagents.get_reagent_amount("blood"))
user.visible_message("[user] raises \the [src] up to their mouth and bites into it. ", "You raise \the [src] up to your mouth and bite into it, starting to drain its contents. You need to stand still. ")
vampire_marks = TRUE
- if (!src.other_DNA.len)
- src.other_DNA += M.dna.unique_enzymes
+ if (!LAZYLEN(src.other_DNA))
+ LAZYADD(src.other_DNA, M.dna.unique_enzymes)
src.other_DNA_type = "saliva"
while (do_after(user, 25, 5, 1))
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 7ccd2c76ce2..aa04a75bcbe 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -35,7 +35,7 @@
/obj/item/weapon/reagent_containers/borghypo/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+
if(++charge_tick < recharge_time)
diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm
index c3a0e8224dc..d520483d47d 100644
--- a/code/modules/reagents/reagent_containers/food/lunch.dm
+++ b/code/modules/reagents/reagent_containers/food/lunch.dm
@@ -1,87 +1,97 @@
-var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/snacks/sandwich,
- /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/margheritaslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/tastybread,
- /obj/item/weapon/reagent_containers/food/snacks/liquidfood,
- /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry,
- /obj/item/weapon/reagent_containers/food/snacks/tossedsalad,
- /obj/item/weapon/reagent_containers/food/snacks/koiswaffles,
- /obj/item/weapon/reagent_containers/food/snacks/funnelcake,
- /obj/item/weapon/reagent_containers/food/snacks/hotdog)
+var/list/lunchables_lunches_ = list(
+ /obj/item/weapon/reagent_containers/food/snacks/sandwich,
+ /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/margheritaslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/tastybread,
+ /obj/item/weapon/reagent_containers/food/snacks/liquidfood,
+ /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry,
+ /obj/item/weapon/reagent_containers/food/snacks/tossedsalad,
+ /obj/item/weapon/reagent_containers/food/snacks/koiswaffles,
+ /obj/item/weapon/reagent_containers/food/snacks/funnelcake,
+ /obj/item/weapon/reagent_containers/food/snacks/hotdog
+)
-var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
- /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
- /obj/item/weapon/reagent_containers/food/snacks/muffin,
- /obj/item/weapon/reagent_containers/food/snacks/popcorn,
- /obj/item/weapon/reagent_containers/food/snacks/sosjerky,
- /obj/item/weapon/reagent_containers/food/snacks/no_raisin,
- /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie,
- /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,
- /obj/item/weapon/reagent_containers/food/snacks/poppypretzel,
- /obj/item/weapon/reagent_containers/food/snacks/carrotfries,
- /obj/item/weapon/reagent_containers/food/snacks/candiedapple,
- /obj/item/weapon/reagent_containers/food/snacks/applepie,
- /obj/item/weapon/reagent_containers/food/snacks/cherrypie,
- /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit,
- /obj/item/weapon/reagent_containers/food/snacks/appletart,
- /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/limecakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/watermelonslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/applecakeslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/filled,
- /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks,
- /obj/item/weapon/reagent_containers/food/snacks/friedkois,
- /obj/item/weapon/reagent_containers/food/snacks/meatsnack,
- /obj/item/weapon/reagent_containers/food/snacks/maps,
- /obj/item/weapon/reagent_containers/food/snacks/nathisnack)
+var/list/lunchables_snacks_ = list(
+ /obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
+ /obj/item/weapon/reagent_containers/food/snacks/muffin,
+ /obj/item/weapon/reagent_containers/food/snacks/popcorn,
+ /obj/item/weapon/reagent_containers/food/snacks/sosjerky,
+ /obj/item/weapon/reagent_containers/food/snacks/no_raisin,
+ /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,
+ /obj/item/weapon/reagent_containers/food/snacks/poppypretzel,
+ /obj/item/weapon/reagent_containers/food/snacks/carrotfries,
+ /obj/item/weapon/reagent_containers/food/snacks/candiedapple,
+ /obj/item/weapon/reagent_containers/food/snacks/applepie,
+ /obj/item/weapon/reagent_containers/food/snacks/cherrypie,
+ /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit,
+ /obj/item/weapon/reagent_containers/food/snacks/appletart,
+ /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/limecakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/watermelonslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/applecakeslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/filled,
+ /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks,
+ /obj/item/weapon/reagent_containers/food/snacks/friedkois,
+ /obj/item/weapon/reagent_containers/food/snacks/meatsnack,
+ /obj/item/weapon/reagent_containers/food/snacks/maps,
+ /obj/item/weapon/reagent_containers/food/snacks/nathisnack
+)
-var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola,
- /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,
- /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind,
- /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb,
- /obj/item/weapon/reagent_containers/food/drinks/cans/starkist,
- /obj/item/weapon/reagent_containers/food/drinks/cans/space_up,
- /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime,
- /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea,
- /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,
- /obj/item/weapon/reagent_containers/food/drinks/cans/tonic,
- /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater)
+var/list/lunchables_drinks_ = list(
+ /obj/item/weapon/reagent_containers/food/drinks/cans/cola,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/starkist,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/space_up,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/tonic,
+ /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater
+)
// This default list is a bit different, it contains items we don't want
-var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing,
- /datum/reagent/drink/doctor_delight,
- /datum/reagent/drink/dry_ramen,
- /datum/reagent/drink/hell_ramen,
- /datum/reagent/drink/hot_ramen,
- /datum/reagent/drink/nuka_cola,
- /datum/reagent/drink/black_coffee,
- /datum/reagent/drink/white_coffee,
- /datum/reagent/drink/cafe_melange)
+var/list/lunchables_drink_reagents_ = list(
+ /datum/reagent/drink/nothing,
+ /datum/reagent/drink/doctor_delight,
+ /datum/reagent/drink/dry_ramen,
+ /datum/reagent/drink/hell_ramen,
+ /datum/reagent/drink/hot_ramen,
+ /datum/reagent/drink/nuka_cola,
+ /datum/reagent/drink/black_coffee,
+ /datum/reagent/drink/white_coffee,
+ /datum/reagent/drink/cafe_melange
+)
// This default list is a bit different, it contains items we don't want
-var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
- /datum/reagent/ethanol/atomicbomb,
- /datum/reagent/ethanol/beepsky_smash,
- /datum/reagent/ethanol/coffee,
- /datum/reagent/ethanol/hippies_delight,
- /datum/reagent/ethanol/hooch,
- /datum/reagent/ethanol/thirteenloko,
- /datum/reagent/ethanol/manhattan_proj,
- /datum/reagent/ethanol/neurotoxin,
- /datum/reagent/ethanol/pwine,
- /datum/reagent/ethanol/threemileisland,
- /datum/reagent/ethanol/toxins_special)
+var/list/lunchables_ethanol_reagents_ = list(
+ /datum/reagent/ethanol/acid_spit,
+ /datum/reagent/ethanol/atomicbomb,
+ /datum/reagent/ethanol/beepsky_smash,
+ /datum/reagent/ethanol/coffee,
+ /datum/reagent/ethanol/hippies_delight,
+ /datum/reagent/ethanol/hooch,
+ /datum/reagent/ethanol/thirteenloko,
+ /datum/reagent/ethanol/manhattan_proj,
+ /datum/reagent/ethanol/neurotoxin,
+ /datum/reagent/ethanol/pwine,
+ /datum/reagent/ethanol/threemileisland,
+ /datum/reagent/ethanol/toxins_special
+)
/proc/lunchables_lunches()
if(!(lunchables_lunches_[lunchables_lunches_[1]]))
@@ -113,7 +123,8 @@ var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
for(var/lunch in lunches)
var/obj/O = lunch
.[initial(O.name)] = lunch
- return sortAssoc(.)
+
+ sortTim(., /proc/cmp_text_asc)
/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types)
. = list()
@@ -122,4 +133,5 @@ var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
continue
var/datum/reagent/reagent = reagent_type
.[initial(reagent.name)] = initial(reagent.id)
- return sortAssoc(.)
+
+ sortTim(., /proc/cmp_text_asc)
diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm
index c853706ad54..47bec32c575 100644
--- a/code/modules/reagents/reagent_containers/food/sandwich.dm
+++ b/code/modules/reagents/reagent_containers/food/sandwich.dm
@@ -76,7 +76,7 @@
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy()
for(var/obj/item/O in ingredients)
qdel(O)
- ..()
+ return ..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)
..(user)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 9a997c97c3d..10f6fbcb830 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -230,7 +230,7 @@
if(contents)
for(var/atom/movable/something in contents)
something.loc = get_turf(src)
- ..()
+ return ..()
//Code for dipping food in batter
@@ -982,13 +982,13 @@
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime()
if (src.warm)
- spawn(4200)
- if(src)
- src.warm = 0
- for(var/reagent in heated_reagents)
- src.reagents.del_reagent(reagent)
- src.name = initial(name)
- return
+ addtimer(CALLBACK(src, .proc/cool_down))
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cool_down()
+ warm = FALSE
+ for(var/reagent in heated_reagents)
+ reagents.del_reagent(reagent)
+ name = initial(name)
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/cook()
..()
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 6d557fb1584..5ddb0b7b5dc 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -84,18 +84,45 @@
else
user << "It is spent. "
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack
+ name = "stimpack"
+ desc = "A simple chemical cocktail of hyperzine and tramadol designed to boost efficiency by 6,000% (estimated). Hoo-rah!"
+ volume = 20
+ amount_per_transfer_from_this = 20
+
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack/New()
+ ..()
+ reagents.add_reagent("hyperzine", 12)
+ reagents.add_reagent("tramadol", 8)
+ update_icon()
+
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival
+ name = "survival autoinjector"
+ desc = "A special cocktail designed to keep you alive in the field should disaster seek to prevail."
+ volume = 35
+ amount_per_transfer_from_this = 35
+
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/survival/New()
+ ..()
+ reagents.add_reagent("tricordrazine", 15)
+ reagents.add_reagent("inaprovaline", 5)
+ reagents.add_reagent("dexalinp", 5)
+ reagents.add_reagent("oxycodone", 5)
+ reagents.add_reagent("methylphenidate", 5)
+ update_icon()
+
/obj/item/weapon/reagent_containers/hypospray/combat
name = "combat hypospray"
desc = "A hypospray loaded with combat stimulants."
item_state = "combat_hypo"
icon_state = "combat_hypo"
volume = 20
-
-/obj/item/weapon/reagent_containers/hypospray/combat/New()
+
+/obj/item/weapon/reagent_containers/hypospray/combat/New()
..()
reagents.add_reagent("oxycodone", 5)
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("hyperzine", 5)
reagents.add_reagent("arithrazine", 5)
-
+
return
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 823855d1ca3..d14e15f5f38 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -182,6 +182,10 @@
explode()
return ..()
+/obj/structure/reagent_dispensers/fueltank/tesla_act()
+ ..()
+ explode()
+
/obj/structure/reagent_dispensers/fueltank/Move()
if (..() && modded)
leak_fuel(amount_per_transfer_from_this/10.0)
@@ -288,9 +292,10 @@
icon_state = "oiltank"
amount_per_transfer_from_this = 120
capacity = 5000
-/obj/structure/reagent_dispensers/cookingoil/New()
- ..()
- reagents.add_reagent("cornoil",capacity)
+
+/obj/structure/reagent_dispensers/cookingoil/Initialize()
+ . = ..()
+ reagents.add_reagent("cornoil",capacity)
/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj)
if(Proj.get_structure_damage())
@@ -302,4 +307,4 @@
/obj/structure/reagent_dispensers/cookingoil/proc/explode()
reagents.splash_area(get_turf(src), 3)
visible_message(span("danger", "The [src] bursts open, spreading oil all over the area."))
- qdel(src)
\ No newline at end of file
+ qdel(src)
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 2f49b7b0842..b508a10a905 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -1,6 +1,20 @@
//conveyor2 is pretty much like the original, except it supports corners, but not diverters.
//note that corner pieces transfer stuff clockwise when running forward, and anti-clockwise backwards.
+/datum/wifi/sender/conveyor/proc/set_dir(direction)
+ for (var/datum/wifi/receiver/conveyor/C in connected_devices)
+ C.direction_change(direction)
+
+/datum/wifi/receiver/conveyor/proc/direction_change(direction)
+ var/obj/machinery/conveyor/C = parent
+ C.operating = direction
+ C.setmove()
+
+/datum/wifi/receiver/conveyor/switch/direction_change(direction)
+ var/obj/machinery/conveyor_switch/S = parent
+ S.position = direction
+ S.update()
+
/obj/machinery/conveyor
icon = 'icons/obj/recycling.dmi'
icon_state = "conveyor0"
@@ -16,13 +30,14 @@
var/list/affecting // the list of all items that will be moved this ptick
var/id = "" // the control ID - must match controller ID
+ var/datum/wifi/receiver/conveyor/antenna
/obj/machinery/conveyor/centcom_auto
id = "round_end_belt"
// create a conveyor
-/obj/machinery/conveyor/New(loc, newdir, on = 0)
- ..(loc)
+/obj/machinery/conveyor/Initialize(mapload, newdir, on = 0)
+ . = ..()
if(newdir)
set_dir(newdir)
@@ -37,7 +52,13 @@
operating = 1
setmove()
+ if (id)
+ antenna = new(id, src)
+/obj/machinery/conveyor/Destroy()
+ QDEL_NULL(antenna)
+ affecting = null
+ return ..()
/obj/machinery/conveyor/proc/setmove()
if(operating == 1)
@@ -167,46 +188,37 @@
var/id = "" // must match conveyor IDs to control them
- var/list/conveyors // the list of converyors that are controlled by this switch
anchored = 1
+ var/datum/wifi/receiver/conveyor/switch/receiver
+ var/datum/wifi/sender/conveyor/transmitter
-/obj/machinery/conveyor_switch/New(loc, newid)
- ..(loc)
+/obj/machinery/conveyor_switch/Initialize(mapload, newid)
+ . = ..()
if(!id)
id = newid
update()
- spawn(5) // allow map load
- conveyors = list()
- for(var/obj/machinery/conveyor/C in world)
- if(C.id == id)
- conveyors += C
+ if (id)
+ receiver = new(id, src)
+ transmitter = new(id, src)
+
+/obj/machinery/conveyor_switch/Destroy()
+ QDEL_NULL(receiver)
+ QDEL_NULL(transmitter)
+ return ..()
// update the icon depending on the position
/obj/machinery/conveyor_switch/proc/update()
- if(position<0)
+ if(position < 0)
icon_state = "switch-rev"
- else if(position>0)
+ else if(position > 0)
icon_state = "switch-fwd"
else
icon_state = "switch-off"
-
-// timed process
-// if the switch changed, update the linked conveyors
-
-/obj/machinery/conveyor_switch/process()
- if(!operated)
- return
- operated = 0
-
- for(var/obj/machinery/conveyor/C in conveyors)
- C.operating = position
- C.setmove()
-
// attack with hand, switch position
/obj/machinery/conveyor_switch/attack_hand(mob/user)
if(!allowed(user))
@@ -227,12 +239,7 @@
operated = 1
update()
- // find any switches with same id as this one, and set their positions to match us
- for(var/obj/machinery/conveyor_switch/S in world)
- if(S.id == src.id)
- S.position = position
- S.update()
-
+ transmitter.set_dir(position)
/obj/machinery/conveyor_switch/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/crowbar))
@@ -256,13 +263,7 @@
operated = 1
update()
- // find any switches with same id as this one, and set their positions to match us
- for(var/obj/machinery/conveyor_switch/S in world)
- if(S.id == src.id)
- S.position = position
- S.update()
-
-
+ transmitter.set_dir(position)
//
// CONVEYOR CONSTRUCTION STARTS HERE
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 389df69c14a..111c352bed4 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -29,18 +29,17 @@
// create a new disposal
// find the attached trunk (if present) and init gas resvr.
-/obj/machinery/disposal/New()
- ..()
- spawn(5)
- trunk = locate() in src.loc
- if(!trunk)
- mode = 0
- flush = 0
- else
- trunk.linked = src // link the pipe trunk to self
+/obj/machinery/disposal/Initialize()
+ . = ..()
+ trunk = locate() in src.loc
+ if(!trunk)
+ mode = 0
+ flush = 0
+ else
+ trunk.linked = src // link the pipe trunk to self
- air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME)
- update()
+ air_contents = new/datum/gas_mixture(PRESSURE_TANK_VOLUME)
+ update()
/obj/machinery/disposal/Destroy()
eject()
@@ -409,12 +408,13 @@
// perform a flush
/obj/machinery/disposal/proc/flush()
+ set waitfor = FALSE
flushing = 1
flick("[icon_state]-flush", src)
var/wrapcheck = 0
- var/obj/structure/disposalholder/H = new() // virtual holder object which actually
+ var/obj/disposalholder/H = new() // virtual holder object which actually
// travels through the pipes.
//Hacky test to get drones to mail themselves through disposals.
for(var/mob/living/silicon/robot/drone/D in src)
@@ -456,7 +456,7 @@
// called when holder is expelled from a disposal
// should usually only occur if the pipe network is modified
-/obj/machinery/disposal/proc/expel(var/obj/structure/disposalholder/H)
+/obj/machinery/disposal/proc/expel(var/obj/disposalholder/H)
var/turf/target
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
@@ -467,9 +467,7 @@
AM.forceMove(src.loc)
AM.pipe_eject(0)
if(!istype(AM,/mob/living/silicon/robot/drone)) //Poor drones kept smashing windows and taking system damage being fired out of disposals. ~Z
- spawn(1)
- if(AM)
- AM.throw_at(target, 5, 1)
+ addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, target, 5, 1), 1)
H.vent_gas(loc)
qdel(H)
@@ -495,10 +493,9 @@
// contents will be items flushed by the disposal
// this allows the gas flushed to be tracked
-/obj/structure/disposalholder
+/obj/disposalholder
invisibility = 101
var/datum/gas_mixture/gas = null // gas used to flush, will appear at exit point
- var/active = 0 // true if the holder is moving, otherwise inactive
dir = 0
var/count = 2048 //*** can travel 2048 steps before going inactive (in case of loops)
var/destinationTag = "" // changes if contains a delivery container
@@ -507,152 +504,148 @@
var/partialTag = "" //set by a partial tagger the first time round, then put in destinationTag if it goes through again.
+ var/tmp/obj/structure/disposalpipe/tick_last
// initialize a holder from the contents of a disposal unit
- proc/init(var/obj/machinery/disposal/D, var/datum/gas_mixture/flush_gas)
- gas = flush_gas// transfer gas resv. into holder object -- let's be explicit about the data this proc consumes, please.
+/obj/disposalholder/proc/init(var/obj/machinery/disposal/D, var/datum/gas_mixture/flush_gas)
+ gas = flush_gas// transfer gas resv. into holder object -- let's be explicit about the data this proc consumes, please.
- //Check for any living mobs trigger hasmob.
- //hasmob effects whether the package goes to cargo or its tagged destination.
- for(var/mob/living/M in D)
- if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
- hasmob = 1
+ //Check for any living mobs trigger hasmob.
+ //hasmob effects whether the package goes to cargo or its tagged destination.
+ for(var/mob/living/M in D)
+ if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
+ hasmob = 1
- //Checks 1 contents level deep. This means that players can be sent through disposals...
- //...but it should require a second person to open the package. (i.e. person inside a wrapped locker)
- for(var/obj/O in D)
- if(O.contents)
- for(var/mob/living/M in O.contents)
- if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
- hasmob = 1
+ //Checks 1 contents level deep. This means that players can be sent through disposals...
+ //...but it should require a second person to open the package. (i.e. person inside a wrapped locker)
+ for(var/obj/O in D)
+ if(O.contents)
+ for(var/mob/living/M in O.contents)
+ if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
+ hasmob = 1
- // now everything inside the disposal gets put into the holder
- // note AM since can contain mobs or objs
- for(var/atom/movable/AM in D)
- AM.forceMove(src)
- if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
- var/obj/structure/bigDelivery/T = AM
- src.destinationTag = T.sortTag
- if(istype(AM, /obj/item/smallDelivery) && !hasmob)
- var/obj/item/smallDelivery/T = AM
- src.destinationTag = T.sortTag
- //Drones can mail themselves through maint.
- if(istype(AM, /mob/living/silicon/robot/drone))
- var/mob/living/silicon/robot/drone/drone = AM
- src.destinationTag = drone.mail_destination
+ // now everything inside the disposal gets put into the holder
+ // note AM since can contain mobs or objs
+ for(var/atom/movable/AM in D)
+ AM.forceMove(src)
+ if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
+ var/obj/structure/bigDelivery/T = AM
+ src.destinationTag = T.sortTag
+ if(istype(AM, /obj/item/smallDelivery) && !hasmob)
+ var/obj/item/smallDelivery/T = AM
+ src.destinationTag = T.sortTag
+ //Drones can mail themselves through maint.
+ if(istype(AM, /mob/living/silicon/robot/drone))
+ var/mob/living/silicon/robot/drone/drone = AM
+ src.destinationTag = drone.mail_destination
// start the movement process
// argument is the disposal unit the holder started in
- proc/start(var/obj/machinery/disposal/D)
- if(!D.trunk)
- D.expel(src) // no trunk connected, so expel immediately
- return
-
- forceMove(D.trunk)
- active = 1
- set_dir(DOWN)
- spawn(1)
- move() // spawn off the movement process
-
+/obj/disposalholder/proc/start(var/obj/machinery/disposal/D)
+ if(!D.trunk)
+ D.expel(src) // no trunk connected, so expel immediately
return
- // movement process, persists while holder is moving through pipes
- proc/move()
- var/obj/structure/disposalpipe/last
- while(active)
- sleep(1) // was 1
- if(!loc) return // check if we got GC'd
+ forceMove(D.trunk)
+ set_dir(DOWN)
+ START_PROCESSING(SSdisposals, src)
- if(hasmob && prob(3))
- for(var/mob/living/H in src)
- if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system,
- H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie
+/obj/disposalholder/process() // For the new SSdisposals-based movement.
+ if (hasmob && prob(3))
+ for(var/mob/living/H in src)
+ if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system,
+ H.take_overall_damage(20, 0, "Blunt Trauma")//horribly maim any living creature jumping down disposals. c'est la vie
- var/obj/structure/disposalpipe/curr = loc
- last = curr
- curr = curr.transfer(src)
-
- if(!loc) return //side effects
-
- if(!curr)
- last.expel(src, loc, dir)
-
- //
- if(!(count--))
- active = 0
+ var/obj/structure/disposalpipe/curr = loc
+ if (!loc)
+ STOP_PROCESSING(SSdisposals, src)
+ tick_last = null
+ crash_with("disposalholder processing in nullspace!")
return
+ tick_last = curr
+ curr = curr.transfer(src)
+ if (!loc)
+ STOP_PROCESSING(SSdisposals, src)
+ tick_last = null
+ return
- // find the turf which should contain the next pipe
- proc/nextloc()
- return get_step(loc,dir)
+ if (!curr)
+ //spawn (0) // expel() can sleep, so we gotta fork to not upset SSdisposals.
+ STOP_PROCESSING(SSdisposals, src)
+ tick_last.expel(src, loc.loc, dir)
+
+ if (!(count--))
+ STOP_PROCESSING(SSdisposals, src)
+ tick_last = null
+
+// find the turf which should contain the next pipe
+/obj/disposalholder/proc/nextloc()
+ return get_step(loc,dir)
// find a matching pipe on a turf
- proc/findpipe(var/turf/T)
-
- if(!T)
- return null
-
- var/fdir = turn(dir, 180) // flip the movement direction
- for(var/obj/structure/disposalpipe/P in T)
- if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir
- return P
- // if no matching pipe, return null
+/obj/disposalholder/proc/findpipe(var/turf/T)
+ if(!T)
return null
+ var/fdir = turn(dir, 180) // flip the movement direction
+ for(var/obj/structure/disposalpipe/P in T)
+ if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir
+ return P
+ // if no matching pipe, return null
+ return null
+
// merge two holder objects
// used when a a holder meets a stuck holder
- proc/merge(var/obj/structure/disposalholder/other)
- for(var/atom/movable/AM in other)
- AM.forceMove(src) // move everything in other holder to this one
- if(ismob(AM))
- var/mob/M = AM
- if(M.client) // if a client mob, update eye to follow this holder
- M.client.eye = src
+/obj/disposalholder/proc/merge(obj/disposalholder/other)
+ for(var/atom/movable/AM in other)
+ AM.forceMove(src) // move everything in other holder to this one
+ if(ismob(AM))
+ var/mob/M = AM
+ if(M.client) // if a client mob, update eye to follow this holder
+ M.client.eye = src
- qdel(other)
+ qdel(other)
+/obj/disposalholder/proc/settag(new_tag)
+ destinationTag = new_tag
- proc/settag(var/new_tag)
+/obj/disposalholder/proc/setpartialtag(new_tag)
+ if(partialTag == new_tag)
destinationTag = new_tag
-
- proc/setpartialtag(var/new_tag)
- if(partialTag == new_tag)
- destinationTag = new_tag
- partialTag = ""
- else
- partialTag = new_tag
+ partialTag = ""
+ else
+ partialTag = new_tag
// called when player tries to move while in a pipe
- relaymove(mob/user as mob)
-
- if(!istype(user,/mob/living))
- return
-
- var/mob/living/U = user
-
- if (U.stat || U.last_special <= world.time)
- return
-
- U.last_special = world.time+100
-
- if (src.loc)
- for (var/mob/M in hearers(src.loc.loc))
- M << "CLONG, clong! "
-
- playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0)
-
- // called to vent all gas in holder to a location
- proc/vent_gas(var/atom/location)
- location.assume_air(gas) // vent all gas to turf
+/obj/disposalholder/relaymove(mob/user as mob)
+ if(!istype(user,/mob/living))
return
-/obj/structure/disposalholder/Destroy()
- qdel(gas)
- active = 0
+ var/mob/living/U = user
+
+ if (U.stat || U.last_special <= world.time)
+ return
+
+ U.last_special = world.time+100
+
+ if (src.loc)
+ for (var/mob/M in hearers(src.loc.loc))
+ M << "CLONG, clong! "
+
+ playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0)
+
+ // called to vent all gas in holder to a location
+/obj/disposalholder/proc/vent_gas(atom/location)
+ location.assume_air(gas) // vent all gas to turf
+
+/obj/disposalholder/Destroy()
+ STOP_PROCESSING(SSdisposals, src)
+ QDEL_NULL(gas)
+ tick_last = null
return ..()
// Disposal pipes
@@ -673,282 +666,18 @@
var/sortType = ""
var/subtype = 0
// new pipe, set the icon_state as on map
- New()
- ..()
- base_icon_state = icon_state
- return
-
- // pipe is deleted
- // ensure if holder is present, it is expelled
- Destroy()
- var/obj/structure/disposalholder/H = locate() in src
- if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // deleting pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.forceMove(T)
- AM.pipe_eject(0)
- qdel(H)
- ..()
- return
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
- ..()
-
- // returns the direction of the next pipe object, given the entrance dir
- // by default, returns the bitmask of remaining directions
- proc/nextdir(var/fromdir)
- return dpdir & (~turn(fromdir, 180))
-
- // transfer the holder through this pipe segment
- // overriden for special behaviour
- //
- proc/transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir)
- H.set_dir(nextdir)
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.forceMove(P)
- else // if wasn't a pipe, then set loc to turf
- H.forceMove(T)
- return null
-
- return P
-
-
- // update the icon_state to reflect hidden status
- proc/update()
- var/turf/T = src.loc
- hide(!T.is_plating() && !istype(T,/turf/space)) // space never hides pipes
-
- // hide called by levelupdate if turf intact status changes
- // change visibility status and force update of icon
- hide(var/intact)
- invisibility = intact ? 101: 0 // hide if floor is intact
- updateicon()
-
- // update actual icon_state depending on visibility
- // if invisible, append "f" to icon_state to show faded version
- // this will be revealed if a T-scanner is used
- // if visible, use regular icon_state
- proc/updateicon()
-/* if(invisibility) //we hide things with alpha now, no need for transparent icons
- icon_state = "[base_icon_state]f"
- else
- icon_state = base_icon_state*/
- icon_state = base_icon_state
- return
-
-
- // expel the held objects into a turf
- // called when there is a break in the pipe
- proc/expel(var/obj/structure/disposalholder/H, var/turf/T, var/direction)
- if(!istype(H))
- return
-
- // Empty the holder if it is expelled into a dense turf.
- // Leaving it intact and sitting in a wall is stupid.
- if(T.density)
- for(var/atom/movable/AM in H)
- AM.loc = T
- AM.pipe_eject(0)
- qdel(H)
- return
-
-
- if(!T.is_plating() && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
- var/turf/simulated/floor/F = T
- F.break_tile()
- new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff
-
- var/turf/target
- if(direction) // direction is specified
- if(istype(T, /turf/space)) // if ended in space, then range is unlimited
- target = get_edge_target_turf(T, direction)
- else // otherwise limit to 10 tiles
- target = get_ranged_target_turf(T, direction, 10)
-
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H)
- for(var/atom/movable/AM in H)
- AM.forceMove(T)
- AM.pipe_eject(direction)
- spawn(1)
- if(AM)
- AM.throw_at(target, 100, 1)
- H.vent_gas(T)
- qdel(H)
-
- else // no specified direction, so throw in random direction
-
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
- if(H)
- for(var/atom/movable/AM in H)
- target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5))
-
- AM.forceMove(T)
- AM.pipe_eject(0)
- spawn(1)
- if(AM)
- AM.throw_at(target, 5, 1)
-
- H.vent_gas(T) // all gas vent to turf
- qdel(H)
-
- return
-
- // call to break the pipe
- // will expel any holder inside at the time
- // then delete the pipe
- // remains : set to leave broken pipe pieces in place
- proc/broken(var/remains = 0)
- if(remains)
- for(var/D in cardinal)
- if(D & dpdir)
- var/obj/structure/disposalpipe/broken/P = new(src.loc)
- P.set_dir(D)
-
- src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
- var/obj/structure/disposalholder/H = locate() in src
- if(H)
- // holder was present
- H.active = 0
- var/turf/T = src.loc
- if(T.density)
- // broken pipe is inside a dense turf (wall)
- // this is unlikely, but just dump out everything into the turf in case
-
- for(var/atom/movable/AM in H)
- AM.forceMove(T)
- AM.pipe_eject(0)
- qdel(H)
- return
-
- // otherwise, do normal expel from turf
- if(H)
- expel(H, T, 0)
-
- spawn(2) // delete pipe after 2 ticks to ensure expel proc finished
- qdel(src)
-
-
- // pipe affected by explosion
- ex_act(severity)
-
- switch(severity)
- if(1.0)
- broken(0)
- return
- if(2.0)
- health -= rand(5,15)
- healthcheck()
- return
- if(3.0)
- health -= rand(0,15)
- healthcheck()
- return
-
-
- // test health for brokenness
- proc/healthcheck()
- if(health < -2)
- broken(0)
- else if(health<1)
- broken(1)
- return
-
- //attack by item
- //weldingtool: unfasten and convert to obj/disposalconstruct
-
- attackby(var/obj/item/I, var/mob/user)
-
- var/turf/T = src.loc
- if(!T.is_plating())
- return // prevent interaction with T-scanner revealed pipes
- src.add_fingerprint(user)
- if(istype(I, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/W = I
-
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- // check if anything changed over 2 seconds
- var/turf/uloc = user.loc
- var/atom/wloc = W.loc
- user << "Slicing the disposal pipe."
- sleep(30)
- if(!W.isOn()) return
- if(user.loc == uloc && wloc == W.loc)
- welded()
- else
- user << "You must stay still while welding the pipe."
- else
- user << "You need more welding fuel to cut the pipe."
- return
-
- // called when pipe is cut with welder
- proc/welded()
-
- var/obj/structure/disposalconstruct/C = new (src.loc)
- switch(base_icon_state)
- if("pipe-s")
- C.ptype = 0
- if("pipe-c")
- C.ptype = 1
- if("pipe-j1")
- C.ptype = 2
- if("pipe-j2")
- C.ptype = 3
- if("pipe-y")
- C.ptype = 4
- if("pipe-t")
- C.ptype = 5
- if("pipe-j1s")
- C.ptype = 9
- C.sortType = sortType
- if("pipe-j2s")
- C.ptype = 10
- C.sortType = sortType
-///// Z-Level stuff
- if("pipe-u")
- C.ptype = 11
- if("pipe-d")
- C.ptype = 12
-///// Z-Level stuff
- if("pipe-tagger")
- C.ptype = 13
- if("pipe-tagger-partial")
- C.ptype = 14
- C.subtype = src.subtype
- src.transfer_fingerprints_to(C)
- C.set_dir(dir)
- C.density = 0
- C.anchored = 1
- C.update()
-
- qdel(src)
+/obj/structure/disposalpipe/Initialize()
+ . = ..()
+ base_icon_state = icon_state
// pipe is deleted
// ensure if holder is present, it is expelled
/obj/structure/disposalpipe/Destroy()
- var/obj/structure/disposalholder/H = locate() in src
+ var/obj/disposalholder/H = locate() in src
if(H)
// holder was present
- H.active = 0
+ STOP_PROCESSING(SSdisposals, H)
var/turf/T = src.loc
if(T.density)
// deleting pipe is inside a dense turf (wall)
@@ -958,136 +687,380 @@
AM.forceMove(T)
AM.pipe_eject(0)
qdel(H)
- ..()
+
+ return ..()
+
+ // otherwise, do normal expel from turf
+ if(H)
+ expel(H, T, 0)
+ return ..()
+
+// returns the direction of the next pipe object, given the entrance dir
+// by default, returns the bitmask of remaining directions
+/obj/structure/disposalpipe/proc/nextdir(var/fromdir)
+ return dpdir & (~turn(fromdir, 180))
+
+// transfer the holder through this pipe segment
+// overriden for special behaviour
+//
+/obj/structure/disposalpipe/proc/transfer(var/obj/disposalholder/H)
+ var/nextdir = nextdir(H.dir)
+ H.set_dir(nextdir)
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
+
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/disposalholder/H2 = locate() in P
+ if(H2 && !H2.isprocessing)
+ H.merge(H2)
+
+ H.forceMove(P)
+ else // if wasn't a pipe, then set loc to turf
+ H.forceMove(T)
+ return null
+
+ return P
+
+
+// update the icon_state to reflect hidden status
+/obj/structure/disposalpipe/proc/update()
+ var/turf/T = src.loc
+ hide(!T.is_plating() && !istype(T,/turf/space)) // space never hides pipes
+
+// hide called by levelupdate if turf intact status changes
+// change visibility status and force update of icon
+/obj/structure/disposalpipe/hide(var/intact)
+ invisibility = intact ? 101: 0 // hide if floor is intact
+ updateicon()
+
+// update actual icon_state depending on visibility
+// if invisible, append "f" to icon_state to show faded version
+// this will be revealed if a T-scanner is used
+// if visible, use regular icon_state
+/obj/structure/disposalpipe/proc/updateicon()
+/* if(invisibility) //we hide things with alpha now, no need for transparent icons
+ icon_state = "[base_icon_state]f"
+ else
+ icon_state = base_icon_state*/
+ icon_state = base_icon_state
+ return
+
+
+ // expel the held objects into a turf
+ // called when there is a break in the pipe
+/obj/structure/disposalpipe/proc/expel(var/obj/disposalholder/H, var/turf/T, var/direction)
+ if(!istype(H))
+ return
+
+ // Empty the holder if it is expelled into a dense turf.
+ // Leaving it intact and sitting in a wall is stupid.
+ if(T.density)
+ for(var/atom/movable/AM in H)
+ AM.loc = T
+ AM.pipe_eject(0)
+ qdel(H)
+ return
+
+ if(!T.is_plating() && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
+ var/turf/simulated/floor/F = T
+ F.break_tile()
+ new /obj/item/stack/tile(H) // add to holder so it will be thrown with other stuff
+
+ var/turf/target
+ if(direction) // direction is specified
+ if(istype(T, /turf/space)) // if ended in space, then range is unlimited
+ target = get_edge_target_turf(T, direction)
+ else // otherwise limit to 10 tiles
+ target = get_ranged_target_turf(T, direction, 10)
+
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ AM.forceMove(T)
+ AM.pipe_eject(direction)
+ // addtimer will check AM for null.
+ addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, target, 100, 1), 1)
+ H.vent_gas(T)
+ qdel(H)
+
+ else // no specified direction, so throw in random direction
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ if(H)
+ for(var/atom/movable/AM in H)
+ target = get_offset_target_turf(T, rand(5)-rand(5), rand(5)-rand(5))
+
+ AM.forceMove(T)
+ AM.pipe_eject(0)
+ addtimer(CALLBACK(AM, /atom/movable/.proc/throw_at, target, 5, 1), 1)
+
+ H.vent_gas(T) // all gas vent to turf
+ qdel(H)
+
+// call to break the pipe
+// will expel any holder inside at the time
+// then delete the pipe
+// remains : set to leave broken pipe pieces in place
+/obj/structure/disposalpipe/proc/broken(var/remains = 0)
+ if(remains)
+ for(var/D in cardinal)
+ if(D & dpdir)
+ var/obj/structure/disposalpipe/broken/P = new(src.loc)
+ P.set_dir(D)
+
+ src.invisibility = 101 // make invisible (since we won't delete the pipe immediately)
+ var/obj/disposalholder/H = locate() in src
+ if(H)
+ // holder was present
+ STOP_PROCESSING(SSdisposals, H)
+ var/turf/T = src.loc
+ if(T.density)
+ // broken pipe is inside a dense turf (wall)
+ // this is unlikely, but just dump out everything into the turf in case
+
+ for(var/atom/movable/AM in H)
+ AM.forceMove(T)
+ AM.pipe_eject(0)
+ qdel(H)
return
// otherwise, do normal expel from turf
if(H)
expel(H, T, 0)
- ..()
+
+ QDEL_IN(src, 2) // delete pipe after 2 ticks to ensure expel proc finished
+
+
+// pipe affected by explosion
+/obj/structure/disposalpipe/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ broken(0)
+ return
+ if(2.0)
+ health -= rand(5,15)
+ healthcheck()
+ return
+ if(3.0)
+ health -= rand(0,15)
+ healthcheck()
+ return
+
+
+// test health for brokenness
+/obj/structure/disposalpipe/proc/healthcheck()
+ if(health < -2)
+ broken(0)
+ else if(health<1)
+ broken(1)
+
+//attack by item
+//weldingtool: unfasten and convert to obj/disposalconstruct
+
+/obj/structure/disposalpipe/attackby(var/obj/item/I, var/mob/user)
+ var/turf/T = src.loc
+ if(!T.is_plating())
+ return // prevent interaction with T-scanner revealed pipes
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/W = I
+
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ // check if anything changed over 3 seconds
+ user << "Slicing the disposal pipe..."
+ if (do_after(user, 3 SECONDS, act_target = src))
+ if(!src || !W.isOn()) return
+ welded()
+ else
+ user << "You must stay still while welding the pipe."
+ else
+ user << "You need more welding fuel to cut the pipe."
+
+// called when pipe is cut with welder
+/obj/structure/disposalpipe/proc/welded()
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ switch(base_icon_state)
+ if("pipe-s")
+ C.ptype = 0
+ if("pipe-c")
+ C.ptype = 1
+ if("pipe-j1")
+ C.ptype = 2
+ if("pipe-j2")
+ C.ptype = 3
+ if("pipe-y")
+ C.ptype = 4
+ if("pipe-t")
+ C.ptype = 5
+ if("pipe-j1s")
+ C.ptype = 9
+ C.sortType = sortType
+ if("pipe-j2s")
+ C.ptype = 10
+ C.sortType = sortType
+///// Z-Level stuff
+ if("pipe-u")
+ C.ptype = 11
+ if("pipe-d")
+ C.ptype = 12
+///// Z-Level stuff
+ if("pipe-tagger")
+ C.ptype = 13
+ if("pipe-tagger-partial")
+ C.ptype = 14
+ C.subtype = src.subtype
+ src.transfer_fingerprints_to(C)
+ C.set_dir(dir)
+ C.density = 0
+ C.anchored = 1
+ C.update()
+
+ qdel(src)
+
+// pipe is deleted
+// ensure if holder is present, it is expelled
+/obj/structure/disposalpipe/Destroy()
+ var/obj/disposalholder/H = locate() in src
+ if(H)
+ // holder was present
+ STOP_PROCESSING(SSdisposals, H)
+ var/turf/T = src.loc
+ if(T.density)
+ // deleting pipe is inside a dense turf (wall)
+ // this is unlikely, but just dump out everything into the turf in case
+
+ for(var/atom/movable/AM in H)
+ AM.forceMove(T)
+ AM.pipe_eject(0)
+ qdel(H)
+
+ return ..()
+
+ // otherwise, do normal expel from turf
+ if(H)
+ expel(H, T, 0)
+ return ..()
/obj/structure/disposalpipe/hides_under_flooring()
return 1
// *** TEST verb
//client/verb/dispstop()
-// for(var/obj/structure/disposalholder/H in world)
+// for(var/obj/disposalholder/H in world)
// H.active = 0
// a straight or bent segment
/obj/structure/disposalpipe/segment
icon_state = "pipe-s"
- New()
- ..()
- if(icon_state == "pipe-s")
- dpdir = dir | turn(dir, 180)
- else
- dpdir = dir | turn(dir, -90)
+/obj/structure/disposalpipe/segment/Initialize()
+ . = ..()
+ if(icon_state == "pipe-s")
+ dpdir = dir | turn(dir, 180)
+ else
+ dpdir = dir | turn(dir, -90)
- update()
- return
+ update()
///// Z-Level stuff
/obj/structure/disposalpipe/up
icon_state = "pipe-u"
- New()
- ..()
- dpdir = dir
- update()
- return
+/obj/structure/disposalpipe/up/Initialize()
+ . = ..()
+ dpdir = dir
+ update()
- nextdir(var/fromdir)
- var/nextdir
- if(fromdir == 11)
- nextdir = dir
+/obj/structure/disposalpipe/up/nextdir(var/fromdir)
+ var/nextdir
+ if(fromdir == 11)
+ nextdir = dir
+ else
+ nextdir = 12
+ return nextdir
+
+/obj/structure/disposalpipe/up/transfer(var/obj/disposalholder/H)
+ var/nextdir = nextdir(H.dir)
+ H.set_dir(nextdir)
+
+ var/turf/T
+ var/obj/structure/disposalpipe/P
+
+ if(nextdir == 12)
+ T = GetAbove(src)
+ if(!T)
+ H.forceMove(loc)
+ return
else
- nextdir = 12
- return nextdir
+ for(var/obj/structure/disposalpipe/down/F in T)
+ P = F
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir)
- H.set_dir(nextdir)
+ else
+ T = get_step(src.loc, H.dir)
+ P = H.findpipe(T)
- var/turf/T
- var/obj/structure/disposalpipe/P
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/disposalholder/H2 = locate() in P
+ if(H2 && !H2.isprocessing)
+ H.merge(H2)
- if(nextdir == 12)
- T = GetAbove(src)
- if(!T)
- H.forceMove(loc)
- return
- else
- for(var/obj/structure/disposalpipe/down/F in T)
- P = F
+ H.forceMove(P)
+ else // if wasn't a pipe, then set loc to turf
+ H.forceMove(T)
+ return null
- else
- T = get_step(src.loc, H.dir)
- P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.forceMove(P)
- else // if wasn't a pipe, then set loc to turf
- H.forceMove(T)
- return null
-
- return P
+ return P
/obj/structure/disposalpipe/down
icon_state = "pipe-d"
- New()
- ..()
- dpdir = dir
- update()
- return
+/obj/structure/disposalpipe/down/Initialize()
+ . = ..()
+ dpdir = dir
+ update()
- nextdir(var/fromdir)
- var/nextdir
- if(fromdir == 12)
- nextdir = dir
+/obj/structure/disposalpipe/down/nextdir(var/fromdir)
+ var/nextdir
+ if(fromdir == 12)
+ nextdir = dir
+ else
+ nextdir = 11
+ return nextdir
+
+/obj/structure/disposalpipe/down/transfer(var/obj/disposalholder/H)
+ var/nextdir = nextdir(H.dir)
+ H.dir = nextdir
+
+ var/turf/T
+ var/obj/structure/disposalpipe/P
+
+ if(nextdir == 11)
+ T = GetBelow(src)
+ if(!T)
+ H.forceMove(src.loc)
+ return
else
- nextdir = 11
- return nextdir
+ for(var/obj/structure/disposalpipe/up/F in T)
+ P = F
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir)
- H.dir = nextdir
+ else
+ T = get_step(src.loc, H.dir)
+ P = H.findpipe(T)
- var/turf/T
- var/obj/structure/disposalpipe/P
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/disposalholder/H2 = locate() in P
+ if(H2 && !H2.isprocessing)
+ H.merge(H2)
- if(nextdir == 11)
- T = GetBelow(src)
- if(!T)
- H.forceMove(src.loc)
- return
- else
- for(var/obj/structure/disposalpipe/up/F in T)
- P = F
+ H.forceMove(P)
+ else // if wasn't a pipe, then set loc to turf
+ H.forceMove(T)
+ return null
- else
- T = get_step(src.loc, H.dir)
- P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.forceMove(P)
- else // if wasn't a pipe, then set loc to turf
- H.forceMove(T)
- return null
-
- return P
+ return P
///// Z-Level stuff
/obj/structure/disposalpipe/junction/yjunction
@@ -1097,46 +1070,42 @@
/obj/structure/disposalpipe/junction
icon_state = "pipe-j1"
- New()
- ..()
- if(icon_state == "pipe-j1")
- dpdir = dir | turn(dir, -90) | turn(dir,180)
- else if(icon_state == "pipe-j2")
- dpdir = dir | turn(dir, 90) | turn(dir,180)
- else // pipe-y
- dpdir = dir | turn(dir,90) | turn(dir, -90)
- update()
- return
+/obj/structure/disposalpipe/junction/Initialize()
+ . = ..()
+ if(icon_state == "pipe-j1")
+ dpdir = dir | turn(dir, -90) | turn(dir,180)
+ else if(icon_state == "pipe-j2")
+ dpdir = dir | turn(dir, 90) | turn(dir,180)
+ else // pipe-y
+ dpdir = dir | turn(dir,90) | turn(dir, -90)
+ update()
+// next direction to move
+// if coming in from secondary dirs, then next is primary dir
+// if coming in from primary dir, then next is equal chance of other dirs
+/obj/structure/disposalpipe/junction/nextdir(var/fromdir)
+ var/flipdir = turn(fromdir, 180)
+ if(flipdir != dir) // came from secondary dir
+ return dir // so exit through primary
+ else // came from primary
+ // so need to choose either secondary exit
+ var/mask = ..(fromdir)
- // next direction to move
- // if coming in from secondary dirs, then next is primary dir
- // if coming in from primary dir, then next is equal chance of other dirs
-
- nextdir(var/fromdir)
- var/flipdir = turn(fromdir, 180)
- if(flipdir != dir) // came from secondary dir
- return dir // so exit through primary
- else // came from primary
- // so need to choose either secondary exit
- var/mask = ..(fromdir)
-
- // find a bit which is set
- var/setbit = 0
- if(mask & NORTH)
- setbit = NORTH
- else if(mask & SOUTH)
- setbit = SOUTH
- else if(mask & EAST)
- setbit = EAST
- else
- setbit = WEST
-
- if(prob(50)) // 50% chance to choose the found bit or the other one
- return setbit
- else
- return mask & (~setbit)
+ // find a bit which is set
+ var/setbit = 0
+ if(mask & NORTH)
+ setbit = NORTH
+ else if(mask & SOUTH)
+ setbit = SOUTH
+ else if(mask & EAST)
+ setbit = EAST
+ else
+ setbit = WEST
+ if(prob(50)) // 50% chance to choose the found bit or the other one
+ return setbit
+ else
+ return mask & (~setbit)
/obj/structure/disposalpipe/tagger
name = "package tagger"
@@ -1144,46 +1113,48 @@
var/sort_tag = ""
var/partial = 0
- proc/updatedesc()
- desc = initial(desc)
- if(sort_tag)
- desc += "\nIt's tagging objects with the '[sort_tag]' tag."
+/obj/structure/disposalpipe/tagger/proc/updatedesc()
+ desc = initial(desc)
+ if(sort_tag)
+ desc += "\nIt's tagging objects with the '[sort_tag]' tag."
- proc/updatename()
- if(sort_tag)
- name = "[initial(name)] ([sort_tag])"
+/obj/structure/disposalpipe/tagger/proc/updatename()
+ if(sort_tag)
+ name = "[initial(name)] ([sort_tag])"
+ else
+ name = initial(name)
+
+/obj/structure/disposalpipe/tagger/Initialize()
+ . = ..()
+ dpdir = dir | turn(dir, 180)
+ if(sort_tag)
+ SSdisposals.tagger_locations |= sort_tag
+
+ updatename()
+ updatedesc()
+ update()
+
+/obj/structure/disposalpipe/tagger/attackby(var/obj/item/I, var/mob/user)
+ if(..())
+ return
+
+ if(istype(I, /obj/item/device/destTagger))
+ var/obj/item/device/destTagger/O = I
+
+ if(O.currTag)// Tag set
+ sort_tag = O.currTag
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
+ user << "\blue Changed tag to '[sort_tag]'."
+ updatename()
+ updatedesc()
+
+/obj/structure/disposalpipe/tagger/transfer(var/obj/disposalholder/H)
+ if(sort_tag)
+ if(partial)
+ H.setpartialtag(sort_tag)
else
- name = initial(name)
-
- New()
- . = ..()
- dpdir = dir | turn(dir, 180)
- if(sort_tag) tagger_locations |= sort_tag
- updatename()
- updatedesc()
- update()
-
- attackby(var/obj/item/I, var/mob/user)
- if(..())
- return
-
- if(istype(I, /obj/item/device/destTagger))
- var/obj/item/device/destTagger/O = I
-
- if(O.currTag)// Tag set
- sort_tag = O.currTag
- playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
- user << "\blue Changed tag to '[sort_tag]'."
- updatename()
- updatedesc()
-
- transfer(var/obj/structure/disposalholder/H)
- if(sort_tag)
- if(partial)
- H.setpartialtag(sort_tag)
- else
- H.settag(sort_tag)
- return ..()
+ H.settag(sort_tag)
+ return ..()
/obj/structure/disposalpipe/tagger/partial //needs two passes to tag
name = "partial package tagger"
@@ -1200,87 +1171,88 @@
var/negdir = 0
var/sortdir = 0
- proc/updatedesc()
- desc = initial(desc)
- if(sortType)
- desc += "\nIt's filtering objects with the '[sortType]' tag."
+/obj/structure/disposalpipe/sortjunction/proc/updatedesc()
+ desc = initial(desc)
+ if(sortType)
+ desc += "\nIt's filtering objects with the '[sortType]' tag."
- proc/updatename()
- if(sortType)
- name = "[initial(name)] ([sortType])"
+/obj/structure/disposalpipe/sortjunction/proc/updatename()
+ if(sortType)
+ name = "[initial(name)] ([sortType])"
+ else
+ name = initial(name)
+
+/obj/structure/disposalpipe/sortjunction/proc/updatedir()
+ posdir = dir
+ negdir = turn(posdir, 180)
+
+ if(icon_state == "pipe-j1s")
+ sortdir = turn(posdir, -90)
+ else if(icon_state == "pipe-j2s")
+ sortdir = turn(posdir, 90)
+
+ dpdir = sortdir | posdir | negdir
+
+/obj/structure/disposalpipe/sortjunction/Initialize()
+ . = ..()
+ if(sortType)
+ SSdisposals.tagger_locations |= sortType
+
+ updatedir()
+ updatename()
+ updatedesc()
+ update()
+
+/obj/structure/disposalpipe/sortjunction/attackby(var/obj/item/I, var/mob/user)
+ if(..())
+ return
+
+ if(istype(I, /obj/item/device/destTagger))
+ var/obj/item/device/destTagger/O = I
+
+ if(O.currTag)// Tag set
+ sortType = O.currTag
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
+ user << "\blue Changed filter to '[sortType]'."
+ updatename()
+ updatedesc()
+
+/obj/structure/disposalpipe/sortjunction/proc/divert_check(var/checkTag)
+ return sortType == checkTag
+
+// next direction to move
+// if coming in from negdir, then next is primary dir or sortdir
+// if coming in from posdir, then flip around and go back to posdir
+// if coming in from sortdir, go to posdir
+
+/obj/structure/disposalpipe/sortjunction/nextdir(var/fromdir, var/sortTag)
+ if(fromdir != sortdir) // probably came from the negdir
+ if(divert_check(sortTag))
+ return sortdir
else
- name = initial(name)
-
- proc/updatedir()
- posdir = dir
- negdir = turn(posdir, 180)
-
- if(icon_state == "pipe-j1s")
- sortdir = turn(posdir, -90)
- else if(icon_state == "pipe-j2s")
- sortdir = turn(posdir, 90)
-
- dpdir = sortdir | posdir | negdir
-
- New()
- . = ..()
- if(sortType) tagger_locations |= sortType
-
- updatedir()
- updatename()
- updatedesc()
- update()
-
- attackby(var/obj/item/I, var/mob/user)
- if(..())
- return
-
- if(istype(I, /obj/item/device/destTagger))
- var/obj/item/device/destTagger/O = I
-
- if(O.currTag)// Tag set
- sortType = O.currTag
- playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
- user << "\blue Changed filter to '[sortType]'."
- updatename()
- updatedesc()
-
- proc/divert_check(var/checkTag)
- return sortType == checkTag
-
- // next direction to move
- // if coming in from negdir, then next is primary dir or sortdir
- // if coming in from posdir, then flip around and go back to posdir
- // if coming in from sortdir, go to posdir
-
- nextdir(var/fromdir, var/sortTag)
- if(fromdir != sortdir) // probably came from the negdir
- if(divert_check(sortTag))
- return sortdir
- else
- return posdir
- else // came from sortdir
- // so go with the flow to positive direction
return posdir
+ else // came from sortdir
+ // so go with the flow to positive direction
+ return posdir
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir, H.destinationTag)
- H.set_dir(nextdir)
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
+/obj/structure/disposalpipe/sortjunction/transfer(var/obj/disposalholder/H)
+ var/nextdir = nextdir(H.dir, H.destinationTag)
+ H.set_dir(nextdir)
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/disposalholder/H2 = locate() in P
+ if(H2 && !H2.isprocessing)
+ H.merge(H2)
- H.forceMove(P)
- else // if wasn't a pipe, then set loc to turf
- H.forceMove(T)
- return null
+ H.forceMove(P)
+ else // if wasn't a pipe, then set loc to turf
+ H.forceMove(T)
+ return null
- return P
+ return P
//a three-way junction that filters all wrapped and tagged items
/obj/structure/disposalpipe/sortjunction/wildcard
@@ -1312,14 +1284,13 @@
icon_state = "pipe-t"
var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet
-/obj/structure/disposalpipe/trunk/New()
- ..()
+/obj/structure/disposalpipe/trunk/Initialize()
+ . = ..()
dpdir = dir
- spawn(1)
- getlinked()
update()
- return
+
+ getlinked()
/obj/structure/disposalpipe/trunk/proc/getlinked()
linked = null
@@ -1334,9 +1305,8 @@
linked = O
update()
- return
- // Override attackby so we disallow trunkremoval when somethings ontop
+// Override attackby so we disallow trunkremoval when somethings ontop
/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user)
//Disposal bins or chutes
@@ -1366,25 +1336,20 @@
if(W.remove_fuel(0,user))
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- // check if anything changed over 2 seconds
- var/turf/uloc = user.loc
- var/atom/wloc = W.loc
+ // check if anything changed over 3 seconds
user << "Slicing the disposal pipe."
- sleep(30)
- if(!W.isOn()) return
- if(user.loc == uloc && wloc == W.loc)
+ if (do_after(user, 3 SECONDS, act_target = src))
+ if(!src || !W.isOn()) return
welded()
else
user << "You must stay still while welding the pipe."
else
user << "You need more welding fuel to cut the pipe."
- return
- // would transfer to next pipe segment, but we are in a trunk
- // if not entering from disposal bin,
- // transfer to linked object (outlet or bin)
-
-/obj/structure/disposalpipe/trunk/transfer(var/obj/structure/disposalholder/H)
+// would transfer to next pipe segment, but we are in a trunk
+// if not entering from disposal bin,
+// transfer to linked object (outlet or bin)
+/obj/structure/disposalpipe/trunk/transfer(var/obj/disposalholder/H)
if(H.dir == DOWN) // we just entered from a disposer
return ..() // so do base transfer proc
@@ -1410,6 +1375,10 @@
else
return 0
+/obj/structure/disposalpipe/trunk/expel(obj/disposalholder/H)
+ if (!linked)
+ ..(H)
+
// a broken pipe
/obj/structure/disposalpipe/broken
icon_state = "pipe-b"
@@ -1417,18 +1386,16 @@
// i.e. will be treated as an empty turf
desc = "A broken piece of disposal pipe."
- New()
- ..()
- update()
- return
+/obj/structure/disposalpipe/broken/Initialize()
+ . = ..()
+ update()
- // called when welded
- // for broken pipe, remove and turn into scrap
-
- welded()
-// var/obj/item/scrap/S = new(src.loc)
-// S.set_components(200,0,0)
- qdel(src)
+// called when welded
+// for broken pipe, remove and turn into scrap
+/obj/structure/disposalpipe/broken/welded()
+// var/obj/item/scrap/S = new(src.loc)
+// S.set_components(200,0,0)
+ qdel(src)
// the disposal outlet machine
@@ -1443,72 +1410,105 @@
var/turf/target // this will be where the output objects are 'thrown' to.
var/mode = 0
- New()
- ..()
+/obj/structure/disposaloutlet/Initialize()
+ . = ..()
+ target = get_ranged_target_turf(src, dir, 10)
- spawn(1)
- target = get_ranged_target_turf(src, dir, 10)
+ var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc
+ if(trunk)
+ trunk.linked = src // link the pipe trunk to self
- var/obj/structure/disposalpipe/trunk/trunk = locate() in src.loc
- if(trunk)
- trunk.linked = src // link the pipe trunk to self
+/proc/disposal_log(thing)
+ log_debug("\[[world.time]] Disposals: [thing]")
+/obj/structure/disposaloutlet/proc/expel(var/obj/disposalholder/H)
+ set waitfor = FALSE
+ flick("outlet-open", src)
+ playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
+ sleep(20) //wait until correct animation frame
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+
+ if(H)
+ for(var/atom/movable/AM in H)
+ AM.forceMove(src.loc)
+ AM.pipe_eject(dir)
+ if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
+ spawn(5)
+ AM.throw_at(target, 3, 1)
+ H.vent_gas(src.loc)
+ qdel(H)
+
+ return
+/*
// expel the contents of the holder object, then delete it
// called when the holder exits the outlet
- proc/expel(var/obj/structure/disposalholder/H)
+/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H)
+ disposal_log("[src] \ref[src] expel(\ref[H])")
- flick("outlet-open", src)
- playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
- sleep(20) //wait until correct animation frame
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ flick("outlet-open", src)
+ playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
+ disposal_log("[src] (\ref[src]) registering timers.")
+ addtimer(CALLBACK(src, .proc/post_expel, H), 20, TIMER_UNIQUE|TIMER_CLIENT_TIME) // Sound + gas.
+ addtimer(CALLBACK(src, .proc/post_post_expel, H), 20 + 5, TIMER_UNIQUE|TIMER_CLIENT_TIME) // Actually throwing the items.
- if(H)
- for(var/atom/movable/AM in H)
- AM.forceMove(src.loc)
- AM.pipe_eject(dir)
- if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
- spawn(5)
- AM.throw_at(target, 3, 1)
- H.vent_gas(src.loc)
- qdel(H)
+/obj/structure/disposaloutlet/proc/post_expel(obj/structure/disposalholder/H)
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ disposal_log("[src] (\ref[src]) post_expel() timer fired.")
+ if(H)
+ H.vent_gas(src.loc)
+/obj/structure/disposaloutlet/proc/throw_object(atom/movable/thing)
+ disposal_log("[src] (\ref[src]) throw_object([thing] \ref[thing]) at [target] \ref[target] origin [loc] \ref[loc]")
+ thing.forceMove(loc)
+ thing.pipe_eject(dir)
+ if (!istype(thing, /mob/living/silicon/robot/drone))
+ thing.throw_at(target, 3, 1)
+
+/obj/structure/disposaloutlet/proc/post_post_expel(obj/structure/disposalholder/H)
+ disposal_log("[src] \ref[src] post_post_expel(\ref[H]), [H.contents.len] movables")
+ for(var/atom/movable/AM in H)
+ AM.forceMove(src.loc)
+ AM.pipe_eject(dir)
+ if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
+ AM.throw_at(target, 3, 1)
+ qdel(H)
+*/
+
+/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user)
+ if(!I || !user)
return
-
- attackby(var/obj/item/I, var/mob/user)
- if(!I || !user)
+ src.add_fingerprint(user)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ if(mode==0)
+ mode=1
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You remove the screws around the power connection."
+ return
+ else if(mode==1)
+ mode=0
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << "You attach the screws around the power connection."
+ return
+ else if(istype(I,/obj/item/weapon/weldingtool) && mode==1)
+ var/obj/item/weapon/weldingtool/W = I
+ if(W.remove_fuel(0,user))
+ playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
+ user << "You start slicing the floorweld off the disposal outlet."
+ if(do_after(user,20))
+ if(!src || !W.isOn()) return
+ user << "You slice the floorweld off the disposal outlet."
+ var/obj/structure/disposalconstruct/C = new (src.loc)
+ src.transfer_fingerprints_to(C)
+ C.ptype = 7 // 7 = outlet
+ C.update()
+ C.anchored = 1
+ C.density = 1
+ qdel(src)
+ return
+ else
+ user << "You need more welding fuel to complete this task."
return
- src.add_fingerprint(user)
- if(istype(I, /obj/item/weapon/screwdriver))
- if(mode==0)
- mode=1
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You remove the screws around the power connection."
- return
- else if(mode==1)
- mode=0
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You attach the screws around the power connection."
- return
- else if(istype(I,/obj/item/weapon/weldingtool) && mode==1)
- var/obj/item/weapon/weldingtool/W = I
- if(W.remove_fuel(0,user))
- playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "You start slicing the floorweld off the disposal outlet."
- if(do_after(user,20))
- if(!src || !W.isOn()) return
- user << "You sliced the floorweld off the disposal outlet."
- var/obj/structure/disposalconstruct/C = new (src.loc)
- src.transfer_fingerprints_to(C)
- C.ptype = 7 // 7 = outlet
- C.update()
- C.anchored = 1
- C.density = 1
- qdel(src)
- return
- else
- user << "You need more welding fuel to complete this task."
- return
// called when movable is expelled from a disposal pipe or outlet
// by default does nothing, override for special behaviour
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index c729c53bb4b..4b92a0c5818 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -318,7 +318,7 @@
var/turf/T = get_turf(src)
for(var/atom/movable/AM in contents)
AM.loc = T
- ..()
+ return ..()
/obj/item/device/destTagger
name = "destination tagger"
@@ -335,10 +335,10 @@
var/dat = "TagMaster 2.3 "
dat += " Current Selection: [currTag ? currTag : "None"] "
@@ -352,7 +352,7 @@
/obj/item/device/destTagger/Topic(href, href_list)
src.add_fingerprint(usr)
- if(href_list["nextTag"] && href_list["nextTag"] in tagger_locations)
+ if(href_list["nextTag"] && href_list["nextTag"] in SSdisposals.tagger_locations)
src.currTag = href_list["nextTag"]
if(href_list["nextTag"] == "CUSTOM")
var/dest = input("Please enter custom location.", "Location", src.currTag ? src.currTag : "None")
@@ -370,12 +370,11 @@
var/c_mode = 0
-/obj/machinery/disposal/deliveryChute/New()
- ..()
- spawn(5)
- trunk = locate() in src.loc
- if(trunk)
- trunk.linked = src // link the pipe trunk to self
+/obj/machinery/disposal/deliveryChute/Initialize()
+ . = ..()
+ trunk = locate() in src.loc
+ if(trunk)
+ trunk.linked = src // link the pipe trunk to self
/obj/machinery/disposal/deliveryChute/interact()
return
@@ -406,7 +405,7 @@
/obj/machinery/disposal/deliveryChute/flush()
flushing = 1
flick("intake-closing", src)
- var/obj/structure/disposalholder/H = new() // virtual holder object which actually
+ var/obj/disposalholder/H = new() // virtual holder object which actually
// travels through the pipes.
air_contents = new() // new empty gas resv.
@@ -462,4 +461,4 @@
/obj/machinery/disposal/deliveryChute/Destroy()
if(trunk)
trunk.linked = null
- ..()
+ return ..()
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index cd3b49b55cc..595fe11a0f4 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -21,8 +21,8 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
idle_power_usage = 30
active_power_usage = 2500
-/obj/machinery/r_n_d/circuit_imprinter/New()
- ..()
+/obj/machinery/r_n_d/circuit_imprinter/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index f5208bc45cd..9485a01754f 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -318,7 +318,7 @@ other types of metals and chemistry for reagents).
id = "plasmacutter"
req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3)
materials = list(DEFAULT_WALL_MATERIAL = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
- build_path = /obj/item/weapon/pickaxe/plasmacutter
+ build_path = /obj/item/weapon/gun/energy/plasmacutter
sort_string = "KAAAC"
/datum/design/item/weapon/mining/pick_diamond
@@ -1658,6 +1658,13 @@ CIRCUITS BELOW
build_path = /obj/item/weapon/circuitboard/ntnet_relay
sort_string = "WAAAA"
+/datum/design/circuit/crusher_base
+ name = "trash compactor"
+ id = "crusher_base"
+ req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 1, TECH_MAGNET = 1, TECH_MATERIALS = 3)
+ build_path = /obj/item/weapon/circuitboard/crusher
+ sort_string = "WAAAB"
+
/datum/design/circuit/aicore
name = "AI core"
id = "aicore"
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index 6ff6e7dd2ba..e5b5be93336 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -16,8 +16,8 @@ Note: Must be placed within 3 tiles of the R&D Console
idle_power_usage = 30
active_power_usage = 2500
-/obj/machinery/r_n_d/destructive_analyzer/New()
- ..()
+/obj/machinery/r_n_d/destructive_analyzer/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm
index e1a77f6bcc1..6bb7f37c49e 100644
--- a/code/modules/research/mechfab_designs.dm
+++ b/code/modules/research/mechfab_designs.dm
@@ -695,7 +695,7 @@
id = "plasmacutter_module"
req_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 3, TECH_PHORON = 4)
materials = list("glass" = 5250, DEFAULT_WALL_MATERIAL = 30000, "silver" = 5250, "phoron" = 7250)
- build_path = /obj/item/rig_module/device/plasmacutter
+ build_path = /obj/item/rig_module/mounted/plasmacutter
/datum/design/hardsuitmodules/jet_module
name = "hardsuit maneuvering jets"
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index 3db5b1f5257..6d85ad30ca3 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -77,8 +77,8 @@ var/global/list/obj/machinery/message_server/message_servers = list()
/obj/machinery/message_server/Destroy()
message_servers -= src
- ..()
- return
+
+ return ..()
/obj/machinery/message_server/proc/GenerateKey()
//Feel free to move to Helpers.
@@ -161,65 +161,6 @@ var/global/list/obj/machinery/message_server/message_servers = list()
else
icon_state = "server-on"
- return
-
-
-/datum/feedback_variable
- var/variable
- var/value
- var/details
-
-/datum/feedback_variable/New(var/param_variable,var/param_value = 0)
- variable = param_variable
- value = param_value
-
-/datum/feedback_variable/proc/inc(var/num = 1)
- if(isnum(value))
- value += num
- else
- value = text2num(value)
- if(isnum(value))
- value += num
- else
- value = num
-
-/datum/feedback_variable/proc/dec(var/num = 1)
- if(isnum(value))
- value -= num
- else
- value = text2num(value)
- if(isnum(value))
- value -= num
- else
- value = -num
-
-/datum/feedback_variable/proc/set_value(var/num)
- if(isnum(num))
- value = num
-
-/datum/feedback_variable/proc/get_value()
- return value
-
-/datum/feedback_variable/proc/get_variable()
- return variable
-
-/datum/feedback_variable/proc/set_details(var/text)
- if(istext(text))
- details = text
-
-/datum/feedback_variable/proc/add_details(var/text)
- if(istext(text))
- if(!details)
- details = text
- else
- details += " [text]"
-
-/datum/feedback_variable/proc/get_details()
- return details
-
-/datum/feedback_variable/proc/get_parsed()
- return list(variable,value,details)
-
var/obj/machinery/blackbox_recorder/blackbox
/obj/machinery/blackbox_recorder
@@ -231,21 +172,8 @@ var/obj/machinery/blackbox_recorder/blackbox
use_power = 1
idle_power_usage = 10
active_power_usage = 100
- var/list/messages = list() //Stores messages of non-standard frequencies
- var/list/messages_admin = list()
-
- var/list/msg_common = list()
- var/list/msg_science = list()
- var/list/msg_command = list()
- var/list/msg_medical = list()
- var/list/msg_engineering = list()
- var/list/msg_security = list()
- var/list/msg_deathsquad = list()
- var/list/msg_syndicate = list()
- var/list/msg_cargo = list()
- var/list/msg_service = list()
-
- var/list/datum/feedback_variable/feedback = new()
+
+ // Note: actual logging has been moved to SSfeedback.
//Only one can exist in the world!
/obj/machinery/blackbox_recorder/New()
@@ -257,147 +185,4 @@ var/obj/machinery/blackbox_recorder/blackbox
/obj/machinery/blackbox_recorder/Destroy()
feedback_set_details("blackbox_destroyed","true")
feedback_set("blackbox_destroyed",1)
- var/turf/T = locate(1,1,2)
- if(T)
- blackbox = null
- var/obj/machinery/blackbox_recorder/BR = new/obj/machinery/blackbox_recorder(T)
- BR.msg_common = msg_common
- BR.msg_science = msg_science
- BR.msg_command = msg_command
- BR.msg_medical = msg_medical
- BR.msg_engineering = msg_engineering
- BR.msg_security = msg_security
- BR.msg_deathsquad = msg_deathsquad
- BR.msg_syndicate = msg_syndicate
- BR.msg_cargo = msg_cargo
- BR.msg_service = msg_service
- BR.feedback = feedback
- BR.messages = messages
- BR.messages_admin = messages_admin
- if(blackbox != BR)
- blackbox = BR
- ..()
-
-/obj/machinery/blackbox_recorder/proc/find_feedback_datum(var/variable)
- for(var/datum/feedback_variable/FV in feedback)
- if(FV.get_variable() == variable)
- return FV
- var/datum/feedback_variable/FV = new(variable)
- feedback += FV
- return FV
-
-/obj/machinery/blackbox_recorder/proc/get_round_feedback()
- return feedback
-
-/obj/machinery/blackbox_recorder/proc/round_end_data_gathering()
-
- var/pda_msg_amt = 0
- var/rc_msg_amt = 0
-
- for(var/obj/machinery/message_server/MS in machines)
- if(MS.pda_msgs.len > pda_msg_amt)
- pda_msg_amt = MS.pda_msgs.len
- if(MS.rc_msgs.len > rc_msg_amt)
- rc_msg_amt = MS.rc_msgs.len
-
- feedback_set_details("radio_usage","")
-
- feedback_add_details("radio_usage","COM-[msg_common.len]")
- feedback_add_details("radio_usage","SCI-[msg_science.len]")
- feedback_add_details("radio_usage","HEA-[msg_command.len]")
- feedback_add_details("radio_usage","MED-[msg_medical.len]")
- feedback_add_details("radio_usage","ENG-[msg_engineering.len]")
- feedback_add_details("radio_usage","SEC-[msg_security.len]")
- feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]")
- feedback_add_details("radio_usage","SYN-[msg_syndicate.len]")
- feedback_add_details("radio_usage","CAR-[msg_cargo.len]")
- feedback_add_details("radio_usage","SRV-[msg_service.len]")
- feedback_add_details("radio_usage","OTH-[messages.len]")
- feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
- feedback_add_details("radio_usage","RC-[rc_msg_amt]")
-
-
- feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set.
-
-
-//This proc is only to be called at round end.
-/obj/machinery/blackbox_recorder/proc/save_all_data_to_sql()
- if(!feedback)
- return
-
- if (!config.sql_enabled || !config.sql_stats)
- return
-
- round_end_data_gathering() //round_end time logging and some other data processing
- establish_db_connection(dbcon)
- if(!dbcon.IsConnected())
- return
-
- for(var/datum/feedback_variable/FV in feedback)
- var/sql = "INSERT INTO ss13_feedback VALUES (null, Now(), \"[game_id]\", \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")"
- var/DBQuery/query_insert = dbcon.NewQuery(sql)
- query_insert.Execute()
-
-// Sanitize inputs to avoid SQL injection attacks
-proc/sql_sanitize_text(var/text)
- text = replacetext(text, "'", "''")
- text = replacetext(text, ";", "")
- text = replacetext(text, "&", "")
- return text
-
-proc/feedback_set(var/variable,var/value)
- if(!blackbox) return
-
- variable = sql_sanitize_text(variable)
-
- var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
-
- if(!FV) return
-
- FV.set_value(value)
-
-proc/feedback_inc(var/variable,var/value)
- if(!blackbox) return
-
- variable = sql_sanitize_text(variable)
-
- var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
-
- if(!FV) return
-
- FV.inc(value)
-
-proc/feedback_dec(var/variable,var/value)
- if(!blackbox) return
-
- variable = sql_sanitize_text(variable)
-
- var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
-
- if(!FV) return
-
- FV.dec(value)
-
-proc/feedback_set_details(var/variable,var/details)
- if(!blackbox) return
-
- variable = sql_sanitize_text(variable)
- details = sql_sanitize_text(details)
-
- var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
-
- if(!FV) return
-
- FV.set_details(details)
-
-proc/feedback_add_details(var/variable,var/details)
- if(!blackbox) return
-
- variable = sql_sanitize_text(variable)
- details = sql_sanitize_text(details)
-
- var/datum/feedback_variable/FV = blackbox.find_feedback_datum(variable)
-
- if(!FV) return
-
- FV.add_details(details)
+ return ..()
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index b27db2ac745..997439e3b24 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -16,8 +16,8 @@
var/mat_efficiency = 1
var/speed = 1
-/obj/machinery/r_n_d/protolathe/New()
- ..()
+/obj/machinery/r_n_d/protolathe/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/protolathe(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 238d20478f8..4c56b259082 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -118,15 +118,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
C.files.AddDesign2Known(D)
C.files.RefreshResearch()
-/obj/machinery/computer/rdconsole/New()
- ..()
+/obj/machinery/computer/rdconsole/Initialize()
+ . = ..()
files = new /datum/research(src) //Setup the research data holder.
if(!id)
for(var/obj/machinery/r_n_d/server/centcom/S in machines)
- S.initialize()
+ S.setup()
break
-
-/obj/machinery/computer/rdconsole/initialize()
SyncRDevices()
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 63165e68a60..78d0ffb6b78 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -14,19 +14,9 @@
var/delay = 10
req_access = list(access_rd) //Only the R&D can change server settings.
-/obj/machinery/r_n_d/server/New()
- ..()
- component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- RefreshParts()
- initialize();
-
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
- ..()
+ return ..()
/obj/machinery/r_n_d/server/RefreshParts()
var/tot_rating = 0
@@ -34,7 +24,18 @@
tot_rating += SP.rating
idle_power_usage /= max(1, tot_rating)
-/obj/machinery/r_n_d/server/initialize()
+/obj/machinery/r_n_d/server/Initialize()
+ . = ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
+ component_parts += new /obj/item/stack/cable_coil(src)
+ component_parts += new /obj/item/stack/cable_coil(src)
+ RefreshParts()
+
+ setup()
+
+/obj/machinery/r_n_d/server/proc/setup()
if(!files)
files = new /datum/research(src)
var/list/temp_list
@@ -123,7 +124,7 @@
name = "Central R&D Database"
server_id = -1
-/obj/machinery/r_n_d/server/centcom/initialize()
+/obj/machinery/r_n_d/server/centcom/setup()
..()
var/list/no_id_servers = list()
var/list/server_ids = list()
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm
index e01088e1faa..ca1884b6156 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm
@@ -107,12 +107,17 @@
/obj/structure/boulder/Bumped(AM)
. = ..()
+
if(istype(AM,/mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
- attackby(H.l_hand,H)
+ var/obj/item/weapon/pickaxe/P = H.l_hand
+ if(P.autodrill)
+ attackby(H.l_hand,H)
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
- attackby(H.r_hand,H)
+ var/obj/item/weapon/pickaxe/P = H.r_hand
+ if(P.autodrill)
+ attackby(H.r_hand,H)
else if(istype(AM,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = AM
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
index 081683b0443..110aeda01b6 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
@@ -31,6 +31,6 @@
new /obj/item/weapon/material/shard(src.loc)
if(prob(25))
new /obj/item/weapon/material/shard(src.loc)
- ..()
+ return ..()
//todo: laser_act
diff --git a/code/modules/research/xenoarchaeology/artifact/effect.dm b/code/modules/research/xenoarchaeology/artifact/effect.dm
index 23bb649ac78..07b6c4cb181 100644
--- a/code/modules/research/xenoarchaeology/artifact/effect.dm
+++ b/code/modules/research/xenoarchaeology/artifact/effect.dm
@@ -71,7 +71,7 @@
/datum/artifact_effect/proc/DoEffectPulse(var/atom/holder)
/datum/artifact_effect/proc/UpdateMove()
-/datum/artifact_effect/proc/process()
+/datum/artifact_effect/process()
if(chargelevel < chargelevelmax)
chargelevel++
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index 0a709dbf833..00d1106f145 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -323,7 +323,7 @@
apply_material_decorations = 0
if(23)
apply_prefix = 0
- new_item = getFromPool(/obj/item/stack/rods, src.loc)
+ new_item = new /obj/item/stack/rods(src.loc)
apply_image_decorations = 0
apply_material_decorations = 0
if(24)
diff --git a/code/modules/research/xenoarchaeology/finds/finds_special.dm b/code/modules/research/xenoarchaeology/finds/finds_special.dm
index 359ba673603..75be4846a85 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_special.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_special.dm
@@ -7,14 +7,16 @@
/obj/item/weapon/reagent_containers/glass/replenishing/New()
..()
- processing_objects.Add(src)
+ START_PROCESSING(SSprocessing, src)
spawning_id = pick("blood","holywater","lube","stoxin","ethanol","ice","glycerol","fuel","cleaner")
/obj/item/weapon/reagent_containers/glass/replenishing/process()
reagents.add_reagent(spawning_id, 0.3)
-
+/obj/item/weapon/reagent_containers/glass/replenishing/Destroy()
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
//a talking gas mask!
/obj/item/clothing/mask/gas/poltergeist
@@ -23,11 +25,11 @@
var/max_stored_messages = 100
/obj/item/clothing/mask/gas/poltergeist/New()
- processing_objects.Add(src)
+ START_PROCESSING(SSprocessing, src)
listening_objects += src
/obj/item/clothing/mask/gas/poltergeist/Destroy()
- processing_objects.Remove(src)
+ STOP_PROCESSING(SSprocessing, src)
listening_objects -= src
return ..()
diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
index 58cfdbb0311..98aad243ece 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm
@@ -22,7 +22,7 @@
if(holder_atom)
processing_objects.Add(src)
-/datum/talking_atom/proc/process()
+/datum/talking_atom/process()
if(!holder_atom)
processing_objects.Remove(src)
diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm
index 535a0b4f073..f621cb21592 100644
--- a/code/modules/research/xenoarchaeology/geosample.dm
+++ b/code/modules/research/xenoarchaeology/geosample.dm
@@ -105,15 +105,15 @@
artifact_distance = rand()
artifact_id = container.artifact_find.artifact_id
else
- if(master_controller) //Sanity check due to runtimes ~Z
- for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
+ if (SSxenoarch) //Sanity check due to runtimes ~Z
+ for(var/turf/simulated/mineral/T in SSxenoarch.artifact_spawning_turfs)
if(T.artifact_find)
var/cur_dist = get_dist(container, T) * 2
if( (artifact_distance < 0 || cur_dist < artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
artifact_distance = cur_dist + rand() * 2 - 1
artifact_id = T.artifact_find.artifact_id
else
- master_controller.artifact_spawning_turfs.Remove(T)
+ SSxenoarch.artifact_spawning_turfs.Remove(T)
/*
#undef FIND_PLANT
diff --git a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
index 117a3040715..eccaba7b61d 100644
--- a/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
+++ b/code/modules/research/xenoarchaeology/tools/ano_device_battery.dm
@@ -192,7 +192,7 @@
/obj/item/weapon/anodevice/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/weapon/anodevice/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
if (!istype(M))
diff --git a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
index ab738d6ec34..b971f75cc61 100644
--- a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
+++ b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
@@ -315,7 +315,7 @@
/obj/machinery/suspension_gen/Destroy()
//safety checks: clear the field and drop anything it's holding
deactivate()
- ..()
+ return ..()
/obj/machinery/suspension_gen/verb/rotate_ccw()
set src in view(1)
@@ -347,4 +347,4 @@
/obj/effect/suspension_field/Destroy()
for(var/obj/I in src)
I.loc = src.loc
- ..()
+ return ..()
diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
index 6f79f8d8ba8..1369b190c8c 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
@@ -12,7 +12,8 @@
var/last_scan_time = 0
var/scan_delay = 25
-/obj/item/device/ano_scanner/initialize()
+/obj/item/device/ano_scanner/Initialize()
+ . = ..()
scan()
/obj/item/device/ano_scanner/attack_self(var/mob/user as mob)
@@ -38,8 +39,8 @@
last_scan_time = world.time
nearest_artifact_distance = -1
var/turf/cur_turf = get_turf(src)
- if(master_controller) //Sanity check due to runtimes ~Z
- for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
+ if (SSxenoarch) //Sanity check due to runtimes ~Z
+ for(var/turf/simulated/mineral/T in SSxenoarch.artifact_spawning_turfs)
if(T.artifact_find)
if(T.z == cur_turf.z)
var/cur_dist = get_dist(cur_turf, T) * 2
@@ -47,5 +48,5 @@
nearest_artifact_distance = cur_dist + rand() * 2 - 1
nearest_artifact_id = T.artifact_find.artifact_id
else
- master_controller.artifact_spawning_turfs.Remove(T)
+ SSxenoarch.artifact_spawning_turfs.Remove(T)
cur_turf.visible_message("[src] clicks. ")
diff --git a/code/modules/research/xenoarchaeology/tools/tools_locater.dm b/code/modules/research/xenoarchaeology/tools/tools_locater.dm
index fb6adf795ac..e3c1421e538 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_locater.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_locater.dm
@@ -18,7 +18,7 @@
/obj/item/device/beacon_locator/Destroy()
processing_objects.Remove(src)
- ..()
+ return ..()
/obj/item/device/beacon_locator/process()
if(target_radio)
diff --git a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm
index e8bedc09878..147fbf436a5 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm
@@ -8,11 +8,17 @@
icon_state = "pick_brush"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "Thick metallic wires for clearing away dust and loose scree (1 centimetre excavation depth)."
excavation_amount = 0.5
drill_sound = 'sound/weapons/thudswoosh.ogg'
drill_verb = "brushing"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/one_pick
name = "1/6 pick"
@@ -20,11 +26,17 @@
icon_state = "pick1"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "A miniature excavation tool for precise digging (2 centimetre excavation depth)."
excavation_amount = 1
drill_sound = 'sound/items/Screwdriver.ogg'
drill_verb = "delicately picking"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/two_pick
name = "1/3 pick"
@@ -32,11 +44,17 @@
icon_state = "pick2"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "A miniature excavation tool for precise digging (4 centimetre excavation depth)."
excavation_amount = 2
drill_sound = 'sound/items/Screwdriver.ogg'
drill_verb = "delicately picking"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/three_pick
name = "1/2 pick"
@@ -44,11 +62,17 @@
icon_state = "pick3"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "A miniature excavation tool for precise digging (6 centimetre excavation depth)."
excavation_amount = 3
drill_sound = 'sound/items/Screwdriver.ogg'
drill_verb = "delicately picking"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/four_pick
name = "2/3 pick"
@@ -56,11 +80,17 @@
icon_state = "pick4"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "A miniature excavation tool for precise digging (8 centimetre excavation depth)."
excavation_amount = 4
drill_sound = 'sound/items/Screwdriver.ogg'
drill_verb = "delicately picking"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/five_pick
name = "5/6 pick"
@@ -68,11 +98,17 @@
icon_state = "pick5"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "A miniature excavation tool for precise digging (10 centimetre excavation depth)."
excavation_amount = 5
drill_sound = 'sound/items/Screwdriver.ogg'
drill_verb = "delicately picking"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/six_pick
name = "1/1 pick"
@@ -80,23 +116,35 @@
icon_state = "pick6"
item_state = "syringe_0"
digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 2.0
desc = "A miniature excavation tool for precise digging (12 centimetre excavation depth)."
excavation_amount = 6
drill_sound = 'sound/items/Screwdriver.ogg'
drill_verb = "delicately picking"
w_class = 2
+ can_wield = 0
+
+ action_button_name = null
/obj/item/weapon/pickaxe/hand
name = "hand pickaxe"
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "pick_hand"
item_state = "syringe_0"
- digspeed = 30
+ digspeed = 20
+ digspeed_unwielded = 20
+ digspeed_wielded = 20
+ force = 10.0
desc = "A smaller, more precise version of the pickaxe (30 centimetre excavation depth)."
excavation_amount = 15
drill_sound = 'sound/items/Crowbar.ogg'
drill_verb = "clearing"
w_class = 3
+ can_wield = 0
+
+ action_button_name = null
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Pack for holding pickaxes
diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm
index 87c6fa5ea36..dead30e4a7b 100644
--- a/code/modules/scripting/Implementations/Telecomms.dm
+++ b/code/modules/scripting/Implementations/Telecomms.dm
@@ -258,7 +258,7 @@ datum/signal
freq = text2num(freq)
newsign.frequency = freq
- var/datum/radio_frequency/connection = radio_controller.return_frequency(freq)
+ var/datum/radio_frequency/connection = SSradio.return_frequency(freq)
newsign.data["connection"] = connection
diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index c05b4b8fa25..1631a34fa33 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -167,7 +167,7 @@
/obj/machinery/keycard_auth/proc/is_ert_blocked()
if(config.ert_admin_call_only) return 1
- return ticker.mode && ticker.mode.ert_disabled
+ return SSticker.mode && SSticker.mode.ert_disabled
var/global/maint_all_access = 0
diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm
index ca6f503d7f3..1d51ee00054 100644
--- a/code/modules/security levels/security levels.dm
+++ b/code/modules/security levels/security levels.dm
@@ -25,24 +25,18 @@
if(SEC_LEVEL_GREEN)
security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green.")
security_level = SEC_LEVEL_GREEN
- if (nl_ctrl.manual_override == 2) // Disable override if it was set by code-red.
- nl_ctrl.manual_override = 0
- nl_ctrl.doWork(FALSE) // Update night lighting if it was turned off by red alert.
+ SSnightlight.end_temp_disable()
if(SEC_LEVEL_BLUE)
if(security_level < SEC_LEVEL_BLUE)
security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue.")
else
security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue.")
security_level = SEC_LEVEL_BLUE
- if (nl_ctrl.manual_override == 2)
- nl_ctrl.manual_override = 0
- nl_ctrl.doWork(FALSE) // Update night lighting if it was turned off by red alert.
+ SSnightlight.end_temp_disable()
if(SEC_LEVEL_RED)
if(security_level < SEC_LEVEL_RED)
security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Security level elevated to red!")
- nl_ctrl.deactivate(0) // Disable nightmode globally
- if (!nl_ctrl.manual_override)
- nl_ctrl.manual_override = 2
+ SSnightlight.temp_disable()
else
security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!")
security_level = SEC_LEVEL_RED
@@ -53,6 +47,7 @@
if(SEC_LEVEL_DELTA)
security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!", new_sound = 'sound/effects/siren.ogg')
security_level = SEC_LEVEL_DELTA
+ SSnightlight.temp_disable()
var/newlevel = get_security_level()
for(var/obj/machinery/firealarm/FA in machines)
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 7ff46d2b476..5481a951b87 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -36,7 +36,7 @@
opacity = 0
density = 0
update_nearby_tiles()
- ..()
+ return ..()
/obj/machinery/shield/CanPass(atom/movable/mover, turf/target, height, air_group)
if(!height || air_group) return 0
@@ -134,7 +134,7 @@
/obj/machinery/shieldgen/Destroy()
collapse_shields()
- ..()
+ return ..()
/obj/machinery/shieldgen/proc/shields_up()
if(active) return 0 //If it's already turned on, how did this get called?
diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm
index 04b471182b6..4d01f0bfe2a 100644
--- a/code/modules/shieldgen/energy_field.dm
+++ b/code/modules/shieldgen/energy_field.dm
@@ -19,7 +19,7 @@
/obj/effect/energy_field/Destroy()
update_nearby_tiles()
- ..()
+ return ..()
/obj/effect/energy_field/ex_act(var/severity)
Stress(0.5 + severity)
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index 696caa5ed47..9a034a42076 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -211,7 +211,7 @@
src.cleanup(2)
src.cleanup(4)
src.cleanup(8)
- ..()
+ return ..()
/obj/machinery/shieldwallgen/bullet_act(var/obj/item/projectile/Proj)
storedpower -= 400 * Proj.get_structure_damage()
@@ -256,7 +256,7 @@
/obj/machinery/shieldwall/Destroy()
update_nearby_tiles()
- ..()
+ return ..()
/obj/machinery/shieldwall/attack_hand(mob/user as mob)
return
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 67941303eab..66a35b0d2b0 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -30,20 +30,19 @@
var/energy_conversion_rate = 0.0002 //how many renwicks per watt?
use_power = 0 //doesn't use APC power
-/obj/machinery/shield_gen/New()
- spawn(10)
- for(var/obj/machinery/shield_capacitor/possible_cap in range(1, src))
- if(get_dir(possible_cap, src) == possible_cap.dir)
- owned_capacitor = possible_cap
- break
- field = new/list()
- ..()
+/obj/machinery/shield_gen/Initialize()
+ for(var/obj/machinery/shield_capacitor/possible_cap in range(1, src))
+ if(get_dir(possible_cap, src) == possible_cap.dir)
+ owned_capacitor = possible_cap
+ break
+ field = list()
+ . = ..()
/obj/machinery/shield_gen/Destroy()
for(var/obj/effect/energy_field/D in field)
field.Remove(D)
D.loc = null
- ..()
+ return ..()
/obj/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user)
if(prob(75))
diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm
index bed4cccf5dd..d92adfa2d51 100644
--- a/code/modules/shuttles/escape_pods.dm
+++ b/code/modules/shuttles/escape_pods.dm
@@ -75,8 +75,8 @@
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth
name = "escape pod berth controller"
-/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/initialize()
- ..()
+/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/Initialize()
+ . = ..()
docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src)
program = docking_program
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 03942ee5f05..fb0724de611 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -6,6 +6,8 @@
/datum/shuttle
var/warmup_time = 0
var/moving_status = SHUTTLE_IDLE
+ var/lift = 0 //To make zlevel stuff work right
+ var/lift_lowest_zlevel = 1 //At least 1 unless you always want open floor
var/docking_controller_tag //tag of the controller used to coordinate docking
var/datum/computer/file/embedded_program/docking/docking_controller //the controller itself. (micro-controller, not game controller)
@@ -105,7 +107,7 @@
for(var/atom/movable/AM as mob|obj in T)
AM.Move(D)
if(istype(T, /turf/simulated))
- qdel(T)
+ T.ChangeTurf(/turf/space)
for(var/mob/living/carbon/bug in destination)
bug.gib()
diff --git a/code/modules/shuttles/shuttle_arrival.dm b/code/modules/shuttles/shuttle_arrival.dm
new file mode 100644
index 00000000000..d07a7c34d74
--- /dev/null
+++ b/code/modules/shuttles/shuttle_arrival.dm
@@ -0,0 +1,54 @@
+/datum/shuttle/ferry/arrival
+
+/datum/shuttle/ferry/arrival/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction)
+ if(isnull(location))
+ return
+
+ if(!destination)
+ destination = get_location_area(!location)
+ if(!departing)
+ departing = get_location_area(location)
+
+ direction = !location
+
+ if(moving_status != SHUTTLE_IDLE) return
+
+ //it would be cool to play a sound here
+ moving_status = SHUTTLE_WARMUP
+ spawn(warmup_time*10)
+ if (moving_status == SHUTTLE_IDLE)
+ return //someone cancelled the launch
+
+ if (at_station() && forbidden_atoms_check())
+ //cancel the launch because of forbidden atoms. announce over supply channel?
+ moving_status = SHUTTLE_IDLE
+ global_announcer.autosay("Unacceptable items detected aboard the arrivals shuttle. Launch attempt failed. Restarting launch in one minute.", "Arrivals Shuttle Oversight")
+ SSarrivals.set_launch_countdown(60)
+ return
+
+ if (!forbidden_atoms_check() && !at_station())
+ //cancel the launch because of there's no one on the shuttle.
+ moving_status = SHUTTLE_IDLE
+ return
+
+ if(!at_station())
+ global_announcer.autosay("Central Command Arrivals shuttle inbound to NSS Aurora II. ETA: one minute.", "Arrivals Shuttle Oversight")
+ arrive_time = world.time + travel_time*10
+ moving_status = SHUTTLE_INTRANSIT
+ move(departing, interim, direction)
+
+
+ while (world.time < arrive_time)
+ sleep(5)
+
+ move(interim, destination, direction)
+ moving_status = SHUTTLE_IDLE
+
+/datum/shuttle/ferry/arrival/arrived()
+ SSarrivals.shuttle_arrived()
+
+/datum/shuttle/ferry/arrival/proc/forbidden_atoms_check()
+ return SSarrivals.forbidden_atoms_check(get_location_area())
+
+/datum/shuttle/ferry/arrival/proc/at_station()
+ return (!location)
diff --git a/code/modules/shuttles/shuttle_ferry.dm b/code/modules/shuttles/shuttle_ferry.dm
index 5d6663f3b57..9024b0dddfb 100644
--- a/code/modules/shuttles/shuttle_ferry.dm
+++ b/code/modules/shuttles/shuttle_ferry.dm
@@ -67,7 +67,7 @@
Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well.
Doing so will ensure that multiple jumps cannot be initiated in parallel.
*/
-/datum/shuttle/ferry/proc/process()
+/datum/shuttle/ferry/process()
switch(process_state)
if (WAIT_LAUNCH)
if (skip_docking_checks() || docking_controller.can_launch())
diff --git a/code/modules/shuttles/shuttle_supply.dm b/code/modules/shuttles/shuttle_supply.dm
index c4122434e76..cfcd6c4e6c2 100644
--- a/code/modules/shuttles/shuttle_supply.dm
+++ b/code/modules/shuttles/shuttle_supply.dm
@@ -27,7 +27,7 @@
return
if (!at_station()) //at centcom
- supply_controller.buy()
+ SScargo.buy()
//We pretend it's a long_jump by making the shuttle stay at centcom for the "in-transit" period.
var/area/away_area = get_location_area(away_location)
@@ -38,7 +38,7 @@
move(origin, away_area)
//wait ETA here.
- arrive_time = world.time + supply_controller.movetime
+ arrive_time = world.time + SScargo.movetime
while (world.time <= arrive_time)
sleep(5)
@@ -52,14 +52,14 @@
moving_status = SHUTTLE_IDLE
if (!at_station()) //at centcom
- supply_controller.sell()
+ SScargo.sell()
// returns 1 if the supply shuttle should be prevented from moving because it contains forbidden atoms
/datum/shuttle/ferry/supply/proc/forbidden_atoms_check()
if (!at_station())
return 0 //if badmins want to send mobs or a nuke on the supply shuttle from centcom we don't care
- return supply_controller.forbidden_atoms_check(get_location_area())
+ return SScargo.forbidden_atoms_check(get_location_area())
/datum/shuttle/ferry/supply/proc/at_station()
return (!location)
diff --git a/code/modules/spells/aoe_turf/charge.dm b/code/modules/spells/aoe_turf/charge.dm
index 3b13a4e6057..05e2258df4a 100644
--- a/code/modules/spells/aoe_turf/charge.dm
+++ b/code/modules/spells/aoe_turf/charge.dm
@@ -23,7 +23,7 @@
cast_charge(A)
/spell/aoe_turf/charge/proc/mob_charge(var/mob/living/M)
- if(M.spell_list.len != 0)
+ if(LAZYLEN(M.spell_list))
for(var/spell/S in M.spell_list)
if(!istype(S, /spell/aoe_turf/charge))
S.charge_counter = S.charge_max
diff --git a/code/modules/spells/aoe_turf/conjure/grove.dm b/code/modules/spells/aoe_turf/conjure/grove.dm
index b70b5f77695..da17a885b0c 100644
--- a/code/modules/spells/aoe_turf/conjure/grove.dm
+++ b/code/modules/spells/aoe_turf/conjure/grove.dm
@@ -22,7 +22,7 @@
if(seed_type)
seed = new seed_type()
else
- seed = plant_controller.create_random_seed(1)
+ seed = SSplants.create_random_seed(1)
/spell/aoe_turf/conjure/grove/before_cast()
var/turf/T = get_turf(holder)
diff --git a/code/modules/spells/general/mark_recall.dm b/code/modules/spells/general/mark_recall.dm
index 1bf2f727c39..f31a62b1310 100644
--- a/code/modules/spells/general/mark_recall.dm
+++ b/code/modules/spells/general/mark_recall.dm
@@ -66,7 +66,7 @@
/obj/effect/decal/wizard_mark/Destroy()
spell.mark = null //dereference pls.
spell = null
- ..()
+ return ..()
/obj/effect/decal/wizard_mark/attack_hand(var/mob/user)
if(user == spell.holder)
diff --git a/code/modules/spells/hand/hand_item.dm b/code/modules/spells/hand/hand_item.dm
index 91dd67c7361..93b87a604cc 100644
--- a/code/modules/spells/hand/hand_item.dm
+++ b/code/modules/spells/hand/hand_item.dm
@@ -53,4 +53,4 @@ Basically: I can use it to target things where I click. I can then pass these ta
/obj/item/magic_hand/Destroy() //better save than sorry.
hand_spell = null
- ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm
index 657789dbe5e..0451ce3dc5a 100644
--- a/code/modules/spells/spell_code.dm
+++ b/code/modules/spells/spell_code.dm
@@ -66,7 +66,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
//still_recharging_msg = "[name] is still recharging. "
charge_counter = charge_max
-/spell/proc/process()
+/spell/process()
if(processing)
return
processing = 1
diff --git a/code/modules/spells/spell_projectile.dm b/code/modules/spells/spell_projectile.dm
index 6afc7b5afdc..f9c02f50813 100644
--- a/code/modules/spells/spell_projectile.dm
+++ b/code/modules/spells/spell_projectile.dm
@@ -26,14 +26,16 @@
/obj/item/projectile/spell_projectile/before_move()
if(proj_trail && src && src.loc) //pretty trails
- var/obj/effect/overlay/trail = getFromPool(/obj/effect/overlay, src.loc)
+ var/obj/effect/overlay/trail = new /obj/effect/overlay(src.loc)
trails += trail
trail.icon = proj_trail_icon
trail.icon_state = proj_trail_icon_state
trail.density = 0
- spawn(proj_trail_lifespan)
- trails -= trail
- qdel(trail)
+ addtimer(CALLBACK(src, .proc/post_trail, trail), proj_trail_lifespan)
+
+/obj/item/projectile/spell_projectile/proc/post_trail(obj/effect/overlay/trail)
+ trails -= trail
+ qdel(trail)
/obj/item/projectile/spell_projectile/proc/prox_cast(var/list/targets)
if(loc)
diff --git a/code/modules/spells/spell_verb.dm b/code/modules/spells/spell_verb.dm
index d66818216a6..d764efe6c89 100644
--- a/code/modules/spells/spell_verb.dm
+++ b/code/modules/spells/spell_verb.dm
@@ -3,8 +3,8 @@
set name = "Cast"
set desc = "Cast a spell"
- if(!spell_list.len)
+ if(!LAZYLEN(spell_list))
src.verbs -= /mob/proc/cast_spell
return
- spell.perform(usr)
\ No newline at end of file
+ spell.perform(usr)
diff --git a/code/modules/spells/spells.dm b/code/modules/spells/spells.dm
index 5e378f46a39..d5a8217f61a 100644
--- a/code/modules/spells/spells.dm
+++ b/code/modules/spells/spells.dm
@@ -16,7 +16,7 @@
/mob/Stat()
. = ..()
- if(. && spell_list && spell_list.len)
+ if(. && LAZYLEN(spell_list))
for(var/spell/S in spell_list)
if((!S.connected_button) || !statpanel(S.panel))
continue //Not showing the noclothes spell
@@ -40,7 +40,7 @@
if(spell_masters.len)
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
if(spell_master.type == master_type)
- spell_list.Add(spell_to_add)
+ LAZYADD(spell_list, spell_to_add)
spell_master.add_spell(spell_to_add)
return 1
@@ -52,7 +52,7 @@
if(spell_base)
new_spell_master.icon_state = spell_base
spell_masters.Add(new_spell_master)
- spell_list.Add(spell_to_add)
+ LAZYADD(spell_list, spell_to_add)
if(mind)
if(!mind.learned_spells)
mind.learned_spells = list()
@@ -72,7 +72,7 @@
if(mind && mind.learned_spells)
mind.learned_spells.Remove(spell_to_remove)
- spell_list.Remove(spell_to_remove)
+ LAZYREMOVE(spell_list, spell_to_remove)
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
spell_master.remove_spell(spell_to_remove)
return 1
diff --git a/code/modules/spells/targeted/mind_transfer.dm b/code/modules/spells/targeted/mind_transfer.dm
index 05aa83aa678..ad6dc717fd3 100644
--- a/code/modules/spells/targeted/mind_transfer.dm
+++ b/code/modules/spells/targeted/mind_transfer.dm
@@ -50,7 +50,7 @@
victim.verbs -= V
var/mob/dead/observer/ghost = victim.ghostize(0)
- ghost.spell_list += victim.spell_list//If they have spells, transfer them. Now we basically have a backup mob.
+ LAZYADD(ghost.spell_list, victim.spell_list) //If they have spells, transfer them. Now we basically have a backup mob.
caster.mind.transfer_to(victim)
for(var/spell/S in victim.spell_list)
@@ -68,7 +68,8 @@
caster.key = ghost.key //have to transfer the key since the mind was not active
for(var/spell/S in ghost.spell_list)
caster.add_spell(S)
- ghost.spell_list = list()
+
+ LAZYCLEARLIST(ghost.spell_list)
if(caster.mind.special_verbs.len)//If they had any special verbs, we add them here.
for(var/V in caster.mind.special_verbs)
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index bf08fa1d8c3..7781ebbd9cc 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -360,6 +360,8 @@
/obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj)
+ if(!AM.simulated)
+ return
if(istype(AM, /obj/effect))
return
if(istype(AM, /mob/living))
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 2d66fa43b33..ae0587fdee9 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -55,7 +55,7 @@
/datum/surgery_step/fix_dead_tissue //Debridement
priority = 2
allowed_tools = list(
- /obj/item/weapon/scalpel = 100,
+ /obj/item/weapon/scalpel = 100,
/obj/item/weapon/material/knife = 75,
/obj/item/weapon/material/shard = 50
)
@@ -173,7 +173,7 @@
allowed_tools = list(
/obj/item/weapon/weldingtool = 80,
/obj/item/weapon/circular_saw = 60,
- /obj/item/weapon/pickaxe/plasmacutter = 100
+ /obj/item/weapon/gun/energy/plasmacutter = 100
)
can_infect = 0
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index 12a1a449a2c..e625018e55d 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -121,7 +121,7 @@
/datum/surgery_step/robotics/repair_brute
allowed_tools = list(
/obj/item/weapon/weldingtool = 100,
- /obj/item/weapon/pickaxe/plasmacutter = 50
+ /obj/item/weapon/gun/energy/plasmacutter = 50
)
min_duration = 50
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index d9951141d5a..89f3cb27e02 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -113,22 +113,6 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
//not returning 1 so people and borgs can still use things, like syringes and hyposprays, while their patients are on the table
return 0
-proc/sort_surgeries()
- var/gap = surgery_steps.len
- var/swapped = 1
- while (gap > 1 || swapped)
- swapped = 0
- if(gap > 1)
- gap = round(gap / 1.247330950103979)
- if(gap < 1)
- gap = 1
- for(var/i = 1; gap + i <= surgery_steps.len; i++)
- var/datum/surgery_step/l = surgery_steps[i] //Fucking hate
- var/datum/surgery_step/r = surgery_steps[gap+i] //how lists work here
- if(l.priority < r.priority)
- surgery_steps.Swap(i, gap + i)
- swapped = 1
-
/datum/surgery_status/
var/eyes = 0
var/face = 0
diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm
index a839bb15d7e..43c39a0d530 100644
--- a/code/modules/tables/tables.dm
+++ b/code/modules/tables/tables.dm
@@ -63,8 +63,8 @@
take_damage(rand(50,150))
-/obj/structure/table/initialize()
- ..()
+/obj/structure/table/Initialize()
+ . = ..()
// One table per turf.
for(var/obj/structure/table/T in loc)
@@ -88,7 +88,7 @@
update_connections(1) // Update tables around us to ignore us (material=null forces no connections)
for(var/obj/structure/table/T in oview(src, 1))
T.update_icon()
- ..()
+ return ..()
/obj/structure/table/examine(mob/user)
. = ..()
@@ -305,14 +305,14 @@
/obj/structure/table/update_icon()
if(flipped != 1)
icon_state = "blank"
- overlays.Cut()
+ cut_overlays()
var/image/I
// Base frame shape. Mostly done for glass/diamond tables, where this is visible.
for(var/i = 1 to 4)
I = image(icon, dir = 1<<(i-1), icon_state = connections[i])
- overlays += I
+ add_overlay(I)
// Standard table image
if(material)
@@ -320,7 +320,7 @@
I = image(icon, "[material.icon_base]_[connections[i]]", dir = 1<<(i-1))
if(material.icon_colour) I.color = material.icon_colour
I.alpha = 255 * material.opacity
- overlays += I
+ add_overlay(I)
// Reinforcements
if(reinforced)
@@ -328,14 +328,14 @@
I = image(icon, "[reinforced.icon_reinf]_[connections[i]]", dir = 1<<(i-1))
I.color = reinforced.icon_colour
I.alpha = 255 * reinforced.opacity
- overlays += I
+ add_overlay(I)
if(carpeted)
for(var/i = 1 to 4)
I = image(icon, "carpet_[connections[i]]", dir = 1<<(i-1))
- overlays += I
+ add_overlay(I)
else
- overlays.Cut()
+ cut_overlays()
var/type = 0
var/tabledirs = 0
for(var/direction in list(turn(dir,90), turn(dir,-90)) )
@@ -356,7 +356,7 @@
var/image/I = image(icon, "[material.icon_base]_flip[type]")
I.color = material.icon_colour
I.alpha = 255 * material.opacity
- overlays += I
+ add_overlay(I)
name = "[material.display_name] table"
else
name = "table frame"
@@ -365,10 +365,10 @@
var/image/I = image(icon, "[reinforced.icon_reinf]_flip[type]")
I.color = reinforced.icon_colour
I.alpha = 255 * reinforced.opacity
- overlays += I
+ add_overlay(I)
if(carpeted)
- overlays += "carpet_flip[type]"
+ add_overlay("carpet_flip[type]")
// set propagate if you're updating a table that should update tables around it too, for example if it's a new table or something important has changed (like material).
/obj/structure/table/proc/update_connections(propagate=0)
diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm
index a90e3eeb8a2..6d127061962 100644
--- a/code/modules/tables/update_triggers.dm
+++ b/code/modules/tables/update_triggers.dm
@@ -11,7 +11,7 @@
T.update_connections()
T.update_icon()
loc=oldloc
- ..()
+ return ..()
/obj/structure/window/Move()
var/oldloc = loc
@@ -19,4 +19,4 @@
if(loc != oldloc)
for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1))
T.update_connections()
- T.update_icon()
\ No newline at end of file
+ T.update_icon()
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index 3ea12461f42..a6157133f2b 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -1,4 +1,7 @@
var/list/GPS_list = list()
+
+var/global/list/gps_by_type = list()
+
/obj/item/device/gps
name = "global positioning system"
desc = "Helping lost spacemen find their way through the planets since 2016."
@@ -7,28 +10,35 @@ var/list/GPS_list = list()
w_class = 2
slot_flags = SLOT_BELT
origin_tech = list(TECH_DATA = 2, TECH_ENGINEERING = 2)
+ var/gps_prefix = "COM"
var/gpstag = "COM0"
var/emped = 0
var/turf/locked_location
-/obj/item/device/gps/New()
- ..()
+/obj/item/device/gps/Initialize()
+ . = ..()
GPS_list.Add(src)
+ LAZYADD(gps_by_type["[type]"], src)
+ gpstag = "[gps_prefix][LAZYLEN(gps_by_type["[type]"])]"
name = "global positioning system ([gpstag])"
- overlays += "working"
+ add_overlay("working")
/obj/item/device/gps/Destroy()
GPS_list.Remove(src)
+ var/list/typelist = gps_by_type["[type]"]
+ LAZYREMOVE(typelist, src)
return ..()
/obj/item/device/gps/emp_act(severity)
emped = 1
- overlays -= "working"
- overlays += "emp"
- spawn(300)
- emped = 0
- overlays -= "emp"
- overlays += "working"
+ cut_overlay("working")
+ add_overlay("emp")
+ addtimer(CALLBACK(src, .proc/post_emp), 300)
+
+/obj/item/device/gps/proc/post_emp()
+ emped = 0
+ cut_overlay("emp")
+ add_overlay("working")
/obj/item/device/gps/attack_self(mob/user)
@@ -69,13 +79,16 @@ var/list/GPS_list = list()
/obj/item/device/gps/science
icon_state = "gps-s"
+ gps_prefix = "SCI"
gpstag = "SCI0"
/obj/item/device/gps/engineering
icon_state = "gps-e"
+ gps_prefix = "ENG"
gpstag = "ENG0"
/obj/item/device/gps/mining
icon_state = "gps-m"
- gpstag = "MINE0"
+ gps_prefix = "MIN"
+ gpstag = "MIN0"
desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 565a67f6f4b..cc6ad954919 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -10,8 +10,8 @@
active_power_usage = 5000
var/efficiency
-/obj/machinery/telepad/New()
- ..()
+/obj/machinery/telepad/Initialize()
+ . = ..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null)
component_parts += new /obj/item/bluespace_crystal/artificial(null)
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index 97611c6610b..d7bba1294d7 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -30,10 +30,6 @@
var/list/crystals = list()
var/obj/item/device/gps/inserted_gps
-/obj/machinery/computer/telescience/New()
- ..()
- recalibrate()
-
/obj/machinery/computer/telescience/Destroy()
eject()
if(inserted_gps)
@@ -45,8 +41,9 @@
..()
user << "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots."
-/obj/machinery/computer/telescience/initialize()
- ..()
+/obj/machinery/computer/telescience/Initialize()
+ . = ..()
+ recalibrate()
for(var/i = 1; i <= starting_crystals; i++)
crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals
diff --git a/code/modules/turbolift/_Aurora-areas.dm b/code/modules/turbolift/_Aurora-areas.dm
new file mode 100644
index 00000000000..e3100436ca4
--- /dev/null
+++ b/code/modules/turbolift/_Aurora-areas.dm
@@ -0,0 +1,285 @@
+/obj/turbolift_map_holder/aurora
+ depth = 2
+ lift_size_x = 4
+ lift_size_y = 4
+ clear_objects = 0
+
+//Main Lift
+/obj/turbolift_map_holder/aurora/civilian
+ name = "Aurora lift placeholder - Main"
+ dir = SOUTH
+
+ depth = 3
+ lift_size_x = 6
+ lift_size_y = 6
+
+ areas_to_use = list(
+ /area/turbolift/main_station,
+ /area/turbolift/main_mid,
+ /area/turbolift/main_arrivals
+ )
+
+/area/turbolift/main_arrivals
+ name = "Civilian Lift - Arrivals"
+ lift_announce_str = "Arriving at Arrivals"
+
+ lift_floor_label = "Arrivals"
+ lift_floor_name = "Arrivals"
+
+/area/turbolift/main_station
+ name = "Civilian Lift - Main"
+ lift_announce_str = "Arriving at Main floor"
+
+ lift_floor_label = "Main"
+ lift_floor_name = "Main"
+
+/area/turbolift/main_mid
+ name = "Civilian Lift - Mid Level"
+ lift_announce_str = "Arriving at Unknown"
+
+ lift_floor_label = "Under construction"
+ lift_floor_name = "Under construction"
+
+//Security
+/obj/turbolift_map_holder/aurora/security
+ name = "Aurora lift placeholder - Security"
+ dir = SOUTH
+
+ depth = 2
+
+ areas_to_use = list(
+ /area/turbolift/security_maintenance,
+ /area/turbolift/security_station
+ )
+
+/area/turbolift/security_station
+ name = "Station - By Security"
+ lift_announce_str = "Arriving at the station level, by the Security department."
+
+ lift_floor_label = "Security Main"
+ lift_floor_name = "Security Main"
+
+/area/turbolift/security_maintenance
+ name = "Maintenance - Below Security"
+ lift_announce_str = "Arriving at the maintenance level, below the Security department."
+ base_turf = /turf/simulated/floor/plating
+
+ lift_floor_label = "Lower Sec"
+ lift_floor_name = "Lower Sec"
+
+//Research
+/obj/turbolift_map_holder/aurora/research
+ name = "Aurora lift placeholder - Research"
+ dir = NORTH
+
+ lift_size_x = 4
+ lift_size_y = 4
+ depth = 2
+
+ areas_to_use = list(
+ /area/turbolift/research_maintenance,
+ /area/turbolift/research_station
+ )
+
+/area/turbolift/research_station
+ name = "Station - By Research"
+ lift_announce_str = "Arriving at the station level, by the R&D department."
+
+ lift_floor_label = "R&D Main"
+ lift_floor_name = "R&D Main"
+
+/area/turbolift/research_maintenance
+ name = "Maintenance - Below Research"
+ lift_announce_str = "Arriving at the maintenance level, below the R&D department."
+ base_turf = /turf/simulated/floor/plating
+
+ lift_floor_label = "Lower R&D"
+ lift_floor_name = "Lower R&D"
+
+//Engineering
+/obj/turbolift_map_holder/aurora/engineering
+ name = "Aurora lift placeholder - Engineering"
+ dir = SOUTH
+
+ lift_size_x = 5
+ lift_size_y = 4
+ depth = 2
+
+ areas_to_use = list(
+ /area/turbolift/engineering_maintenance,
+ /area/turbolift/engineering_station
+ )
+
+/area/turbolift/engineering_station
+ name = "Station - By Engineering"
+ lift_announce_str = "Arriving at the station level, by the Engineering department."
+
+ lift_floor_label = "Engineering Main"
+ lift_floor_name = "Engineering Main"
+
+/area/turbolift/engineering_maintenance
+ name = "Maintenance - Below Engineering"
+ lift_announce_str = "Arriving at the maintenance level, below the Engineering department."
+
+ lift_floor_label = "Lower Engineering"
+ lift_floor_name = "Lower Engineering"
+
+//Cargo
+/obj/turbolift_map_holder/aurora/cargo
+ name = "Aurora lift placeholder - Cargo"
+ dir = EAST
+
+ lift_size_x = 5
+ lift_size_y = 5
+ depth = 3
+
+ areas_to_use = list(
+ /area/turbolift/cargo_station,
+ /area/turbolift/cargo_mid,
+ /area/turbolift/cargo_deliverys
+ )
+
+/area/turbolift/cargo_station
+ name = "Station - By Cargo"
+ lift_announce_str = "Arriving at the station level, by the Cargo department."
+
+ lift_floor_label = "Cargo Main"
+ lift_floor_name = "Cargo Main"
+
+/area/turbolift/cargo_deliverys
+ name = "Arrivals - Cargo"
+ lift_announce_str = "Arriving at Cargo department, Deliverys."
+
+ lift_floor_label = "Cargo Arrivals"
+ lift_floor_name = "Cargo Arrivals"
+
+/area/turbolift/cargo_mid
+ name = "Arrivals - Cargo"
+ lift_announce_str = "Arriving at Unknown."
+
+ lift_floor_label = "Cargo Arrivals"
+ lift_floor_name = "Cargo Arrivals"
+
+
+//Medical
+/obj/turbolift_map_holder/aurora/medical
+ name = "Aurora lift placeholder - Medical"
+ dir = WEST
+
+ lift_size_x = 4
+ lift_size_y = 4
+ depth = 2
+
+ areas_to_use = list(
+ /area/turbolift/medical_sub,
+ /area/turbolift/medical_station
+ )
+
+/area/turbolift/medical_station
+ name = "Medical Lift - Main"
+ lift_announce_str = "Arriving at Medical bay"
+
+ lift_floor_label = "Medical Main"
+ lift_floor_name = "Medical Main"
+
+/area/turbolift/medical_sub
+ name = "Medical Lift - Sub"
+ lift_announce_str = "Arriving at lower Medical"
+
+ lift_floor_label = "Lower Medical"
+ lift_floor_name = "Lower Medical"
+
+//AI Access
+/obj/turbolift_map_holder/aurora/aiaccess
+ name = "Aurora lift placeholder - AI Access"
+ dir = NORTH
+
+ lift_size_x = 4
+ lift_size_y = 4
+ depth = 2
+
+ areas_to_use = list(
+ /area/turbolift/ai_sub,
+ /area/turbolift/ai_station
+ )
+
+/area/turbolift/ai_station
+ name = "AI Access Lift - Main"
+ lift_announce_str = "Arriving at Main Floor"
+
+ lift_floor_label = "Main"
+ lift_floor_name = "AI Control Main"
+
+/area/turbolift/ai_sub
+ name = "AI Access Lift - Lower"
+ lift_announce_str = "Arriving at AI control"
+
+ lift_floor_label = "AI Control"
+ lift_floor_name = "AI Control"
+
+
+
+//Vault
+/obj/turbolift_map_holder/aurora/vault
+ name = "Aurora lift placeholder - Vault"
+ dir = SOUTH
+
+ lift_size_x = 4
+ lift_size_y = 4
+ depth = 2
+
+ areas_to_use = list(
+ /area/turbolift/vault_sub,
+ /area/turbolift/vault_station
+ )
+
+/area/turbolift/vault_station
+ name = "Vault Access Lift - Main"
+ lift_announce_str = "Arriving at Main floor"
+
+ lift_floor_label = "Main"
+ lift_floor_name = "Vault Main"
+
+
+/area/turbolift/vault_sub
+ name = "Vault Access Lift - sub"
+ lift_announce_str = "Arriving at Vault Access"
+
+ lift_floor_label = "Vault Access"
+ lift_floor_name = "Vault Access"
+
+
+//Command
+/obj/turbolift_map_holder/aurora/command
+ name = "Aurora lift placeholder - Command"
+ dir = NORTH
+
+ lift_size_x = 4
+ lift_size_y = 4
+ depth = 3
+
+ areas_to_use = list(
+ /area/turbolift/command_sub,
+ /area/turbolift/command_mid,
+ /area/turbolift/command_station
+ )
+
+/area/turbolift/command_station
+ name = "Command Lift - Main"
+ lift_announce_str = "Arriving at Main floor"
+
+ lift_floor_label = "Main"
+ lift_floor_name = "Command Main"
+
+/area/turbolift/command_sub
+ name = "Command Lift - Sub"
+ lift_announce_str = "Arriving at Command level"
+
+ lift_floor_label = "Meeting/Escape Pods"
+ lift_floor_name = "Command Meeting"
+
+/area/turbolift/command_mid
+ name = "Command Lift - Mid"
+ lift_announce_str = "Arriving at Command Unknown"
+ lift_floor_label = "Command Floor"
+ lift_floor_name = "Secret Command Floor"
diff --git a/code/modules/turbolift/_turbolift.dm b/code/modules/turbolift/_turbolift.dm
new file mode 100644
index 00000000000..2b42d636074
--- /dev/null
+++ b/code/modules/turbolift/_turbolift.dm
@@ -0,0 +1,10 @@
+/*
+ * Turbolifts! Sort of like multishuttles-lite.
+ *
+ * How-to: Map /obj/turbolift_map_holder in at the bottom of the shaft, give it a depth
+ * value equivalent to the number of floors it should span (inclusive of the first),
+ * and at runtime it will update the map, set areas and create control panels and
+ * wifi-set doors appropriate to itself. You will save time at init if you map the
+ * elevator shaft in properly before runtime, but ultimately you're just avoiding a
+ * bunch of ChangeTurf() calls.
+ */
diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm
new file mode 100644
index 00000000000..140b92a5bd0
--- /dev/null
+++ b/code/modules/turbolift/turbolift.dm
@@ -0,0 +1,136 @@
+var/global/list/turbolifts = list()
+
+// Lift master datum. One per turbolift.
+/datum/turbolift
+ var/datum/turbolift_floor/target_floor // Where are we going?
+ var/datum/turbolift_floor/current_floor // Where is the lift currently?
+ var/list/doors = list() // Doors inside the lift structure.
+ var/list/queued_floors = list() // Where are we moving to next?
+ var/list/floors = list() // All floors in this system.
+ var/move_delay = 30 // Time between floor changes.
+ var/floor_wait_delay = 85 // Time to wait at floor stops.
+ var/obj/structure/lift/panel/control_panel_interior // Lift control panel.
+ var/doors_closing = 0 // Whether doors are in the process of closing
+
+ var/tmp/moving_upwards
+ var/tmp/busy
+
+ var/move_timer
+
+/datum/turbolift/proc/emergency_stop()
+ deltimer(move_timer)
+ queued_floors.Cut()
+ target_floor = null
+ open_doors()
+
+/datum/turbolift/proc/doors_are_open(var/datum/turbolift_floor/use_floor = current_floor)
+ for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors))
+ if(!door.density)
+ return 1
+ return 0
+
+/datum/turbolift/proc/open_doors(var/datum/turbolift_floor/use_floor = current_floor)
+ for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors))
+ door.command("open")
+
+/datum/turbolift/proc/close_doors(var/datum/turbolift_floor/use_floor = current_floor)
+ for(var/obj/machinery/door/airlock/door in (use_floor ? (doors + use_floor.doors) : doors))
+ door.command("close")
+
+/datum/turbolift/proc/do_move()
+
+ var/current_floor_index = floors.Find(current_floor)
+
+ if(!target_floor)
+ if(!queued_floors || !queued_floors.len)
+ return 0
+ target_floor = queued_floors[1]
+ queued_floors -= target_floor
+ if(current_floor_index < floors.Find(target_floor))
+ moving_upwards = 1
+ else
+ moving_upwards = 0
+
+ if(doors_are_open())
+ if(!doors_closing)
+ close_doors()
+ doors_closing = 1
+ return 1
+ else // We failed to close the doors - probably, someone is blocking them; stop trying to move
+ doors_closing = 0
+ open_doors()
+ control_panel_interior.audible_message("\The [current_floor.ext_panel] buzzes loudly.")
+ playsound(control_panel_interior.loc, "sound/machines/buzz-two.ogg", 50, 1)
+ return 0
+
+ doors_closing = 0 // The doors weren't open, so they are done closing
+
+ var/area/turbolift/origin = locate(current_floor.area_ref)
+
+ if(target_floor == current_floor)
+
+ playsound(control_panel_interior.loc, origin.arrival_sound, 50, 1)
+ target_floor.arrived(src)
+ target_floor = null
+
+ sleep(15)
+ control_panel_interior.visible_message("The elevator announces, \"[origin.lift_announce_str]\"")
+ sleep(floor_wait_delay)
+
+ return 1
+
+ // Work out where we're headed.
+ var/datum/turbolift_floor/next_floor
+ if(moving_upwards)
+ next_floor = floors[current_floor_index+1]
+ else
+ next_floor = floors[current_floor_index-1]
+
+ var/area/turbolift/destination = locate(next_floor.area_ref)
+
+ if(!istype(origin) || !istype(destination) || (origin == destination))
+ return 0
+
+ for(var/turf/T in destination)
+ for(var/atom/movable/AM in T)
+ if(istype(AM, /mob/living))
+ var/mob/living/M = AM
+ M.gib()
+ else if(AM.simulated)
+ qdel(AM)
+
+ origin.move_contents_to(destination)
+
+ if((locate(/obj/machinery/power) in destination) || (locate(/obj/structure/cable) in destination))
+ makepowernets()
+
+ current_floor = next_floor
+ control_panel_interior.visible_message("The elevator [moving_upwards ? "rises" : "descends"] smoothly.")
+
+ return 1
+
+/datum/turbolift/proc/queue_move_to(var/datum/turbolift_floor/floor)
+ if(!floor || !(floor in floors) || (floor in queued_floors))
+ return // STOP PRESSING THE BUTTON.
+ floor.pending_move(src)
+ queued_floors |= floor
+ queue_movement()
+
+// TODO: dummy machine ('lift mechanism') in powered area for functionality/blackout checks.
+/datum/turbolift/proc/is_functional()
+ return 1
+
+/datum/turbolift/proc/handle_movement()
+ busy = TRUE
+
+ if (!do_move())
+ if (target_floor)
+ target_floor.ext_panel.reset()
+ target_floor = null
+ else
+ queue_movement()
+
+ busy = FALSE
+
+/datum/turbolift/proc/queue_movement()
+ move_timer = addtimer(CALLBACK(src, .proc/handle_movement), move_delay, TIMER_STOPPABLE)
diff --git a/code/modules/turbolift/turbolift_areas.dm b/code/modules/turbolift/turbolift_areas.dm
new file mode 100644
index 00000000000..c3adce35970
--- /dev/null
+++ b/code/modules/turbolift/turbolift_areas.dm
@@ -0,0 +1,12 @@
+// Used for creating the exchange areas.
+/area/turbolift
+ name = "Turbolift"
+ base_turf = /turf/simulated/open
+ requires_power = 0
+ station_area = 1
+ sound_env = SMALL_ENCLOSED
+
+ var/lift_floor_label = null
+ var/lift_floor_name = null
+ var/lift_announce_str = "Ding!"
+ var/arrival_sound = 'sound/machines/ding.ogg'
diff --git a/code/modules/turbolift/turbolift_console.dm b/code/modules/turbolift/turbolift_console.dm
new file mode 100644
index 00000000000..2adf7cb8449
--- /dev/null
+++ b/code/modules/turbolift/turbolift_console.dm
@@ -0,0 +1,154 @@
+// Base type, do not use.
+/obj/structure/lift
+ name = "turbolift control component"
+ icon = 'icons/obj/turbolift.dmi'
+ anchored = 1
+ density = 0
+
+ var/datum/turbolift/lift
+
+/obj/structure/lift/set_dir(var/newdir)
+ . = ..()
+ pixel_x = 0
+ pixel_y = 0
+ if(dir & NORTH)
+ pixel_y = -32
+ else if(dir & SOUTH)
+ pixel_y = 32
+ else if(dir & EAST)
+ pixel_x = -32
+ else if(dir & WEST)
+ pixel_x = 32
+
+/obj/structure/lift/proc/pressed(var/mob/user)
+ if(!istype(user, /mob/living/silicon))
+ if(user.a_intent == I_HURT)
+ user.visible_message("\The [user] hammers on the lift button! ")
+ else
+ user.visible_message("\The [user] presses the lift button. ")
+
+
+/obj/structure/lift/New(var/newloc, var/datum/turbolift/_lift)
+ lift = _lift
+ return ..(newloc)
+
+/obj/structure/lift/attack_ai(var/mob/user)
+ return attack_hand(user)
+
+/obj/structure/lift/attack_generic(var/mob/user)
+ return attack_hand(user)
+
+/obj/structure/lift/attack_hand(var/mob/user)
+ return interact(user)
+
+/obj/structure/lift/interact(var/mob/user)
+ if(!lift.is_functional())
+ return 0
+ return 1
+// End base.
+
+// Button. No HTML interface, just calls the associated lift to its floor.
+/obj/structure/lift/button
+ name = "elevator button"
+ desc = "A call button for an elevator. Be sure to hit it three hundred times."
+ icon_state = "button"
+ var/light_up = FALSE
+ var/datum/turbolift_floor/floor
+
+/obj/structure/lift/button/Destroy()
+ if(floor && floor.ext_panel == src)
+ floor.ext_panel = null
+ floor = null
+ return ..()
+
+/obj/structure/lift/button/proc/reset()
+ light_up = FALSE
+ update_icon()
+
+/obj/structure/lift/button/interact(var/mob/user)
+ if(!..())
+ return
+ light_up()
+ pressed(user)
+ if(floor == lift.current_floor)
+ lift.open_doors()
+ addtimer(CALLBACK(src, .proc/reset), 3)
+ return
+ lift.queue_move_to(floor)
+
+/obj/structure/lift/button/proc/light_up()
+ light_up = TRUE
+ update_icon()
+
+/obj/structure/lift/button/update_icon()
+ if(light_up)
+ icon_state = "button_lit"
+ else
+ icon_state = initial(icon_state)
+
+// End button.
+
+// Panel. Lists floors (HTML), moves with the elevator, schedules a move to a given floor.
+/obj/structure/lift/panel
+ name = "elevator control panel"
+ icon_state = "panel"
+
+
+/obj/structure/lift/panel/attack_ghost(var/mob/user)
+ return interact(user)
+
+/obj/structure/lift/panel/interact(var/mob/user)
+ if(!..())
+ return
+
+ var/dat = list()
+ dat += "Lift panel "
+
+ //the floors list stores levels in order of increasing Z
+ //therefore, to display upper levels at the top of the menu and
+ //lower levels at the bottom, we need to go through the list in reverse
+ for(var/i in lift.floors.len to 1 step -1)
+ var/datum/turbolift_floor/floor = lift.floors[i]
+ if(floor)
+ var/label = floor.label? floor.label : "Level #[i]"
+ dat += ""
+ dat += "[label] : [floor.name] "
+
+ dat += " "
+ if(lift.doors_are_open())
+ dat += "Close Doors "
+ else
+ dat += "Open Doors "
+ dat += "Emergency Stop "
+ dat += " "
+
+ var/datum/browser/popup = new(user, "turbolift_panel", "Lift Panel", 230, 260)
+ popup.set_content(jointext(dat, null))
+ popup.open()
+ return
+
+/obj/structure/lift/panel/Topic(href, href_list)
+ . = ..()
+ if(.)
+ return
+
+ var/panel_interact
+ if(href_list["move_to_floor"])
+ lift.queue_move_to(locate(href_list["move_to_floor"]))
+ panel_interact = 1
+ if(href_list["open_doors"])
+ panel_interact = 1
+ lift.open_doors()
+ if(href_list["close_doors"])
+ panel_interact = 1
+ lift.close_doors()
+ if(href_list["emergency_stop"])
+ panel_interact = 1
+ lift.emergency_stop()
+
+ if(panel_interact)
+ pressed(usr)
+
+ return 0
+
+// End panel.
diff --git a/code/modules/turbolift/turbolift_door.dm b/code/modules/turbolift/turbolift_door.dm
new file mode 100644
index 00000000000..4be831ec64c
--- /dev/null
+++ b/code/modules/turbolift/turbolift_door.dm
@@ -0,0 +1,45 @@
+/obj/machinery/door/airlock/lift
+ name = "Elevator Door"
+ desc = "Ding."
+ req_access = list(access_maint_tunnels)
+ opacity = 0
+ autoclose = 0
+ glass = 1
+ icon = 'icons/obj/doors/doorlift.dmi'
+ hashatch = 0
+
+ var/datum/turbolift/lift
+ var/datum/turbolift_floor/floor
+
+/obj/machinery/door/airlock/lift/Destroy()
+ if(lift)
+ lift.doors -= src
+ if(floor)
+ floor.doors -= src
+ return ..()
+
+/obj/machinery/door/airlock/lift/bumpopen(var/mob/user)
+ return // No accidental sprinting into open elevator shafts.
+
+/obj/machinery/door/airlock/lift/allowed(mob/M)
+ return FALSE //only the lift machinery is allowed to operate this door
+
+/obj/machinery/door/airlock/lift/close(var/forced=0)
+ for(var/turf/turf in locs)
+ for(var/mob/living/LM in turf)
+ if(LM.mob_size <= MOB_TINY)
+ var/moved = 0
+ for(dir in shuffle(cardinal.Copy()))
+ var/dest = get_step(LM,dir)
+ if(!(locate(/obj/machinery/door/airlock/lift) in dest))
+ if(LM.Move(dest))
+ moved = 1
+ LM.visible_message("\The [LM] scurries away from the closing doors.")
+ break
+ if(!moved) // nowhere to go....
+ LM.gib()
+ else // the mob is too big to just move, so we need to give up what we're doing
+ audible_message("\The [src]'s motors grind as they quickly reverse direction, unable to safely close.")
+ cur_command = null // the door will just keep trying otherwise
+ return 0
+ return ..()
diff --git a/code/modules/turbolift/turbolift_floor.dm b/code/modules/turbolift/turbolift_floor.dm
new file mode 100644
index 00000000000..7761f092843
--- /dev/null
+++ b/code/modules/turbolift/turbolift_floor.dm
@@ -0,0 +1,33 @@
+// Simple holder for each floor in the lift.
+/datum/turbolift_floor
+ var/area_ref
+ var/label
+ var/name
+ var/announce_str
+ var/arrival_sound
+
+ var/list/doors = list()
+ var/obj/structure/lift/button/ext_panel
+
+/datum/turbolift_floor/proc/set_area_ref(var/ref)
+ var/area/turbolift/A = locate(ref)
+ if(!istype(A))
+ log_debug("Turbolift floor area was of the wrong type: ref=[ref]")
+ return
+
+ area_ref = ref
+ label = A.lift_floor_label
+ name = A.lift_floor_name ? A.lift_floor_name : A.name
+ announce_str = A.lift_announce_str
+ arrival_sound = A.arrival_sound
+
+//called when a lift has queued this floor as a destination
+/datum/turbolift_floor/proc/pending_move(var/datum/turbolift/lift)
+ if(ext_panel)
+ ext_panel.light_up()
+
+//called when a lift arrives at this floor
+/datum/turbolift_floor/proc/arrived(var/datum/turbolift/lift)
+ lift.open_doors(src)
+ if(ext_panel)
+ ext_panel.reset()
\ No newline at end of file
diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm
new file mode 100644
index 00000000000..a6a3b236fd0
--- /dev/null
+++ b/code/modules/turbolift/turbolift_map.dm
@@ -0,0 +1,232 @@
+// Map object.
+/obj/turbolift_map_holder
+ name = "turbolift map placeholder"
+ icon = 'icons/obj/turbolift_preview_3x3.dmi'
+ dir = SOUTH // Direction of the holder determines the placement of the lift control panel and doors.
+ var/clear_objects = 1
+ var/depth = 1 // Number of floors to generate, including the initial floor.
+ var/lift_size_x = 2 // Number of turfs on each axis to generate in addition to the first
+ var/lift_size_y = 2 // ie. a 3x3 lift would have a value of 2 in each of these variables.
+
+ // Various turf and door types used when generating the turbolift floors.
+ var/wall_type = /turf/simulated/wall/elevator
+ var/floor_type = /turf/simulated/floor/tiled/dark
+ var/door_type = /obj/machinery/door/airlock/lift
+
+ var/list/areas_to_use = list()
+
+/obj/turbolift_map_holder/Destroy()
+ global.turbolifts -= src
+ return ..()
+
+/obj/turbolift_map_holder/Initialize()
+ ..()
+ global.turbolifts += src
+
+ // Create our system controller.
+ var/datum/turbolift/lift = new()
+
+ // Holder values since we're moving this object to null ASAP.
+ var/ux = x
+ var/uy = y
+ var/uz = z
+ var/udir = dir
+ forceMove(null)
+
+ // These modifiers are used in relation to the origin
+ // to place the system control panels and doors.
+ var/int_panel_x
+ var/int_panel_y
+ var/ext_panel_x
+ var/ext_panel_y
+ var/door_x1
+ var/door_y1
+ var/door_x2
+ var/door_y2
+ var/light_x1
+ var/light_x2
+ var/light_y1
+ var/light_y2
+
+ var/az = 1
+ var/ex = (ux+lift_size_x)
+ var/ey = (uy+lift_size_y)
+ var/ez = (uz+(depth-1))
+
+ switch(dir)
+
+ if(NORTH)
+
+ int_panel_x = ux + Floor(lift_size_x/2)
+ int_panel_y = uy + 1
+ ext_panel_x = ux
+ ext_panel_y = ey + 2
+
+ door_x1 = ux + 1
+ door_y1 = ey
+ door_x2 = ex - 1
+ door_y2 = ey + 1
+
+ light_x1 = ux + 1
+ light_y1 = uy + 1
+ light_x2 = ux + lift_size_x - 1
+ light_y2 = uy + 1
+
+ if(SOUTH)
+
+ int_panel_x = ux + Floor(lift_size_x/2)
+ int_panel_y = ey - 1
+ ext_panel_x = ex
+ ext_panel_y = uy - 2
+
+ door_x1 = ux + 1
+ door_y1 = uy - 1
+ door_x2 = ex - 1
+ door_y2 = uy
+
+ light_x1 = ux + 1
+ light_y1 = uy + 2
+ light_x2 = ux + lift_size_x - 1
+ light_y2 = uy + lift_size_y - 1
+
+ if(EAST)
+
+ int_panel_x = ux+1
+ int_panel_y = uy + Floor(lift_size_y/2)
+ ext_panel_x = ex+2
+ ext_panel_y = ey
+
+ door_x1 = ex
+ door_y1 = uy + 1
+ door_x2 = ex + 1
+ door_y2 = ey - 1
+
+ light_x1 = ux + 1
+ light_y1 = uy + 1
+ light_x2 = ux + 1
+ light_y2 = uy + lift_size_x - 1
+
+ if(WEST)
+
+ int_panel_x = ex-1
+ int_panel_y = uy + Floor(lift_size_y/2)
+ ext_panel_x = ux-2
+ ext_panel_y = uy
+
+ door_x1 = ux - 1
+ door_y1 = uy + 1
+ door_x2 = ux
+ door_y2 = ey - 1
+
+ light_x1 = ux + lift_size_x - 1
+ light_y1 = uy + 1
+ light_x2 = ux + lift_size_x - 1
+ light_y2 = uy + lift_size_y - 1
+
+ // Generate each floor and store it in the controller datum.
+ if(uz != 1)
+ for(var/i = 1, i < uz, i++)
+ lift.floors += null // This silly hack allows lifts to not start on the first zlevel
+
+ for(var/cz = uz;cz<=ez;cz++)
+
+ var/datum/turbolift_floor/cfloor = new()
+ lift.floors += cfloor
+
+ var/list/floor_turfs = list()
+ // Update the appropriate turfs.
+ for(var/tx = ux to ex)
+ for(var/ty = uy to ey)
+
+ var/turf/checking = locate(tx,ty,cz)
+
+ if(!istype(checking))
+ log_debug("[name] cannot find a component turf at [tx],[ty] on floor [cz]. Aborting.")
+ qdel(src)
+ return
+
+ // Update path appropriately if needed.
+ var/swap_to = /turf/simulated/open
+ if(cz == uz) // Elevator.
+ if((tx == ux || ty == uy || tx == ex || ty == ey) && !(tx >= door_x1 && tx <= door_x2 && ty >= door_y1 && ty <= door_y2))
+ swap_to = wall_type
+ else
+ swap_to = floor_type
+
+ if(checking.type != swap_to)
+ checking.ChangeTurf(swap_to)
+ // Let's make absolutely sure that we have the right turf.
+ checking = locate(tx,ty,cz)
+
+ // Clear out contents.
+ if(clear_objects)
+ for(var/atom/movable/thing in checking.contents)
+ if(thing.simulated)
+ qdel(thing)
+
+ if(tx >= ux && tx <= ex && ty >= uy && ty <= ey)
+ floor_turfs += checking
+
+ // Place exterior doors.
+ for(var/tx = door_x1 to door_x2)
+ for(var/ty = door_y1 to door_y2)
+ var/turf/checking = locate(tx,ty,cz)
+ var/internal = 1
+ if(!(checking in floor_turfs))
+ internal = 0
+ if(checking.type != floor_type)
+ checking.ChangeTurf(floor_type)
+ checking = locate(tx,ty,cz)
+ for(var/atom/movable/thing in checking.contents)
+ if(thing.simulated)
+ qdel(thing)
+ if(checking.type == floor_type) // Don't build over empty space on lower levels.
+ var/obj/machinery/door/airlock/lift/newdoor = new door_type(checking)
+ if(internal)
+ lift.doors += newdoor
+ newdoor.lift = cfloor
+ else
+ cfloor.doors += newdoor
+ newdoor.floor = cfloor
+
+ // Place exterior control panel.
+ var/turf/placing = locate(ext_panel_x, ext_panel_y, cz)
+ var/obj/structure/lift/button/panel_ext = new(placing, lift)
+ panel_ext.floor = cfloor
+ panel_ext.set_dir(udir)
+ cfloor.ext_panel = panel_ext
+
+ // Place lights
+ var/turf/placing1 = locate(light_x1, light_y1, cz)
+ var/turf/placing2 = locate(light_x2, light_y2, cz)
+ var/obj/machinery/light/light1 = new(placing1, light)
+ var/obj/machinery/light/light2 = new(placing2, light)
+ if(udir == NORTH || udir == SOUTH)
+ light1.set_dir(WEST)
+ light2.set_dir(EAST)
+ else
+ light1.set_dir(SOUTH)
+ light2.set_dir(NORTH)
+
+ // Update area.
+ if(az > areas_to_use.len)
+ log_debug("Insufficient defined areas in turbolift datum, aborting.")
+ qdel(src)
+ return
+
+ var/area_path = areas_to_use[az]
+ for(var/thing in floor_turfs)
+ new area_path(thing)
+ var/area/A = locate(area_path)
+ cfloor.set_area_ref("\ref[A]")
+ az++
+
+ // Place lift panel.
+ var/turf/T = locate(int_panel_x, int_panel_y, uz)
+ lift.control_panel_interior = new(T, lift)
+ lift.control_panel_interior.set_dir(udir)
+ lift.current_floor = lift.floors[uz]
+
+ lift.open_doors()
+
+ return INITIALIZE_HINT_QDEL
diff --git a/code/modules/turbolift/turbolift_turfs.dm b/code/modules/turbolift/turbolift_turfs.dm
new file mode 100644
index 00000000000..632160efaa1
--- /dev/null
+++ b/code/modules/turbolift/turbolift_turfs.dm
@@ -0,0 +1,2 @@
+/turf/simulated/wall/elevator/New(var/newloc)
+ ..(newloc,"elevatorium")
diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm
index f251bd38374..1cceef28f64 100644
--- a/code/modules/vehicles/bike.dm
+++ b/code/modules/vehicles/bike.dm
@@ -139,4 +139,4 @@
/obj/vehicle/bike/Destroy()
qdel(ion)
- ..()
+ return ..()
diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm
index 7e084e0f360..52d4c70a5dc 100644
--- a/code/modules/vehicles/cargo_train.dm
+++ b/code/modules/vehicles/cargo_train.dm
@@ -38,11 +38,11 @@
//-------------------------------------------
// Standard procs
//-------------------------------------------
-/obj/vehicle/train/cargo/engine/New()
- ..()
+/obj/vehicle/train/cargo/engine/Initialize()
+ . = ..()
cell = new /obj/item/weapon/cell/high(src)
key = new(src)
- var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
+ var/image/I = new(icon = icon, icon_state = "[icon_state]_overlay", layer = src.layer + 0.2) //over mobs
overlays += I
turn_off() //so engine verbs are correctly set
diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm
index e4f6935657b..21e788c5a36 100644
--- a/code/modules/vehicles/train.dm
+++ b/code/modules/vehicles/train.dm
@@ -17,11 +17,14 @@
var/obj/vehicle/train/lead
var/obj/vehicle/train/tow
+ can_hold_mob = TRUE
+
//-------------------------------------------
// Standard procs
//-------------------------------------------
-/obj/vehicle/train/initialize()
+/obj/vehicle/train/Initialize()
+ . = ..()
for(var/obj/vehicle/train/T in orange(1, src))
latch(T)
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index be3dfa4b676..583a5d28774 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -143,21 +143,23 @@
/obj/vehicle/emp_act(severity)
var/was_on = on
stat |= EMPED
- var/obj/effect/overlay/pulse2 = getFromPool(/obj/effect/overlay, src.loc)
+ var/obj/effect/overlay/pulse2 = new /obj/effect/overlay(src.loc)
pulse2.icon = 'icons/effects/effects.dmi'
pulse2.icon_state = "empdisable"
pulse2.name = "emp sparks"
pulse2.anchored = 1
pulse2.set_dir(pick(cardinal))
- spawn(10)
- qdel(pulse2)
+ QDEL_IN(pulse2, 10)
if(on)
turn_off()
- spawn(severity*300)
- stat &= ~EMPED
- if(was_on)
- turn_on()
+
+ addtimer(CALLBACK(src, .proc/post_emp, was_on), severity * 300)
+
+/obj/vehicle/proc/post_emp(was_on)
+ stat &= ~EMPED
+ if(was_on)
+ turn_on()
/obj/vehicle/attack_ai(mob/user as mob)
return
@@ -196,8 +198,8 @@
src.visible_message("\red [src] blows apart! ", 1)
var/turf/Tsec = get_turf(src)
- getFromPool(/obj/item/stack/rods, Tsec)
- getFromPool(/obj/item/stack/rods, Tsec)
+ new /obj/item/stack/rods(Tsec)
+ new /obj/item/stack/rods(Tsec)
new /obj/item/stack/cable_coil/cut(Tsec)
if(cell)
diff --git a/code/modules/wireless/interfaces.dm b/code/modules/wireless/interfaces.dm
index a872933c2d2..7d50608a5f1 100644
--- a/code/modules/wireless/interfaces.dm
+++ b/code/modules/wireless/interfaces.dm
@@ -24,8 +24,7 @@
before it is setup.
Add or modify the objects Destroy() proc to include:
- qdel(wifi_receiver)
- wifi_receiver = null
+ QDEL_NULL(wifi_receiver)
Senders are setup the same way, except with a var/datum/wifi/sender/subtype/wifi_sender variable instead of (or in
addition to) a /wifi/receiver variable.
@@ -45,27 +44,27 @@
var/list/connected_devices
var/id
-/datum/wifi/New(var/new_id, var/obj/O)
+/datum/wifi/New(new_id, obj/O)
connected_devices = new()
id = new_id
if(istype(O))
parent = O
-/datum/wifi/Destroy(var/wifi/device)
+/datum/wifi/Destroy(wifi/device)
parent = null
for(var/datum/wifi/D in connected_devices)
D.disconnect_device(src)
disconnect_device(D)
return ..()
-/datum/wifi/proc/connect_device(var/datum/wifi/device)
+/datum/wifi/proc/connect_device(datum/wifi/device)
if(connected_devices)
connected_devices |= device
else
connected_devices = new()
connected_devices |= device
-/datum/wifi/proc/disconnect_device(var/datum/wifi/device)
+/datum/wifi/proc/disconnect_device(datum/wifi/device)
if(connected_devices)
connected_devices -= device
@@ -74,12 +73,12 @@
//-------------------------------
/datum/wifi/receiver/New()
..()
- if(wirelessProcess)
- wirelessProcess.add_device(src)
+ if(SSwireless)
+ SSwireless.add_device(src)
/datum/wifi/receiver/Destroy()
- if(wirelessProcess)
- wirelessProcess.remove_device(src)
+ if(SSwireless)
+ SSwireless.remove_device(src)
return ..()
//-------------------------------
@@ -89,12 +88,12 @@
..()
send_connection_request()
-/datum/wifi/sender/proc/set_target(var/new_target)
+/datum/wifi/sender/proc/set_target(new_target)
id = new_target
/datum/wifi/sender/proc/send_connection_request()
var/datum/connection_request/C = new(src, id)
- wirelessProcess.add_request(C)
+ SSwireless.add_request(C)
/datum/wifi/sender/proc/activate(mob/living/user)
return
@@ -109,7 +108,7 @@
var/datum/wifi/sender/source //wifi/sender object creating the request
var/id //id tag of the target device(s) to try to connect to
-/datum/connection_request/New(var/datum/wifi/sender/sender, var/receiver)
+/datum/connection_request/New(datum/wifi/sender/sender, receiver)
if(istype(sender))
source = sender
id = receiver
diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm
index 18c210a6dc4..9037cd02456 100644
--- a/code/modules/xgm/xgm_gas_mixture.dm
+++ b/code/modules/xgm/xgm_gas_mixture.dm
@@ -15,8 +15,18 @@
//List of active tile overlays for this gas_mixture. Updated by check_tile_graphic()
var/list/graphic = list()
-/datum/gas_mixture/New(vol = CELL_VOLUME)
- volume = vol
+/datum/gas_mixture/New(_volume = CELL_VOLUME, _temperature = 0, _group_multiplier = 1)
+ volume = _volume
+ temperature = _temperature
+ group_multiplier = _group_multiplier
+
+/datum/gas_mixture/proc/get_gas(gasid)
+ if(!gas.len)
+ return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes
+ return gas[gasid] * group_multiplier
+
+/datum/gas_mixture/proc/get_total_moles()
+ return total_moles * group_multiplier
//Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0.
/datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1)
@@ -95,11 +105,16 @@
update_values()
-
+// Used to equalize the mixture between two zones before sleeping an edge.
/datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer)
var/our_heatcap = heat_capacity()
var/share_heatcap = sharer.heat_capacity()
+ // Special exception: there isn't enough air around to be worth processing this edge next tick, zap both to zero.
+ if(total_moles + sharer.total_moles <= MINIMUM_AIR_TO_SUSPEND)
+ gas.Cut()
+ sharer.gas.Cut()
+
for(var/g in gas|sharer.gas)
var/comb = gas[g] + sharer.gas[g]
comb /= volume + sharer.volume
@@ -110,6 +125,9 @@
temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap)
sharer.temperature = temperature
+ update_values()
+ sharer.update_values()
+
return 1
@@ -123,6 +141,7 @@
//Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
/datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy)
+
if (total_moles == 0)
return 0
@@ -267,6 +286,12 @@
return removed
+//Returns the amount of gas that has the given flag, in moles
+/datum/gas_mixture/proc/get_by_flag(flag)
+ . = 0
+ for(var/g in gas)
+ if(gas_data.flags[g] & flag)
+ . += gas[g]
//Copies gas and temperature from another gas_mixture.
/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample)
@@ -279,9 +304,16 @@
//Checks if we are within acceptable range of another gas_mixture to suspend processing or merge.
-/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample)
+/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample, var/vacuum_exception = 0)
if(!sample) return 0
+ if(vacuum_exception)
+ // Special case - If one of the two is zero pressure, the other must also be zero.
+ // This prevents suspending processing when an air-filled room is next to a vacuum,
+ // an edge case which is particually obviously wrong to players
+ if(total_moles == 0 && sample.total_moles != 0 || sample.total_moles == 0 && total_moles != 0)
+ return 0
+
var/list/marked = list()
for(var/g in gas)
if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \
@@ -290,6 +322,9 @@
return 0
marked[g] = 1
+ if(abs(return_pressure() - sample.return_pressure()) > MINIMUM_PRESSURE_DIFFERENCE_TO_SUSPEND)
+ return 0
+
for(var/g in sample.gas)
if(!marked[g])
if((abs(gas[g] - sample.gas[g]) > MINIMUM_AIR_TO_SUSPEND) && \
@@ -314,29 +349,25 @@
//Two lists can be passed by reference if you need know specifically which graphics were added and removed.
/datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null)
for(var/g in gas_data.overlay_limit)
- if(graphic.Find(gas_data.tile_overlay[g]))
+ if (graphic[gas_data.tile_overlay[g]])
//Overlay is already applied for this gas, check if it's still valid.
if(gas[g] <= gas_data.overlay_limit[g])
- if(!graphic_remove)
- graphic_remove = list()
- graphic_remove += gas_data.tile_overlay[g]
+ LAZYADD(graphic_remove, gas_data.tile_overlay[g])
else
//Overlay isn't applied for this gas, check if it's valid and needs to be added.
if(gas[g] > gas_data.overlay_limit[g])
- if(!graphic_add)
- graphic_add = list()
- graphic_add += gas_data.tile_overlay[g]
+ LAZYADD(graphic_add, gas_data.tile_overlay[g])
. = 0
//Apply changes
- if(graphic_add && graphic_add.len)
- graphic += graphic_add
+ if(LAZYLEN(graphic_add))
+ for (var/entry in graphic_add)
+ graphic[entry] = TRUE // This is an assoc list to make checking it a bit faster.
. = 1
- if(graphic_remove && graphic_remove.len)
+ if(LAZYLEN(graphic_remove))
graphic -= graphic_remove
. = 1
-
//Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier.
/datum/gas_mixture/proc/add(datum/gas_mixture/right_side)
for(var/g in right_side.gas)
@@ -424,7 +455,6 @@
/datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air)
return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
-
//Equalizes a list of gas mixtures. Used for pipe networks.
/proc/equalize_gases(datum/gas_mixture/list/gases)
//Calculate totals from individual components
@@ -464,3 +494,12 @@
gasmix.multiply(gasmix.volume)
return 1
+
+/datum/gas_mixture/proc/get_mass()
+ for(var/g in gas)
+ . += gas[g] * gas_data.molar_mass[g] * group_multiplier
+
+/datum/gas_mixture/proc/specific_mass()
+ var/M = get_total_moles()
+ if(M)
+ return get_mass()/M
diff --git a/code/unit_tests/foundation_tests.dm b/code/unit_tests/foundation_tests.dm
index 1b03b73221e..d4ff6e93648 100644
--- a/code/unit_tests/foundation_tests.dm
+++ b/code/unit_tests/foundation_tests.dm
@@ -20,7 +20,7 @@ datum/unit_test/foundation/step_shall_return_true_on_success/start_test()
return 1
datum/unit_test/foundation/proc/TestStep(type_to_test)
- var/turf/start = locate(20,20,1)
+ var/turf/start = locate(20,120,1)
var/atom/movable/T = new type_to_test(start)
. = step(T, NORTH)
diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm
index d81d73e6bf3..edc2ec10aaa 100644
--- a/code/unit_tests/map_tests.dm
+++ b/code/unit_tests/map_tests.dm
@@ -11,34 +11,44 @@
datum/unit_test/apc_area_test
- name = "MAP: Area Test APC / Scrubbers / Vents Z level 1"
+ name = "MAP: Area Test APC / Scrubbers / Vents (Station)"
datum/unit_test/apc_area_test/start_test()
var/list/bad_areas = list()
var/area_test_count = 0
- var/list/exempt_areas = typesof(/area/space, \
- /area/syndicate_station, \
- /area/skipjack_station, \
- /area/solar, \
- /area/shuttle, \
- /area/holodeck, \
- /area/supply/station \
- )
- var/list/exempt_from_atmos = typesof( /area/maintenance, \
- /area/storage, \
- /area/engineering/atmos/storage, \
- /area/rnd/test_area, \
- /area/construction, \
- /area/server
- )
+ // This is formatted strangely because it fails the indentation test if it's formatted properly.
+ // ¯\_(ツ)_/¯
+ var/list/exempt_areas = typesof(/area/space
+ ,/area/syndicate_station
+ ,/area/skipjack_station
+ ,/area/solar
+ ,/area/shuttle
+ ,/area/holodeck
+ ,/area/supply/station
+ ,/area/wizard_station
+ ,/area/tdome
+ ,/area/centcom
+ ,/area/syndicate_mothership
+ ,/area/beach
+ ,/area/prison
+ ,/area/supply/dock
+ )
- var/list/exempt_from_apc = typesof( /area/construction, \
- /area/medical/genetics
- )
+ var/list/exempt_from_atmos = typesof(/area/maintenance
+ ,/area/storage
+ ,/area/engineering/atmos/storage
+ ,/area/rnd/test_area
+ ,/area/construction
+ ,/area/server
+ )
+
+ var/list/exempt_from_apc = typesof(/area/construction
+ ,/area/medical/genetics
+ )
for(var/area/A in world)
- if(A.z == 1 && !(A.type in exempt_areas))
+ if(A.z in list(2,3,4,5) && !(A.type in exempt_areas))
area_test_count++
var/area_good = 1
var/bad_msg = "[ascii_red]--------------- [A.name]([A.type])"
@@ -69,7 +79,7 @@ datum/unit_test/apc_area_test/start_test()
//=======================================================================================
datum/unit_test/wire_test
- name = "MAP: Cable Test Z level 1"
+ name = "MAP: Cable Test (Station)"
datum/unit_test/wire_test/start_test()
var/wire_test_count = 0
@@ -83,7 +93,7 @@ datum/unit_test/wire_test/start_test()
T = null
T = get_turf(C)
- if(T && T.z == 1)
+ if(T && T.z in list(2,3,4,5))
cable_turfs |= get_turf(C)
for(T in cable_turfs)
diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm
index 2a49dedec91..7dc522aa8f4 100644
--- a/code/unit_tests/observation_tests.dm
+++ b/code/unit_tests/observation_tests.dm
@@ -19,8 +19,8 @@ datum/unit_test/observation/moved_observer_shall_register_on_follow/start_test()
else
fail("The observer is not following the mob.")
- qdel(H)
- qdel(O)
+ QDEL_IN(H, 10 SECONDS)
+ QDEL_IN(O, 10 SECONDS)
return 1
datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow
@@ -38,8 +38,8 @@ datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow/start_te
else
fail("The observer is still following the mob.")
- qdel(H)
- qdel(O)
+ QDEL_IN(H, 10 SECONDS)
+ QDEL_IN(O, 10 SECONDS)
return 1
datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners
@@ -56,8 +56,8 @@ datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners/
else
fail("The mob has registered to the closet's moved event.")
- qdel(C)
- qdel(H)
+ QDEL_IN(C, 10 SECONDS)
+ QDEL_IN(H, 10 SECONDS)
return 1
datum/unit_test/observation/moved_shall_registers_recursively_on_new_listener
@@ -78,9 +78,9 @@ datum/unit_test/observation/moved_shall_registers_recursively_on_new_listener/st
else
fail("Recursive moved registration failed. Human listening to closet: [listening_to_closet] - Observer listening to human: [listening_to_human]")
- qdel(C)
- qdel(H)
- qdel(O)
+ QDEL_IN(C, 10 SECONDS)
+ QDEL_IN(H, 10 SECONDS)
+ QDEL_IN(O, 10 SECONDS)
return 1
datum/unit_test/observation/moved_shall_registers_recursively_with_existing_listener
@@ -101,8 +101,8 @@ datum/unit_test/observation/moved_shall_registers_recursively_with_existing_list
else
fail("Recursive moved registration failed. Human listening to closet: [listening_to_closet] - Observer listening to human: [listening_to_human]")
- qdel(C)
- qdel(H)
- qdel(O)
+ QDEL_IN(C, 10 SECONDS)
+ QDEL_IN(H, 10 SECONDS)
+ QDEL_IN(O, 10 SECONDS)
return 1
diff --git a/code/unit_tests/ss_test.dm b/code/unit_tests/ss_test.dm
new file mode 100644
index 00000000000..3fdd3fe16cf
--- /dev/null
+++ b/code/unit_tests/ss_test.dm
@@ -0,0 +1,79 @@
+// This file exists so unit tests work with SMC.
+// It initializes last in the subsystem order, and queues
+// the tests to start about 20 seconds after init is done.
+
+#ifdef UNIT_TEST
+
+/datum/controller/subsystem/unit_tests
+ name = "Unit Tests"
+ init_order = -1e6 // last.
+ flags = SS_NO_FIRE
+
+/datum/controller/subsystem/unit_tests/Initialize(timeofday)
+ log_unit_test("Initializing Unit Testing")
+
+ //
+ //Start the Round.
+ //
+
+ world.save_mode("extended")
+
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/_ut_start_game), 10 SECONDS)
+
+/proc/_ut_start_game()
+ if (SSticker.current_state == GAME_STATE_PREGAME)
+ SSticker.current_state = GAME_STATE_SETTING_UP
+
+ log_unit_test("Round has been started.")
+
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/_ut_do_tests), 10 SECONDS)
+
+/proc/_ut_do_tests()
+ var/list/test_datums = typesof(/datum/unit_test)
+
+ var/list/async_test = list()
+ var/list/started_tests = list()
+
+ log_unit_test("Testing Started.")
+
+ for (var/test in test_datums)
+ var/datum/unit_test/d = new test()
+
+ if(d.disabled)
+ d.pass("[ascii_red]Check Disabled: [d.why_disabled]")
+ continue
+
+ if(findtext(d.name, "template"))
+ continue
+
+ if(isnull(d.start_test())) // Start the test.
+ d.fail("Test Runtimed")
+ if(d.async) // If it's async then we'll need to check back on it later.
+ async_test.Add(d)
+ total_unit_tests++
+
+ //
+ // Check the async tests to see if they are finished.
+ //
+
+ while(async_test.len)
+ for(var/datum/unit_test/test in async_test)
+ if(test.check_result())
+ async_test.Remove(test)
+ sleep(1)
+
+ //
+ // Make sure all Unit Tests reported a result
+ //
+
+ for(var/datum/unit_test/test in started_tests)
+ if(!test.reported)
+ test.fail("Test failed to report a result.")
+
+ if(all_unit_tests_passed)
+ log_unit_test("[ascii_green]**** All Unit Tests Passed \[[total_unit_tests]\] ****[ascii_reset]")
+ del world
+ else
+ log_unit_test("[ascii_red]**** \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed ****[ascii_reset]")
+ del world
+#endif
diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm
index dac62a552eb..e44da99a335 100644
--- a/code/unit_tests/unit_test.dm
+++ b/code/unit_tests/unit_test.dm
@@ -73,87 +73,3 @@ proc/load_unit_test_changes()
log_unit_test("Overiding Configuration option for Asteroid Generation to ENABLED")
config.generate_asteroid = 1 // The default map requires it, the example config doesn't have this enabled.
*/
-
-
-
-
-proc/initialize_unit_tests()
- log_unit_test("Initializing Unit Testing")
-
- //
- //Start the Round.
- //
-
- if(!ticker)
- crash_with("No Ticker")
- world.Del()
-
- var/said_msg = 0
- while(ticker.pregame_timeleft && ticker.pregame_timeleft > 160) // Make sure the initial startup is complete.
- if(ticker.pregame_timeleft < 175 && !said_msg)
- said_msg = 1
- log_unit_test("Pregame Count down has started, giving it 20 seconds to finish.")
- sleep(1)
-
- world.save_mode("extended")
-
- sleep(1)
-
- ticker.current_state = GAME_STATE_SETTING_UP
-
- log_unit_test("Round has been started. Waiting 10 seconds to start tests.")
- sleep(100)
-
- //
- // Run Tests
- //
-
- var/list/test_datums = typesof(/datum/unit_test)
-
- var/list/async_test = list()
- var/list/started_tests = list()
-
- log_unit_test("Testing Started.")
-
- for (var/test in test_datums)
- var/datum/unit_test/d = new test()
-
- if(d.disabled)
- d.pass("[ascii_red]Check Disabled: [d.why_disabled]")
- continue
-
- if(findtext(d.name, "template"))
- continue
-
- if(isnull(d.start_test())) // Start the test.
- d.fail("Test Runtimed")
- if(d.async) // If it's async then we'll need to check back on it later.
- async_test.Add(d)
- total_unit_tests++
-
-
-
- //
- // Check the async tests to see if they are finished.
- //
-
- while(async_test.len)
- for(var/datum/unit_test/test in async_test)
- if(test.check_result())
- async_test.Remove(test)
- sleep(1)
-
- //
- // Make sure all Unit Tests reported a result
- //
-
- for(var/datum/unit_test/test in started_tests)
- if(!test.reported)
- test.fail("Test failed to report a result.")
-
- if(all_unit_tests_passed)
- log_unit_test("[ascii_green]**** All Unit Tests Passed \[[total_unit_tests]\] ****[ascii_reset]")
- world.Del()
- else
- log_unit_test("[ascii_red]**** \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed ****[ascii_reset]")
- world.Del()
diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm
index 81d0179b2a5..0772f9f1c26 100644
--- a/code/unit_tests/zas_tests.dm
+++ b/code/unit_tests/zas_tests.dm
@@ -126,15 +126,13 @@ datum/unit_test/zas_area_test/arrival_maint
datum/unit_test/zas_area_test/mining_shuttle_at_station
name = "ZAS: Mining Shuttle (Station)"
area_path = /area/shuttle/mining/station
+ disabled = 1
+ why_disabled = "This test has not been updated for newmap."
datum/unit_test/zas_area_test/
name = "ZAS: Cargo Maintenance"
area_path = /area/maintenance/cargo
-datum/unit_test/zas_area_test/eng_shuttle
- name = "ZAS: Construction Site Shuttle (Station)"
- area_path = /area/shuttle/constructionsite/station
-
datum/unit_test/zas_area_test/incinerator
name = "ZAS: Incinerator"
area_path = /area/maintenance/incinerator
@@ -149,13 +147,16 @@ datum/unit_test/zas_area_test/xenobio
name = "ZAS: Xenobiology"
area_path = /area/rnd/xenobiology
+/* Hey, this area doesn't exist on the Aurora II.
datum/unit_test/zas_area_test/research_maint_starboard
name = "ZAS: Research Starboard Maintenance"
area_path = /area/maintenance/research_starboard
+ Nor does this one.
datum/unit_test/zas_area_test/west_hall_mining_outpost
name = "ZAS: Mining outpost West Hallway"
area_path = /area/outpost/mining_main/west_hall
+*/
/*
datum/unit_test/zas_area_test/mining_area
@@ -178,6 +179,8 @@ datum/unit_test/zas_area_test/
datum/unit_test/zas_supply_shuttle_moved
name = "ZAS: Supply Shuttle (When Moved)"
async=1 // We're moving the shuttle using built in procs.
+ disabled = 1
+ why_disabled = "This test has not been updated for newmap."
var/datum/shuttle/ferry/supply/Shuttle = null
@@ -189,7 +192,7 @@ datum/unit_test/zas_supply_shuttle_moved/start_test()
fail("Shuttle Controller not setup at time of test.")
Shuttle = shuttle_controller.shuttles["Supply"]
- supply_controller.movetime = 5 // Speed up the shuttle movement.
+ SScargo.movetime = 5 // Speed up the shuttle movement.
if(isnull(Shuttle))
fail("Unable to locate the supply shuttle")
diff --git a/code/world.dm b/code/world.dm
index 66db0ad5a1a..60e826f2a9c 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -6,16 +6,12 @@
1. All global variables are initialized (including the global_init instance).
2. The map is initialized, and map objects are created.
- 3. world/New() runs, creating the process scheduler (and the old master controller) and spawning their setup.
- 4. processScheduler/setup() runs, creating all the processes. game_controller/setup() runs, calling initialize() on all movable atoms in the world.
- 5. The gameticker is created.
+ 3. world/New() runs, creating & starting the master controller.
+ 4. The master controller initializes the rest of the game.
*/
var/global/datum/global_init/init = new ()
-// The list of objects that will need to be initialized in ticker creation.
-var/global/list/objects_init_list = list()
-
/*
Pre-map initialization stuff should go here.
*/
@@ -29,6 +25,11 @@ var/global/list/objects_init_list = list()
initialize_chemical_reactions()
qdel(src) //we're done
+ init = null
+
+/datum/global_init/Destroy()
+ ..()
+ return 3 // QDEL_HINT_HARDDEL ain't defined here, so magic number it is.
/var/game_id = null
/proc/generate_gameid()
@@ -87,53 +88,16 @@ var/global/list/objects_init_list = list()
. = ..()
-#ifndef UNIT_TEST
-
- sleep_offline = 1
-
-#else
+#ifdef UNIT_TEST
log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.")
load_unit_test_changes()
#endif
- // Set up roundstart seed list.
- plant_controller = new()
+ // Do not add initialization stuff to this file, unless it *must* run before the MC initializes!
+ // (hint: you generally won't need this)
+ // To do things on server-start, create a subsystem or shove it into one of the miscellaneous init subsystems.
- // This is kinda important. Set up details of what the hell things are made of.
- populate_material_list()
-
- if(config.generate_asteroid)
- // These values determine the specific area that the map is applied to.
- // If you do not use the official Baycode moonbase map, you will need to change them.
- //Create the mining Z-level.
- new /datum/random_map/automata/cave_system(null,1,1,5,255,255)
- //new /datum/random_map/noise/volcanism(null,1,1,5,255,255) // Not done yet! Pretty, though.
- // Create the mining ore distribution map.
- new /datum/random_map/noise/ore(null, 1, 1, 5, 64, 64)
- // Update all turfs to ensure everything looks good post-generation. Yes,
- // it's brute-forcey, but frankly the alternative is a mine turf rewrite.
-
- // Create autolathe recipes, as above.
- populate_lathe_recipes()
-
- // Create robolimbs for chargen.
- populate_robolimb_list()
-
- processScheduler = new
- master_controller = new /datum/controller/game_controller()
- spawn(1)
- processScheduler.deferSetupFor(/datum/controller/process/ticker)
- processScheduler.setup()
- master_controller.setup()
-#ifdef UNIT_TEST
- initialize_unit_tests()
-#endif
-
-
-
- spawn(3000) //so we aren't adding to the round-start lag
- if(config.ToRban)
- ToRban_autoupdate()
+ Master.Initialize(10, FALSE)
#undef RECOMMENDED_VERSION
@@ -150,10 +114,10 @@ var/list/world_api_rate_limit = list()
log_debug("API: Request Received - from:[addr], master:[master], key:[key]")
diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key], auth:[auth] [log_end]"
- if (!ticker) //If the game is not started most API Requests would not work because of the throtteling
+ /*if (!SSticker) //If the game is not started most API Requests would not work because of the throtteling
response["statuscode"] = 500
response["response"] = "Game not started yet!"
- return json_encode(response)
+ return json_encode(response)*/
if (isnull(query))
log_debug("API - Bad Request - No query specified")
@@ -210,7 +174,7 @@ var/list/world_api_rate_limit = list()
world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy
*/
- processScheduler.stop()
+ Master.Shutdown()
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
for(var/client/C in clients)
@@ -348,7 +312,7 @@ var/inerror = 0
var/list/features = list()
- if(ticker)
+ if(Master.initializing)
if(master_mode)
features += master_mode
else
diff --git a/config/example/config.txt b/config/example/config.txt
index 6685da1a160..84f0ab098a7 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -436,7 +436,12 @@ API_RATE_LIMIT 50
## IPs are separated by ;
API_RATE_LIMIT_WHITELIST 127.0.0.1
+# The maximum amount of a tick that the MC is permitted to use during server startup.
+# If not set will default to 98%.
+#MC_TICKLIMIT_INIT 98
+
+
## GELF Logging Configuration
LOG_GELF_ENABLED 0
LOG_GELF_IP 192.168.100.80
-LOG_GELF_PORT 12201
\ No newline at end of file
+LOG_GELF_PORT 12201
diff --git a/html/changelogs/LordFowl - VaurcaBug1.yml b/html/changelogs/LordFowl - VaurcaBug1.yml
new file mode 100644
index 00000000000..f0acaa6e520
--- /dev/null
+++ b/html/changelogs/LordFowl - VaurcaBug1.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: N3X15
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Fixed Vaurca not spawning with appropriate footwear."
+ - bugfix: "Fixed K'ois Spores not properly spawning in hydroponics."
diff --git a/html/changelogs/arrow768-crusher.yml b/html/changelogs/arrow768-crusher.yml
new file mode 100644
index 00000000000..833ce0303d5
--- /dev/null
+++ b/html/changelogs/arrow768-crusher.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Arrow768
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added the crusher."
diff --git a/html/changelogs/lohikar-smc.yml b/html/changelogs/lohikar-smc.yml
new file mode 100644
index 00000000000..0cf86d2d8bb
--- /dev/null
+++ b/html/changelogs/lohikar-smc.yml
@@ -0,0 +1,55 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Lohikar
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - experiment: "Replaced our master controller & ProcessScheduler with /tg/'s StonedMC, which should lead to better overall server performance."
+ - tweak: "Added lag-checks to the Singularity."
+ - tweak: "Tesla beams now travel between objects instantly instead of bouncing."
+ - tweak: "Tesla mini-balls will increase the Tesla's bolt rate instead of increasing the energy per bolt."
+ - tweak: "The Tesla will now lose power over time like the singularity if not powered with a particle accelerator."
+ - imageadd: "Tweaked how lattices' icons are generated."
+ - experiment: "Added lagchecks to ZAS & Airflow."
+ - bugfix: "Fixed a bug where paper's icon did not update in certain cases."
+ - tweak: "Conveyor belts' switches are now more responsive."
+ - experiment: "Refactored a lot of backend code which should lead to better performance or improved response times for certain objects. See the PR on GitHub for details."
+ - tweak: "Slowed down blob growth a bit."
+ - experiment: "Reworked how the server boots up; server restarts should be significantly faster."
+ - tweak: "Added some lag-checks to quick-pickup bags so they won't lag the entire server."
+ - experiment: "Changed how the server sends some resource files to clients in an effort to reduce connection delay."
+ - experiment: "Made some tweaks to the server's decision-making process for when to run lighting updates in an effort to reduce lag."
+ - tweak: "Reduced APC icon update delay."
+ - tweak: "Exosuit fabricators' material insert animation is now colored based on what material is being inserted into the fabricator."
+ - tweak: "Fixed a regression in lighting performance caused by a fix for infinite darkness."
+ - tweak: "Tweaked how some common shades of lighting are drawn client-side in an effort to improve client-side performance in common situations."
+ - tweak: "Tweaked how queued lighting updates are processed, allowing the lighting engine to do partial lighting updates instead of always doing a complete update cycle."
diff --git a/html/changelogs/lohikar-smcnm.yml b/html/changelogs/lohikar-smcnm.yml
new file mode 100644
index 00000000000..323ede89216
--- /dev/null
+++ b/html/changelogs/lohikar-smcnm.yml
@@ -0,0 +1,5 @@
+author: Lohikar
+delete-after: True
+changes:
+ - rscadd: "Added a new icon generation system for openturfs, allowing mobs & objects below to be drawn in real-time without a meaningful performance impact."
+ - tweak: "Added a safety check to prevent admin commands from starting the game before server initialization has completed."
diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi
index 521aea66d40..894ad6365a9 100644
Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ
diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi
index d0d43312a53..897eaf53a50 100644
Binary files a/icons/effects/lighting_overlay.dmi and b/icons/effects/lighting_overlay.dmi differ
diff --git a/icons/effects/projectiles.dmi b/icons/effects/projectiles.dmi
index 10d8f489ade..83ee8e92bd9 100644
Binary files a/icons/effects/projectiles.dmi and b/icons/effects/projectiles.dmi differ
diff --git a/icons/mecha/mech_bay.dmi b/icons/mecha/mech_bay.dmi
index 2be6a4bd7d9..a45960b58fd 100644
Binary files a/icons/mecha/mech_bay.dmi and b/icons/mecha/mech_bay.dmi differ
diff --git a/icons/misc/beach.dmi b/icons/misc/beach.dmi
index 4caa0d10d77..3e9ad2ef433 100644
Binary files a/icons/misc/beach.dmi and b/icons/misc/beach.dmi differ
diff --git a/icons/misc/openspace.dmi b/icons/misc/openspace.dmi
new file mode 100644
index 00000000000..006e59e6c0d
Binary files /dev/null and b/icons/misc/openspace.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index ecb15c81417..188266bc48d 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/cavern.dmi b/icons/mob/cavern.dmi
new file mode 100644
index 00000000000..e781b837aa0
Binary files /dev/null and b/icons/mob/cavern.dmi differ
diff --git a/icons/mob/held_mobs.dmi b/icons/mob/held_mobs.dmi
index c25c4b7c68e..6dcd071c52b 100644
Binary files a/icons/mob/held_mobs.dmi and b/icons/mob/held_mobs.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index bbbe3e86e39..523f03086ce 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 28aa9c74a2e..e77b65917b8 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index 1815c4b15ad..10b053ee228 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi
index 8b9cad0bffa..3519217d2db 100644
Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ
diff --git a/icons/obj/banner.dmi b/icons/obj/banner.dmi
new file mode 100644
index 00000000000..38b3351ebc2
Binary files /dev/null and b/icons/obj/banner.dmi differ
diff --git a/icons/obj/cart.dmi b/icons/obj/cart.dmi
new file mode 100644
index 00000000000..b2d219592a2
Binary files /dev/null and b/icons/obj/cart.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index bb53ac22ffb..5c5f54f644b 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index f8c2746755d..b892ff1d673 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi
index 353d39ba989..494ae65ad49 100644
Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ
diff --git a/icons/obj/doors/DoorHazard.dmi b/icons/obj/doors/DoorHazard.dmi
index 35f4c474bf3..7f6114aa2e3 100644
Binary files a/icons/obj/doors/DoorHazard.dmi and b/icons/obj/doors/DoorHazard.dmi differ
diff --git a/icons/obj/doors/DoorSAC.dmi b/icons/obj/doors/DoorSAC.dmi
new file mode 100644
index 00000000000..c1f0ade52a5
Binary files /dev/null and b/icons/obj/doors/DoorSAC.dmi differ
diff --git a/icons/obj/doors/doorlift.dmi b/icons/obj/doors/doorlift.dmi
new file mode 100644
index 00000000000..3b037a89568
Binary files /dev/null and b/icons/obj/doors/doorlift.dmi differ
diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi
index 852c69bc3aa..4210cb891a5 100644
Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 77e08f2b402..fd0618fd340 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/machines/SpaceShip.dmi b/icons/obj/machines/SpaceShip.dmi
new file mode 100644
index 00000000000..fb7f84f410d
Binary files /dev/null and b/icons/obj/machines/SpaceShip.dmi differ
diff --git a/icons/obj/machines/crusherbase.dmi b/icons/obj/machines/crusherbase.dmi
new file mode 100644
index 00000000000..cea8c97a4cb
Binary files /dev/null and b/icons/obj/machines/crusherbase.dmi differ
diff --git a/icons/obj/machines/crusherpiston.dmi b/icons/obj/machines/crusherpiston.dmi
new file mode 100644
index 00000000000..37784e6a5c2
Binary files /dev/null and b/icons/obj/machines/crusherpiston.dmi differ
diff --git a/icons/obj/machines/floor_light.dmi b/icons/obj/machines/floor_light.dmi
index c2386492806..bcdb8413045 100644
Binary files a/icons/obj/machines/floor_light.dmi and b/icons/obj/machines/floor_light.dmi differ
diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi
index af660e2475e..51b639afe02 100644
Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ
diff --git a/icons/obj/machines/particle_accelerator.dmi b/icons/obj/machines/particle_accelerator.dmi
index c601b8d1b6a..54180bf7b70 100644
Binary files a/icons/obj/machines/particle_accelerator.dmi and b/icons/obj/machines/particle_accelerator.dmi differ
diff --git a/icons/obj/meteor.dmi b/icons/obj/meteor.dmi
index b9a83d510ef..8cf4eafcae2 100644
Binary files a/icons/obj/meteor.dmi and b/icons/obj/meteor.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 213946eb68b..6817043e1ae 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/mining_contained.dmi b/icons/obj/mining_contained.dmi
new file mode 100644
index 00000000000..26531af6000
Binary files /dev/null and b/icons/obj/mining_contained.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index dc1fa69de3e..d33b682de2f 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi
index c53e7823cab..77e76430b15 100644
Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ
diff --git a/icons/obj/sac.dmi b/icons/obj/sac.dmi
new file mode 100644
index 00000000000..7f943f83c47
Binary files /dev/null and b/icons/obj/sac.dmi differ
diff --git a/icons/obj/smooth/lattice.dmi b/icons/obj/smooth/lattice.dmi
new file mode 100644
index 00000000000..5adab0caf1b
Binary files /dev/null and b/icons/obj/smooth/lattice.dmi differ
diff --git a/icons/obj/smoothtrack.dmi b/icons/obj/smoothtrack.dmi
new file mode 100644
index 00000000000..f238330684a
Binary files /dev/null and b/icons/obj/smoothtrack.dmi differ
diff --git a/icons/obj/stairs.dmi b/icons/obj/stairs.dmi
index d29408d8808..73aedef1472 100644
Binary files a/icons/obj/stairs.dmi and b/icons/obj/stairs.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 6b22cffe5ee..3c10bf00818 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index c2fa9ddbc98..628904b1863 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/turbolift.dmi b/icons/obj/turbolift.dmi
new file mode 100644
index 00000000000..cffc8aa140c
Binary files /dev/null and b/icons/obj/turbolift.dmi differ
diff --git a/icons/obj/turbolift_preview_2x2.dmi b/icons/obj/turbolift_preview_2x2.dmi
new file mode 100644
index 00000000000..f0f1ec491e1
Binary files /dev/null and b/icons/obj/turbolift_preview_2x2.dmi differ
diff --git a/icons/obj/turbolift_preview_3x3.dmi b/icons/obj/turbolift_preview_3x3.dmi
new file mode 100644
index 00000000000..443a6fb1324
Binary files /dev/null and b/icons/obj/turbolift_preview_3x3.dmi differ
diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi
index e70275591fc..cbb58bb9fb7 100644
Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 7f2133ab83c..78b2dfbe5b6 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi
index 38ed502aed7..6c237f33b12 100644
Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ
diff --git a/icons/turf/cliff.dmi b/icons/turf/cliff.dmi
new file mode 100644
index 00000000000..4db912e9455
Binary files /dev/null and b/icons/turf/cliff.dmi differ
diff --git a/icons/turf/flooring/asteroid.dmi b/icons/turf/flooring/asteroid.dmi
index 293c991c173..438eeb5a18a 100644
Binary files a/icons/turf/flooring/asteroid.dmi and b/icons/turf/flooring/asteroid.dmi differ
diff --git a/icons/turf/flooring/decals.dmi b/icons/turf/flooring/decals.dmi
index c5b2a54b0b4..d095873334e 100644
Binary files a/icons/turf/flooring/decals.dmi and b/icons/turf/flooring/decals.dmi differ
diff --git a/icons/turf/flooring/plating.dmi b/icons/turf/flooring/plating.dmi
index ca7394380a1..48820f62c89 100644
Binary files a/icons/turf/flooring/plating.dmi and b/icons/turf/flooring/plating.dmi differ
diff --git a/icons/turf/flooring/tiles.dmi b/icons/turf/flooring/tiles.dmi
index 7d160b70708..e94c78f6b72 100644
Binary files a/icons/turf/flooring/tiles.dmi and b/icons/turf/flooring/tiles.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index d66ddc0b5cf..3c1a4e37367 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/smooth/ash.dmi b/icons/turf/smooth/ash.dmi
new file mode 100644
index 00000000000..718cd120194
Binary files /dev/null and b/icons/turf/smooth/ash.dmi differ
diff --git a/icons/turf/smooth/cult_wall.dmi b/icons/turf/smooth/cult_wall.dmi
new file mode 100644
index 00000000000..5239f7b1e06
Binary files /dev/null and b/icons/turf/smooth/cult_wall.dmi differ
diff --git a/icons/turf/smooth/riveted.dmi b/icons/turf/smooth/riveted.dmi
new file mode 100644
index 00000000000..90d1e96297b
Binary files /dev/null and b/icons/turf/smooth/riveted.dmi differ
diff --git a/icons/turf/smooth/rock_wall.dmi b/icons/turf/smooth/rock_wall.dmi
new file mode 100644
index 00000000000..c07657149ac
Binary files /dev/null and b/icons/turf/smooth/rock_wall.dmi differ
diff --git a/icons/turf/total_floors.dmi b/icons/turf/total_floors.dmi
new file mode 100644
index 00000000000..4cf1ecea6ef
Binary files /dev/null and b/icons/turf/total_floors.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index 24ff726d2f4..1bfa504b035 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 4ee3988958a..e2cf8f873d1 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -1953,6 +1953,32 @@ window "outputwindow"
enable-http-images = false
max-lines = 0
image = ""
+ elem "asset_cache_browser"
+ type = BROWSER
+ pos = 0,0
+ size = 200x200
+ anchor1 = none
+ anchor2 = none
+ font-family = ""
+ font-size = 0
+ font-style = ""
+ text-color = #000000
+ background-color = none
+ is-visible = false
+ is-disabled = false
+ is-transparent = false
+ is-default = false
+ border = none
+ drop-zone = false
+ right-click = false
+ saved-params = ""
+ on-size = ""
+ show-history = false
+ show-url = false
+ auto-format = true
+ use-title = false
+ on-show = ""
+ on-hide = ""
window "rpane"
elem "rpane"
diff --git a/maps/Aurora-MapDev/aurora-0.dmm b/maps/Aurora-MapDev/aurora-0.dmm
new file mode 100644
index 00000000000..d80863955f0
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-0.dmm
@@ -0,0 +1,2519 @@
+"aa" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns15,/area/space)
+"ab" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"ac" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"ad" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns8,/area/space)
+"ae" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"af" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"ag" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns3,/area/space)
+"ah" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"ai" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns14,/area/space)
+"aj" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns4,/area/space)
+"ak" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"al" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns1,/area/space)
+"am" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns2,/area/space)
+"an" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"ao" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"ap" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"aq" = (/turf/space/transit/east/shuttlespace_ew13,/area/space)
+"ar" = (/turf/space/transit/east/shuttlespace_ew14,/area/space)
+"as" = (/turf/space/transit/east/shuttlespace_ew15,/area/space)
+"at" = (/turf/space/transit/east/shuttlespace_ew1,/area/space)
+"au" = (/turf/space/transit/east/shuttlespace_ew2,/area/space)
+"av" = (/turf/space/transit/east/shuttlespace_ew3,/area/space)
+"aw" = (/turf/space/transit/east/shuttlespace_ew4,/area/space)
+"ax" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew5,/area/space)
+"ay" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew7,/area/space)
+"az" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew6,/area/space)
+"aA" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew9,/area/space)
+"aB" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew8,/area/space)
+"aC" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew11,/area/space)
+"aD" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew10,/area/space)
+"aE" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew13,/area/space)
+"aF" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew12,/area/space)
+"aG" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew15,/area/space)
+"aH" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew14,/area/space)
+"aI" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew2,/area/space)
+"aJ" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew1,/area/space)
+"aK" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew4,/area/space)
+"aL" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew3,/area/space)
+"aM" = (/turf/space{icon_state = "black"},/area/space)
+"aN" = (/turf/space,/area/space)
+"aO" = (/turf/unsimulated/wall/riveted,/area/prison/solitary)
+"aP" = (/turf/unsimulated/wall/riveted,/area/space)
+"aQ" = (/turf/unsimulated/wall,/area/space)
+"aR" = (/obj/structure/window/reinforced,/turf/unsimulated/wall/riveted,/area/space)
+"aS" = (/turf/space/transit/north/shuttlespace_ns8,/area/space)
+"aT" = (/turf/space/transit/north/shuttlespace_ns4,/area/space)
+"aU" = (/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"aV" = (/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"aW" = (/turf/space/transit/north/shuttlespace_ns2,/area/space)
+"aX" = (/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"aY" = (/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"aZ" = (/turf/space/transit/north/shuttlespace_ns14,/area/space)
+"ba" = (/turf/space/transit/north/shuttlespace_ns3,/area/space)
+"bb" = (/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"bc" = (/turf/space/transit/north/shuttlespace_ns15,/area/space)
+"bd" = (/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"be" = (/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"bf" = (/turf/space/transit/north/shuttlespace_ns1,/area/space)
+"bg" = (/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"bh" = (/turf/space/transit/east/shuttlespace_ew5,/area/space)
+"bi" = (/turf/space/transit/east/shuttlespace_ew6,/area/space)
+"bj" = (/turf/space/transit/east/shuttlespace_ew7,/area/space)
+"bk" = (/turf/space/transit/east/shuttlespace_ew8,/area/space)
+"bl" = (/turf/space/transit/east/shuttlespace_ew10,/area/space)
+"bm" = (/turf/space/transit/east/shuttlespace_ew11,/area/space)
+"bn" = (/turf/space/transit/east/shuttlespace_ew12,/area/space)
+"bo" = (/turf/space/transit/east/shuttlespace_ew9,/area/space)
+"bp" = (/obj/structure/bed,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
+"bq" = (/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
+"br" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
+"bs" = (/obj/structure/bed,/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary)
+"bt" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
+"bu" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall/riveted,/area/space)
+"bv" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall,/area/space)
+"bw" = (/turf/simulated/floor/holofloor/desert,/area/space)
+"bx" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/desert,/area/space)
+"by" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall/riveted,/area/space)
+"bz" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass,/area/space)
+"bA" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass,/area/space)
+"bB" = (/obj/structure/table/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/hairflower,/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"bC" = (/obj/effect/landmark/costume,/obj/structure/table/rack/holorack,/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"bD" = (/turf/simulated/floor/holofloor/tiled,/area/space)
+"bE" = (/obj/structure/window/reinforced/holowindow{dir = 4},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/holofloor/tiled,/area/space)
+"bF" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space)
+"bG" = (/turf/simulated/floor/holofloor/reinforced,/area/space)
+"bH" = (/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"bI" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled,/area/space)
+"bJ" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"bK" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space)
+"bL" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space)
+"bM" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space)
+"bN" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall/riveted,/area/space)
+"bO" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
+"bP" = (/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary)
+"bQ" = (/turf/unsimulated/floor{icon_state = "platingdmg3"},/area/prison/solitary)
+"bR" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/desert,/area/space)
+"bS" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass,/area/space)
+"bT" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass,/area/space)
+"bU" = (/obj/machinery/door/window/holowindoor,/turf/simulated/floor/holofloor/tiled,/area/space)
+"bV" = (/turf/simulated/floor/holofloor/wood,/area/space)
+"bW" = (/obj/effect/landmark{name = "Holocarp Spawn"},/turf/simulated/floor/holofloor/reinforced,/area/space)
+"bX" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/holofloor/tiled,/area/space)
+"bY" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/holofloor/tiled,/area/space)
+"bZ" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/holofloor/grass,/area/space)
+"ca" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/space)
+"cb" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/space)
+"cc" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{icon_state = "spline_fancy_corner";dir = 8},/turf/simulated/floor/holofloor/grass,/area/space)
+"cd" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"ce" = (/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/space)
+"cf" = (/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/window/reinforced/holowindow{dir = 8},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space)
+"cg" = (/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space)
+"ch" = (/obj/machinery/door/window/holowindoor{dir = 1;name = "Jury Box"},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space)
+"ci" = (/obj/machinery/door/window/holowindoor{name = "Red Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"cj" = (/obj/structure/bed,/turf/unsimulated/floor{icon_state = "panelscorched"},/area/prison/solitary)
+"ck" = (/obj/structure/bed,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating"},/area/prison/solitary)
+"cl" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 6},/turf/simulated/floor/holofloor/grass,/area/space)
+"cm" = (/obj/effect/decal/cleanable/dirt,/obj/structure/holostool,/turf/simulated/floor/holofloor/desert,/area/space)
+"cn" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/desert,/area/space)
+"co" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 8},/turf/simulated/floor/holofloor/grass,/area/space)
+"cp" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space)
+"cq" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cr" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{dir = 1;name = "Court Reporter's Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/space)
+"cs" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/wood,/area/space)
+"ct" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/turf/simulated/floor/holofloor/wood,/area/space)
+"cu" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/wood,/area/space)
+"cv" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{base_state = "right";dir = 1;icon_state = "right";name = "Witness Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/space)
+"cw" = (/obj/structure/window/reinforced/holowindow{dir = 8},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/space)
+"cx" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cy" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet/corners{icon_state = "carpet_corners";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cz" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"cA" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space)
+"cB" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"cC" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space)
+"cD" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space)
+"cE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"cF" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"cG" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"cH" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space)
+"cI" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/wall/riveted,/area/prison/solitary)
+"cJ" = (/turf/unsimulated/floor{icon_state = "platingdmg1"},/area/prison/solitary)
+"cK" = (/turf/unsimulated/floor{icon_state = "floorscorched2"},/area/prison/solitary)
+"cL" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/desert,/area/space)
+"cM" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 8},/turf/simulated/floor/holofloor/grass,/area/space)
+"cN" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cO" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cP" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cQ" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cR" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cS" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cT" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"cU" = (/turf/space,/area/shuttle/escape/transit)
+"cV" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cW" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/carpet,/area/space)
+"cX" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cY" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space)
+"cZ" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/carpet,/area/space)
+"da" = (/turf/simulated/floor/holofloor/carpet,/area/space)
+"db" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dc" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/holofloor/tiled,/area/space)
+"dd" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/holofloor/tiled,/area/space)
+"de" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"df" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space)
+"dg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space,/area/space)
+"dh" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 1},/turf/simulated/floor/holofloor/grass,/area/space)
+"di" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 5},/turf/simulated/floor/holofloor/grass,/area/space)
+"dj" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy";dir = 1},/turf/simulated/floor/holofloor/grass,/area/space)
+"dk" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dl" = (/obj/structure/bed/chair/holochair{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dm" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dn" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"do" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{icon_state = "spline_fancy_corner";dir = 1},/turf/simulated/floor/holofloor/grass,/area/space)
+"dp" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{icon_state = "spline_fancy_corner";dir = 4},/turf/simulated/floor/holofloor/grass,/area/space)
+"dq" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dr" = (/obj/machinery/door/window/holowindoor{base_state = "right";icon_state = "right"},/turf/simulated/floor/holofloor/tiled,/area/space)
+"ds" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dt" = (/obj/machinery/door/window/holowindoor{base_state = "right";icon_state = "right";name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"du" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew3,/area/space)
+"dv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew2,/area/space)
+"dw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew5,/area/space)
+"dx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew4,/area/space)
+"dy" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew7,/area/space)
+"dz" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew6,/area/space)
+"dA" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew9,/area/space)
+"dB" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew8,/area/space)
+"dC" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew14,/area/space)
+"dD" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew10,/area/space)
+"dE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew15,/area/space)
+"dF" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dG" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/space)
+"dH" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dI" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dJ" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/turf/simulated/floor/holofloor/carpet,/area/space)
+"dK" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space)
+"dL" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew11,/area/space)
+"dM" = (/turf/space/transit/east/shuttlespace_ew7,/area/shuttle/arrival/transit)
+"dN" = (/turf/space/transit/east/shuttlespace_ew8,/area/shuttle/arrival/transit)
+"dO" = (/turf/space/transit/east/shuttlespace_ew9,/area/shuttle/arrival/transit)
+"dP" = (/turf/space/transit/east/shuttlespace_ew10,/area/shuttle/arrival/transit)
+"dQ" = (/turf/space/transit/east/shuttlespace_ew11,/area/shuttle/arrival/transit)
+"dR" = (/turf/space/transit/east/shuttlespace_ew12,/area/shuttle/arrival/transit)
+"dS" = (/turf/space/transit/east/shuttlespace_ew13,/area/shuttle/arrival/transit)
+"dT" = (/turf/space/transit/east/shuttlespace_ew14,/area/shuttle/arrival/transit)
+"dU" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/arrival/transit)
+"dV" = (/turf/space/transit/east/shuttlespace_ew1,/area/shuttle/arrival/transit)
+"dW" = (/turf/space/transit/east/shuttlespace_ew2,/area/shuttle/arrival/transit)
+"dX" = (/turf/space/transit/east/shuttlespace_ew3,/area/shuttle/arrival/transit)
+"dY" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/holofloor/tiled,/area/space)
+"dZ" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space)
+"ea" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/turf/simulated/floor/holofloor/carpet,/area/space)
+"eb" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/space)
+"ec" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/turf/simulated/floor/holofloor/carpet,/area/space)
+"ed" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/holofloor/tiled,/area/space)
+"ee" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space)
+"ef" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"eg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew1,/area/space)
+"eh" = (/turf/space/transit/east/shuttlespace_ew6,/area/shuttle/arrival/transit)
+"ei" = (/turf/unsimulated/wall{icon_state = "iron7"},/area/space)
+"ej" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall/riveted,/area/space)
+"ek" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall/riveted,/area/space)
+"el" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"em" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"en" = (/turf/space/transit/east/shuttlespace_ew4,/area/shuttle/arrival/transit)
+"eo" = (/turf/space/transit/east/shuttlespace_ew5,/area/shuttle/arrival/transit)
+"ep" = (/turf/simulated/floor/holofloor/space,/area/space)
+"eq" = (/turf/simulated/floor/holofloor/snow,/area/space)
+"er" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/holofloor/wood,/area/space)
+"es" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space)
+"et" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space)
+"eu" = (/obj/structure/holohoop,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space)
+"ev" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space)
+"ew" = (/turf/simulated/floor/beach/sand{icon_state = "desert1"},/area/space)
+"ex" = (/turf/simulated/floor/beach/sand{icon_state = "desert"},/area/space)
+"ey" = (/turf/simulated/floor/beach/sand{icon_state = "desert4"},/area/space)
+"ez" = (/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space)
+"eA" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space)
+"eB" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space)
+"eC" = (/obj/structure/table/holotable,/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space)
+"eD" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"eE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space)
+"eF" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"eG" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space)
+"eH" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"eI" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/east/shuttlespace_ew13,/area/space)
+"eJ" = (/obj/effect/landmark{name = "Holocarp Spawn Random"},/turf/simulated/floor/holofloor/space,/area/space)
+"eK" = (/obj/structure/flora/grass/both,/turf/simulated/floor/holofloor/snow,/area/space)
+"eL" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/space)
+"eM" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 10},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space)
+"eN" = (/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 6},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space)
+"eO" = (/turf/simulated/floor/beach/sand{icon_state = "desert3"},/area/space)
+"eP" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/beach/sand{icon_state = "desert"},/area/space)
+"eQ" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"eR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space)
+"eS" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor/snow,/area/space)
+"eT" = (/obj/effect/overlay/palmtree_l,/obj/effect/overlay/coconut,/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space)
+"eU" = (/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space)
+"eV" = (/obj/machinery/door/window/holowindoor{base_state = "right";dir = 2;icon_state = "right";name = "Red Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"eW" = (/obj/structure/window/reinforced/holowindow,/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"eX" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space)
+"eY" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor/snow,/area/space)
+"eZ" = (/turf/simulated/floor/holofloor/lino,/area/space)
+"fa" = (/obj/item/weapon/beach_ball,/turf/simulated/floor/beach/sand{icon_state = "desert0"},/area/space)
+"fb" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"fc" = (/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"fd" = (/obj/structure/flora/grass/green,/turf/simulated/floor/holofloor/snow,/area/space)
+"fe" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 8},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 9},/turf/simulated/floor/holofloor/carpet,/area/space)
+"ff" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/turf/simulated/floor/holofloor/carpet,/area/space)
+"fg" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 1},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 4},/obj/effect/floor_decal/carpet{icon_state = "carpet_edges";dir = 5},/turf/simulated/floor/holofloor/carpet,/area/space)
+"fh" = (/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/holofloor/tiled,/area/space)
+"fi" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fj" = (/obj/item/weapon/beach_ball/holoball,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fk" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fl" = (/obj/item/weapon/inflatable_duck,/turf/simulated/floor/beach/sand{icon_state = "desert"},/area/space)
+"fm" = (/turf/simulated/floor/beach/sand{icon_state = "beachcorner";dir = 2},/area/space)
+"fn" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fo" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fp" = (/turf/simulated/floor/beach/sand{icon_state = "beach"},/area/space)
+"fq" = (/turf/simulated/floor/beach/sand{icon_state = "beachcorner";dir = 1},/area/space)
+"fr" = (/turf/simulated/floor/beach/sand{icon_state = "beach";dir = 6},/area/space)
+"fs" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/holofloor/tiled,/area/space)
+"ft" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fu" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fv" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/holofloor/tiled,/area/space)
+"fw" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fx" = (/turf/simulated/floor/beach/sand{icon_state = "seashallow";dir = 2},/area/space)
+"fy" = (/turf/simulated/floor/beach/sand{icon_state = "beach";dir = 10},/area/space)
+"fz" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fA" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fB" = (/obj/structure/flora/grass/brown,/turf/simulated/floor/holofloor/snow,/area/space)
+"fC" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"fD" = (/obj/machinery/door/window/holowindoor{dir = 1;name = "Green Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"fE" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"fF" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/space)
+"fG" = (/obj/structure/holohoop{dir = 1},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fH" = (/obj/structure/table/holotable,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/space)
+"fI" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fJ" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/holofloor/tiled,/area/space)
+"fK" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen";item_state = "boxinggreen"},/turf/simulated/floor/holofloor/tiled/dark,/area/space)
+"fL" = (/turf/unsimulated/wall{icon_state = "iron5"},/area/space)
+"fM" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall/riveted,/area/space)
+"fN" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"fO" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space)
+"fP" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"fQ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"fR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space)
+"fS" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;stopper = 0;tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space)
+"fT" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdownside";nostop = 1;tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space)
+"fU" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space)
+"fV" = (/turf/space/transit/north/shuttlespace_ns14,/area/shuttle/escape/transit)
+"fW" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape/transit)
+"fX" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape/transit)
+"fY" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape/transit)
+"fZ" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape/transit)
+"ga" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/syndicate_mothership)
+"gb" = (/turf/unsimulated/wall/riveted,/area/syndicate_mothership)
+"gc" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership)
+"gd" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership)
+"ge" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership)
+"gf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership)
+"gg" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership)
+"gh" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership)
+"gi" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate_elite/mothership)
+"gj" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 1},/turf/space,/area/shuttle/syndicate_elite/mothership)
+"gk" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"gl" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"gm" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space)
+"gn" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"go" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"gp" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"gq" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space)
+"gr" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space)
+"gs" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"gt" = (/obj/effect/landmark{name = "Syndicate-Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"gu" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1213;listening = 1;name = "Syndicate Ops Intercom";pixel_y = 0;subspace_transmission = 1;syndie = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "circuit"},/area/syndicate_mothership)
+"gv" = (/mob/living/silicon/decoy{icon_state = "ai-malf";name = "GLaDOS"},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/syndicate_mothership/control)
+"gw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"gx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"gy" = (/turf/space/transit/north/shuttlespace_ns6,/area/syndicate_station/transit)
+"gz" = (/turf/space/transit/north/shuttlespace_ns8,/area/syndicate_station/transit)
+"gA" = (/turf/space/transit/north/shuttlespace_ns3,/area/syndicate_station/transit)
+"gB" = (/turf/space/transit/north/shuttlespace_ns5,/area/syndicate_station/transit)
+"gC" = (/turf/space/transit/north/shuttlespace_ns9,/area/syndicate_station/transit)
+"gD" = (/turf/space/transit/north/shuttlespace_ns2,/area/syndicate_station/transit)
+"gE" = (/turf/space/transit/north/shuttlespace_ns13,/area/syndicate_station/transit)
+"gF" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"gG" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"gH" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"gI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"gJ" = (/turf/space/transit/north/shuttlespace_ns11,/area/syndicate_station/transit)
+"gK" = (/turf/space/transit/north/shuttlespace_ns7,/area/syndicate_station/transit)
+"gL" = (/turf/space/transit/north/shuttlespace_ns14,/area/syndicate_station/transit)
+"gM" = (/turf/space/transit/north/shuttlespace_ns4,/area/syndicate_station/transit)
+"gN" = (/turf/space/transit/north/shuttlespace_ns10,/area/syndicate_station/transit)
+"gO" = (/turf/space/transit/north/shuttlespace_ns1,/area/syndicate_station/transit)
+"gP" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"gQ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns3,/area/space)
+"gR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns10,/area/space)
+"gS" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space)
+"gT" = (/turf/space,/area/syndicate_mothership/elite_squad)
+"gU" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership/elite_squad)
+"gV" = (/obj/machinery/computer/pod{id = "syndicate_elite";name = "Hull Door Control"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad)
+"gW" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1213;listening = 0;name = "Syndicate Ops Intercom";pixel_y = 28;subspace_transmission = 1;syndie = 1},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad)
+"gX" = (/obj/effect/landmark{name = "Syndicate-Commando"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad)
+"gY" = (/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad)
+"gZ" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad)
+"ha" = (/obj/mecha/combat/marauder/mauler,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"hb" = (/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"hc" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"hd" = (/turf/space/transit/north/shuttlespace_ns12,/area/syndicate_station/transit)
+"he" = (/turf/space/transit/north/shuttlespace_ns15,/area/syndicate_station/transit)
+"hf" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns4,/area/space)
+"hg" = (/turf/space/transit/north/shuttlespace_ns3,/area/skipjack_station/transit)
+"hh" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space,/area/space)
+"hi" = (/turf/space,/area/skipjack_station/transit)
+"hj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad)
+"hk" = (/turf/space/transit/north/shuttlespace_ns2,/area/skipjack_station/transit)
+"hl" = (/turf/space/transit/north/shuttlespace_ns6,/area/skipjack_station/transit)
+"hm" = (/turf/space/transit/north/shuttlespace_ns11,/area/skipjack_station/transit)
+"hn" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock";req_access = list(150)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "syndicate_elite";name = "Side Hull Door";opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"ho" = (/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad)
+"hp" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership/elite_squad)
+"hq" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space)
+"hr" = (/turf/space/transit/north/shuttlespace_ns1,/area/skipjack_station/transit)
+"hs" = (/turf/space/transit/north/shuttlespace_ns5,/area/skipjack_station/transit)
+"ht" = (/turf/space/transit/north/shuttlespace_ns10,/area/skipjack_station/transit)
+"hu" = (/obj/machinery/door/airlock/glass_security{name = "Airlock";req_access = list(150)},/obj/machinery/door/blast/regular{id = "syndicate_elite_mech_room";name = "Mech Room Door"},/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership/elite_squad)
+"hv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space)
+"hw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns6,/area/space)
+"hx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"hy" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space)
+"hz" = (/turf/space/transit/north/shuttlespace_ns15,/area/skipjack_station/transit)
+"hA" = (/turf/space/transit/north/shuttlespace_ns4,/area/skipjack_station/transit)
+"hB" = (/turf/space/transit/north/shuttlespace_ns9,/area/skipjack_station/transit)
+"hC" = (/obj/machinery/computer/pod{id = "syndicate_elite";name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"hD" = (/obj/machinery/computer/syndicate_elite_shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
+"hE" = (/turf/simulated/mineral/random,/area/space)
+"hF" = (/turf/space/transit/north/shuttlespace_ns5,/area/shuttle/escape_pod2/transit)
+"hG" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod2/transit)
+"hH" = (/turf/space/transit/north/shuttlespace_ns2,/area/shuttle/escape_pod2/transit)
+"hI" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area/space)
+"hJ" = (/turf/space/transit/north/shuttlespace_ns8,/area/skipjack_station/transit)
+"hK" = (/turf/space/transit/north/shuttlespace_ns14,/area/skipjack_station/transit)
+"hL" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership)
+"hM" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock";req_access = list(150)},/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "syndicate_elite";name = "Front Hull Door";opacity = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate_elite/mothership)
+"hN" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3 (NORTHWEST)";icon_state = "diagonalWall3";dir = 9},/area/shuttle/syndicate_elite/mothership)
+"hO" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape_pod2/transit)
+"hP" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape_pod2/transit)
+"hQ" = (/turf/space/transit/north/shuttlespace_ns1,/area/shuttle/escape_pod2/transit)
+"hR" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns14,/area/space)
+"hS" = (/turf/space/transit/north/shuttlespace_ns7,/area/skipjack_station/transit)
+"hT" = (/turf/space/transit/north/shuttlespace_ns13,/area/skipjack_station/transit)
+"hU" = (/turf/space,/area/syndicate_mothership)
+"hV" = (/turf/space,/area/shuttle/syndicate_elite/mothership)
+"hW" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape_pod2/transit)
+"hX" = (/turf/space/transit/north/shuttlespace_ns10,/area/shuttle/escape_pod2/transit)
+"hY" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/escape_pod2/transit)
+"hZ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area/space)
+"ia" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"ib" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"ic" = (/turf/space/transit/north/shuttlespace_ns12,/area/skipjack_station/transit)
+"id" = (/turf/space/transit/north/shuttlespace_ns9,/area/shuttle/escape_pod2/transit)
+"ie" = (/turf/space/transit/north/shuttlespace_ns14,/area/shuttle/escape_pod2/transit)
+"if" = (/obj/structure/lattice,/turf/space,/area/space)
+"ig" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/space)
+"ih" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 4},/area/space)
+"ii" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c"},/area/space)
+"ij" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/space)
+"ik" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns13,/area/space)
+"il" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns2,/area/space)
+"im" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space)
+"in" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"io" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor,/area/space)
+"ip" = (/obj/structure/grille,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"iq" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"ir" = (/obj/item/stack/material/cyborg/steel,/turf/space,/area/space)
+"is" = (/obj/item/weapon/material/shard/shrapnel,/turf/space,/area/space)
+"it" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"iu" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/space)
+"iv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space)
+"iw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area/space)
+"ix" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 8;name = "thrower_escapeshuttletop(left)";tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"iy" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/space)
+"iz" = (/obj/item/stack/rods,/turf/space,/area/space)
+"iA" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape_pod1/transit)
+"iB" = (/turf/space/transit/north/shuttlespace_ns6,/area/shuttle/escape_pod1/transit)
+"iC" = (/turf/space/transit/north/shuttlespace_ns1,/area/shuttle/escape_pod1/transit)
+"iD" = (/turf/space/transit/north/shuttlespace_ns11,/area/shuttle/escape_pod3/transit)
+"iE" = (/turf/space/transit/north/shuttlespace_ns8,/area/shuttle/escape_pod3/transit)
+"iF" = (/turf/space/transit/north/shuttlespace_ns4,/area/shuttle/escape_pod3/transit)
+"iG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/space)
+"iH" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/corpse/engineer/rotten,/turf/simulated/shuttle/floor,/area/space)
+"iI" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape_pod1/transit)
+"iJ" = (/turf/space/transit/north/shuttlespace_ns5,/area/shuttle/escape_pod1/transit)
+"iK" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/escape_pod1/transit)
+"iL" = (/turf/space/transit/north/shuttlespace_ns10,/area/shuttle/escape_pod3/transit)
+"iM" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape_pod3/transit)
+"iN" = (/turf/space/transit/north/shuttlespace_ns3,/area/shuttle/escape_pod3/transit)
+"iO" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor,/area/space)
+"iP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/space)
+"iQ" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"iR" = (/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"iS" = (/turf/space,/area/shuttle/escape_pod2/centcom)
+"iT" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape_pod1/transit)
+"iU" = (/turf/space/transit/north/shuttlespace_ns13,/area/shuttle/escape_pod1/transit)
+"iV" = (/turf/space/transit/north/shuttlespace_ns2,/area/shuttle/escape_pod1/transit)
+"iW" = (/turf/space/transit/north/shuttlespace_ns13,/area/shuttle/escape_pod3/transit)
+"iX" = (/turf/space/transit/north/shuttlespace_ns6,/area/shuttle/escape_pod3/transit)
+"iY" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/space)
+"iZ" = (/turf/space,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/space)
+"ja" = (/turf/simulated/mineral/random,/area/shuttle/escape_pod2/centcom)
+"jb" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod1/transit)
+"jc" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod3/transit)
+"jd" = (/turf/space/transit/north/shuttlespace_ns5,/area/shuttle/escape_pod3/transit)
+"je" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
+"jf" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'ESTIMATED PICKUP TIME: 2-4 DAYS. CONSERVE RESOURCES.'.";name = "\improper NSS AURORA II ESCAPE POD ZONE"},/turf/simulated/wall/r_wall,/area/space)
+"jg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space)
+"jh" = (/obj/structure/bed/chair{dir = 1},/turf/space,/area/space)
+"ji" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns9,/area/space)
+"jj" = (/turf/space,/area/shuttle/escape_pod3/centcom)
+"jk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 8},/area/space)
+"jl" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 8},/area/space)
+"jm" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space)
+"jn" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/space,/area/space)
+"jo" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/space)
+"jp" = (/obj/structure/window/shuttle,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"jq" = (/obj/structure/bed/chair{dir = 8},/obj/random/junk,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor,/area/space)
+"jr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse,/turf/simulated/shuttle/floor,/area/space)
+"js" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = null;locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/space)
+"jt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/plating,/area/space)
+"ju" = (/turf/space,/area/shuttle/escape_pod1/centcom)
+"jv" = (/turf/space,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/space)
+"jw" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 8},/area/space)
+"jx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 4;name = "thrower_escapeshuttletop(right)";tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space)
+"jy" = (/obj/structure/grille,/obj/structure/window/shuttle,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space)
+"jz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/space)
+"jA" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jB" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jD" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jE" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jF" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jG" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jI" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "ninjastart"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jL" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jM" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jN" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jO" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jP" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jR" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jS" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jT" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"jU" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space)
+"jV" = (/turf/simulated/mineral,/area/space)
+"jW" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/space)
+"jX" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
+"jY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
+"jZ" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/space,/area/space)
+"ka" = (/turf/unsimulated/wall,/area/syndicate_mothership)
+"kb" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4;pixel_y = 8},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"kc" = (/obj/structure/table/standard,/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"kd" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"ke" = (/turf/unsimulated/wall/fakeglass{dir = 1;icon_state = "fakewindows"},/area/syndicate_mothership)
+"kf" = (/obj/structure/bed,/obj/item/weapon/bedsheet/hos,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"kg" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"kh" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"ki" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2";dir = 1},/area/syndicate_mothership)
+"kj" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership)
+"kk" = (/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"kl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"km" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"kn" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"ko" = (/obj/machinery/door/airlock/centcom{name = "Barracks";opacity = 1;req_access = list(150)},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"kp" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/syndicate_station/start)
+"kq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "syndieshutters";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"kr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "syndieshutters";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"ks" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/syndicate_station/start)
+"kt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "syndieshutters";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"ku" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"kv" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kw" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kx" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"ky" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp";prices = list()},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kz" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full{pixel_x = 2;pixel_y = 6},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1;pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kB" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kC" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kD" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start)
+"kE" = (/obj/machinery/recharger,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kF" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kG" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kH" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kI" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters";name = "remote shutter control";req_access = list(150)},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kJ" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kK" = (/obj/machinery/door/airlock/centcom{name = "Kitchen";opacity = 1;req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kL" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kM" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1;pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kN" = (/obj/machinery/microwave{pixel_x = -1;pixel_y = 2},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kO" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kP" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kQ" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kR" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kS" = (/obj/item/weapon/folder{pixel_y = 2},/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kT" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"kU" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"kV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"kW" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"kX" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"kY" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 2;pixel_y = 3},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"kZ" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"la" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lb" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"lc" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks";prices = list()},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"ld" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"le" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"lf" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3;pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{pixel_x = -1;pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"lg" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lh" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"li" = (/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100;maxcharge = 15000},/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lj" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_y = -32;subspace_transmission = 1;syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lk" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"ll" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine";prices = list();products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership)
+"lm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"ln" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lo" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_station/start)
+"lp" = (/obj/machinery/door/window/northright{name = "Flight Deck";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lq" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/syndicate_station/start)
+"lr" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"ls" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"lt" = (/turf/unsimulated/floor{icon_state = "bar";dir = 2},/area/syndicate_mothership)
+"lu" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lv" = (/obj/machinery/shower{pixel_y = 32},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lw" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lx" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"ly" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/merc{pixel_x = 2;pixel_y = 2},/obj/item/clothing/suit/storage/vest/merc{pixel_x = -2;pixel_y = -2},/obj/item/clothing/head/helmet/merc,/obj/item/clothing/head/helmet/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lz" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32;pixel_y = 0;req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lA" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lB" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lC" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lD" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/military,/obj/item/weapon/storage/belt/military,/obj/item/ammo_magazine/mc9mm,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"lF" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lG" = (/obj/machinery/door/airlock/centcom{name = "Bathroom";opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lH" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lI" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lJ" = (/obj/structure/bed/chair{dir = 8},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lK" = (/obj/structure/closet,/obj/item/weapon/pickaxe/diamonddrill,/obj/item/weapon/pickaxe/diamonddrill,/obj/item/weapon/pickaxe/diamonddrill,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"lM" = (/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership)
+"lN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"lO" = (/obj/machinery/door/airlock/centcom{name = "Suit Storage";opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lP" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lQ" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lR" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
+"lS" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lT" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lU" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/rifle/sts35,/obj/item/weapon/gun/projectile/automatic/rifle/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"lV" = (/obj/structure/sign/poster{poster_type = "/datum/poster/bay_50";pixel_x = -32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lW" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"lX" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space)
+"lY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1331;id_tag = "merc_base";pixel_x = -25;pixel_y = -5},/turf/unsimulated/floor{icon_state = "bar";dir = 2},/area/syndicate_mothership)
+"lZ" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"ma" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mb" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mc" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"md" = (/obj/machinery/flasher{id = "syndieflash";pixel_x = 0;pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"me" = (/obj/item/device/radio/electropack,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"mf" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 0;pixel_y = -32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mg" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mh" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331;id_tag = "merc_shuttle_sensor";pixel_x = 8;pixel_y = 25},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mi" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1331;id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mj" = (/obj/machinery/door/airlock/external{density = 1;frequency = 1331;id_tag = "merc_shuttle_outer";name = "Ship External Access";req_access = list(150)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "smindicate";name = "Outer Airlock";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"mk" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1331;id_tag = "merc_shuttle_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331;id_tag = "merc_shuttle";pixel_x = -8;pixel_y = 25;req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"ml" = (/obj/machinery/door/airlock/external{frequency = 1331;id_tag = "merc_base_hatch";req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mm" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mn" = (/obj/machinery/door/airlock/vault{name = "Armory";req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mo" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mp" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_station/start)
+"mr" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"ms" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"mt" = (/obj/machinery/door/window{dir = 2;name = "Seating";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mu" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4;name = "Blast Door Control";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mv" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mw" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1331;id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mx" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"my" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mz" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mB" = (/obj/machinery/door/window{dir = 1;name = "Cell";req_access = list(150)},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = -32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mC" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mD" = (/obj/machinery/vending/assist{contraband = null;name = "AntagCorpVend";products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mE" = (/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/simulated/shuttle/plating,/area/syndicate_station/start)
+"mF" = (/obj/machinery/door/airlock/external{frequency = 1331;id_tag = "merc_shuttle_inner";name = "Ship External Access";req_access = list(0)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
+"mH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
+"mI" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4;pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/smokebombs,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mJ" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mK" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mL" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit/improved,/obj/item/device/suit_cooling_unit/improved,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mM" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine";prices = list();products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mN" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash";name = "Flasher";pixel_x = 27;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mO" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4;start_pressure = 740.5},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mP" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mQ" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1331;master_tag = "merc_shuttle";name = "interior access button";pixel_x = 25;pixel_y = 25;req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mR" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mS" = (/obj/machinery/door/airlock/centcom{name = "Hardsuit Storage";opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mT" = (/obj/item/weapon/material/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3;pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3;pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3;pixel_y = 9},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/table/glass,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mU" = (/obj/machinery/door/window{dir = 4;name = "Brig";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mV" = (/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Preparation";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mW" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mX" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"mY" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"mZ" = (/obj/machinery/door/window{base_state = "right";dir = 4;icon_state = "right";name = "Brig";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"na" = (/obj/machinery/door/window{base_state = "left";dir = 8;icon_state = "left";name = "Preparation";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nb" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1;pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nc" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nd" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"ne" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nf" = (/obj/structure/table/standard,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"ng" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32;req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4;pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4;pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nh" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = -32;subspace_transmission = 1;syndie = 1},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"ni" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nj" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nk" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nl" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8;pixel_y = 4},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 4},/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nm" = (/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8;pixel_y = 4},/obj/item/clothing/glasses/night,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nn" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "syndieshutters_infirmary";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"no" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = -32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"np" = (/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "syndieshutters_workshop";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"nr" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"ns" = (/obj/machinery/bodyscanner{dir = 8;icon_state = "body_scanner_0";tag = "icon-body_scanner_0 (EAST)"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "syndieshutters_infirmary";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"nu" = (/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nv" = (/obj/machinery/door/window{dir = 4;name = "Infirmary";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nw" = (/obj/machinery/door/window/westright{name = "Tool Storage";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nx" = (/obj/item/weapon/stool/padded,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"ny" = (/obj/effect/spawner/newbomb/timer/syndicate,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "syndieshutters_workshop";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"nA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "syndieshutters_infirmary";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"nB" = (/obj/machinery/door/window{base_state = "right";dir = 4;icon_state = "right";name = "Infirmary";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nC" = (/obj/machinery/door/window{dir = 8;name = "Tool Storage";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nD" = (/obj/item/weapon/aicard,/obj/effect/spawner/newbomb/timer/syndicate,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "syndieshutters_workshop";name = "Blast Shutters";opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"nF" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary";name = "remote shutter control";pixel_x = -25},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nG" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 32;subspace_transmission = 1;syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nH" = (/obj/machinery/door/window{dir = 1;name = "Secure Storage";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nI" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nK" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_telebay";name = "remote shutter control";pixel_x = 0;pixel_y = -25;req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nL" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_workshop";name = "remote shutter control";pixel_x = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nN" = (/obj/machinery/door/window{dir = 1;name = "Surgery";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nO" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nP" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nQ" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nR" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nS" = (/obj/structure/sign/securearea{name = "\improper CAUTION";pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nT" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe";req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nU" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay";name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"nV" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nW" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32;pixel_y = 0;req_access = list(150)},/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"nX" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nY" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"oa" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"ob" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"oc" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"od" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 32;subspace_transmission = 1;syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"oe" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"of" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"og" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"oh" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_station/start)
+"oi" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_station/start)
+"oj" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_station/start)
+"ok" = (/turf/unsimulated/wall/riveted,/area/centcom)
+"ol" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom)
+"om" = (/turf/unsimulated/wall/riveted,/area/centcom/living)
+"on" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 1},/area/centcom)
+"oo" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 1},/area/centcom/living)
+"op" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 9},/area/centcom/living)
+"oq" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 5},/area/centcom/living)
+"or" = (/turf/unsimulated/floor{name = "plating"},/area/centcom)
+"os" = (/turf/unsimulated/floor,/area/centcom/living)
+"ot" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (NORTHWEST)";icon_state = "wall3";dir = 9},/area/shuttle/administration/centcom)
+"ou" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom)
+"ov" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3 (SOUTHEAST)";icon_state = "diagonalWall3";dir = 6},/area/shuttle/administration/centcom)
+"ow" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
+"ox" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oy" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oz" = (/obj/machinery/computer/shuttle_control{req_access = list(101);shuttle_tag = "Administration"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oA" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oB" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oC" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 10},/area/centcom/living)
+"oD" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 6},/area/centcom/living)
+"oE" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oG" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oH" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oI" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oJ" = (/turf/unsimulated/floor{icon_state = "warnplate"},/area/centcom/living)
+"oK" = (/obj/machinery/turretid{pixel_x = 28;pixel_y = -28;req_access = list(101)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oL" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "administration_shuttle";pixel_x = 0;pixel_y = -25;req_one_access = list(13);tag_door = "administration_shuttle_hatch"},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oM" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oN" = (/obj/machinery/door/airlock/centcom{icon_state = "door_locked";locked = 1;name = "To: Administration Level"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living)
+"oO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oP" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oQ" = (/obj/machinery/computer/security,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oR" = (/obj/structure/AIcore/deactivated,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oS" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"oU" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"oV" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living)
+"oW" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/living)
+"oX" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/living)
+"oY" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"oZ" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle Cockpit"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pa" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living)
+"pb" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/living)
+"pc" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/living)
+"pd" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pe" = (/obj/machinery/mech_recharger,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"pf" = (/obj/mecha/combat/marauder,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"pg" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"ph" = (/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/living)
+"pi" = (/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/living)
+"pj" = (/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/living)
+"pk" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space)
+"pl" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/rifle/pulse,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"pm" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"pn" = (/obj/structure/closet/secure_closet/guncabinet{name = "Heavy Asset Protection";req_access = list(103)},/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/shoes/magboots,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/rig_module/mounted/plasmacutter,/obj/item/weapon/rig/ert/assetprotection,/obj/item/device/radio/headset/ert,/obj/item/clothing/under/syndicate/combat,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"po" = (/obj/machinery/door/airlock/centcom{name = "To: NMSS Odin Hab Complex"},/turf/unsimulated/floor,/area/centcom/living)
+"pp" = (/obj/machinery/door/airlock/centcom{name = "To: Departures Deck"},/turf/unsimulated/floor,/area/centcom/living)
+"pq" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/rifle/pulse,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"pr" = (/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/living)
+"ps" = (/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/living)
+"pt" = (/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/living)
+"pu" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2;pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pv" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "heavyass";locked = 1;name = "Heavy Asset Protection"},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/administration/centcom)
+"pw" = (/turf/unsimulated/wall/riveted,/area/centcom/suppy)
+"px" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"py" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom)
+"pz" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 1},/area/centcom/suppy)
+"pA" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 9},/area/centcom/suppy)
+"pB" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 5},/area/centcom/suppy)
+"pC" = (/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pD" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pE" = (/obj/structure/bed/chair/comfy/red,/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living)
+"pF" = (/obj/structure/bed/chair/comfy/blue,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"pG" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living)
+"pH" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/living)
+"pI" = (/turf/unsimulated/floor,/area/centcom/suppy)
+"pJ" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/suppy)
+"pK" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy)
+"pL" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy)
+"pM" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/suppy)
+"pN" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/suppy)
+"pO" = (/obj/item/weapon/stool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"pP" = (/turf/unsimulated/floor{icon_state = "bluered";dir = 9},/area/centcom/living)
+"pQ" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 4},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"pR" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/living)
+"pS" = (/turf/unsimulated/floor{icon_state = "redblue";dir = 5},/area/centcom/living)
+"pT" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 8},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"pU" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/supply/dock)
+"pV" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/supply/dock)
+"pW" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/supply/dock)
+"pX" = (/obj/machinery/porta_turret/stationary,/obj/effect/decal/warning_stripes,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"pY" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"pZ" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/zippo,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"qa" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"qb" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/living)
+"qc" = (/obj/structure/bed/chair/comfy/red{dir = 4},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living)
+"qd" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/living)
+"qe" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview";dir = 8},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living)
+"qf" = (/turf/simulated/shuttle/wall{dir = 2;icon_state = "swall_straight"},/area/supply/dock)
+"qg" = (/turf/simulated/shuttle/floor,/area/supply/dock)
+"qh" = (/obj/machinery/light/spot,/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/suppy)
+"qi" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"qj" = (/turf/unsimulated/floor{icon_state = "bluered";dir = 10},/area/centcom/living)
+"qk" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/living)
+"ql" = (/turf/unsimulated/floor{icon_state = "redblue";dir = 6},/area/centcom/living)
+"qm" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 10},/area/centcom/suppy)
+"qn" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 6},/area/centcom/suppy)
+"qo" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/suppy)
+"qp" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor,/area/supply/dock)
+"qq" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/supply/dock)
+"qr" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"qs" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"qt" = (/obj/machinery/vending/cigarette,/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"qu" = (/obj/machinery/vending/boozeomat,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/administration/centcom)
+"qv" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"qw" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview";dir = 1},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living)
+"qx" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 1},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"qy" = (/turf/unsimulated/floor{icon_state = "warnplate"},/area/centcom/suppy)
+"qz" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"qA" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
+"qB" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"qC" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/supply/dock)
+"qD" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/turf/space,/area/space)
+"qE" = (/obj/machinery/door/airlock/centcom,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qF" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle Infirmary"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qG" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle Wardrobe"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "supply_shuttle";pixel_x = 25;pixel_y = 0;req_one_access = list(13,31);tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"qI" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qJ" = (/obj/structure/closet/hydrant{pixel_x = 30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qK" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qL" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qM" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qN" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qO" = (/obj/machinery/chemical_dispenser/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qP" = (/obj/structure/closet/hydrant{pixel_x = -30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qQ" = (/obj/structure/closet/wardrobe{name = "Captain's Wardrobe"},/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/captain,/obj/item/weapon/gun/energy/lawgiver,/obj/item/weapon/card/id/centcom,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qR" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qS" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qT" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qU" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qV" = (/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/FixOVein,/obj/item/weapon/scalpel,/obj/item/weapon/retractor{pixel_x = 0;pixel_y = 6},/obj/item/weapon/bonegel{pixel_x = 4;pixel_y = 3},/obj/item/weapon/bonesetter,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/obj/structure/closet/medical_wall{name = "Surgery Tools";pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"qW" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qX" = (/obj/structure/closet/wardrobe{name = "Officer's Wardrobe"},/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/officer,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/card/id/centcom,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/administration/centcom)
+"qY" = (/obj/machinery/door/airlock/centcom{name = "To: NSS Exodus Processing";opacity = 1},/turf/unsimulated/floor,/area/centcom/living)
+"qZ" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"ra" = (/obj/machinery/door/airlock/centcom{name = "To: NSS Aurora Processing"},/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/unsimulated/floor,/area/centcom/living)
+"rb" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"rc" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
+"rd" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom)
+"re" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"rf" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/obj/machinery/optable,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/surgical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"rg" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (SOUTHWEST)";icon_state = "wall3";dir = 10},/area/shuttle/administration/centcom)
+"rh" = (/obj/structure/shuttle/engine/propulsion,/turf/unsimulated/floor{name = "plating"},/area/shuttle/administration/centcom)
+"ri" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"rj" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8;pixel_x = 4;pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0;pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9;pixel_x = 2;pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"rk" = (/obj/machinery/computer/operating,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"rl" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (SOUTHEAST)";icon_state = "wall3";dir = 6},/area/shuttle/administration/centcom)
+"rm" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy)
+"rn" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/suppy)
+"ro" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom)
+"rp" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "admin_shuttle_bay";name = "shuttle bay controller";pixel_x = 25;pixel_y = 0;tag_door = "admin_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom)
+"rq" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom)
+"rr" = (/turf/simulated/shuttle/wall{icon_state = "swall15";dir = 2},/area/supply/dock)
+"rs" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/supply/dock)
+"rt" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/supply/dock)
+"ru" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/supply/dock)
+"rv" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_bay_door";locked = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom)
+"rw" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom)
+"rx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/space,/area/supply/dock)
+"ry" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/supply/dock)
+"rz" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/space,/area/supply/dock)
+"rA" = (/turf/unsimulated/wall/riveted,/area/centcom/control)
+"rB" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/control)
+"rC" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/control)
+"rD" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/control)
+"rE" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/control)
+"rF" = (/obj/machinery/account_database{name = "CentComm Accounts database"},/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/control)
+"rG" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"rH" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"rI" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"rJ" = (/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"rK" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/suppy)
+"rL" = (/turf/unsimulated/wall/riveted,/area/centcom/specops)
+"rM" = (/turf/unsimulated/wall/riveted,/area/centcom/creed)
+"rN" = (/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/control)
+"rO" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"rP" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/control)
+"rQ" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/ammo_magazine/a762,/obj/item/weapon/gun/projectile/automatic/rifle/l6_saw,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rR" = (/obj/structure/table/rack,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rS" = (/obj/structure/table/rack,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rT" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/rifle,/obj/item/weapon/gun/energy/rifle,/obj/item/weapon/gun/energy/rifle,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rU" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps,/obj/item/weapon/storage/box/frags,/obj/item/weapon/storage/box/smokebombs,/obj/item/weapon/gun/launcher/grenade,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rW" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/weapon/gun/projectile/automatic/rifle/z8,/obj/item/weapon/gun/projectile/automatic/rifle/z8,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rX" = (/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"rY" = (/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"rZ" = (/obj/machinery/door/blast/regular{id = "ert_synth_equipment";name = "Synthetics Modification Equipment"},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"sa" = (/obj/machinery/shield_gen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"sb" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"sc" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"sd" = (/obj/machinery/shield_capacitor,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"se" = (/obj/machinery/shieldwallgen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"sf" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sg" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sh" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT";name = "Assault Weapon Storage";p_open = 0},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"si" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/aiupload{pixel_x = -3;pixel_y = -3},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"sj" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sk" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/button/remote/blast_door{id = "CREED";name = "Spec Ops Ready Room";pixel_x = -5;pixel_y = 4;req_access = list(108)},/obj/machinery/button/remote/blast_door{icon_state = "doorctrl0";id = "ASSAULT";name = "Mech Storage";pixel_x = -5;pixel_y = -4;req_access = list(108)},/obj/machinery/button/remote/blast_door{id = "ert_synth_equipment";name = "Synth Modification Equipment";pixel_x = 5;pixel_y = -4;req_access = list(108)},/obj/machinery/button/remote/blast_door{id = "centcomm_bsa";name = "Artillery Access";pixel_x = 5;pixel_y = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sl" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/control)
+"sm" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control)
+"sn" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control)
+"so" = (/obj/machinery/computer/rdservercontrol{badmin = 1;name = "Master R&D Server Controller"},/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control)
+"sp" = (/obj/machinery/r_n_d/server/centcom,/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/control)
+"sq" = (/obj/machinery/door/airlock/centcom{name = "NMSS Odin Sub-Deck";opacity = 1},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/living)
+"sr" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/living)
+"ss" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
+"st" = (/obj/mecha/combat/gygax/dark,/obj/machinery/camera/network/ert{c_tag = "Assault Armor North"},/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops)
+"su" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1441;listening = 0;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"sv" = (/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"sw" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT";name = "Assault Armor Storage";p_open = 0},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"sx" = (/turf/unsimulated/floor{icon_state = "vault";dir = 9},/area/centcom/specops)
+"sy" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"sz" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sA" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sB" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"sC" = (/obj/machinery/door/airlock/centcom{name = "Administration Shuttle";opacity = 1;req_access = list(108)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom)
+"sD" = (/obj/machinery/door/airlock/centcom{name = "Communications Control";opacity = 1;req_access = list(104)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control)
+"sE" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/living)
+"sF" = (/obj/machinery/door/airlock/centcom{name = "Teleporter Bay";opacity = 1;req_access = list(107)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control)
+"sG" = (/turf/unsimulated/wall/riveted,/area/centcom/test)
+"sH" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/control)
+"sI" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"sJ" = (/obj/structure/artilleryplaceholder{icon_state = "1"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 9},/area/centcom/control)
+"sK" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"sL" = (/obj/structure/artilleryplaceholder{icon_state = "3"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sM" = (/obj/structure/artilleryplaceholder{icon_state = "2"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sN" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "5"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sO" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "4"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sP" = (/obj/structure/artilleryplaceholder{icon_state = "7"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sQ" = (/obj/structure/artilleryplaceholder{icon_state = "6"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sR" = (/obj/structure/artilleryplaceholder{icon_state = "9"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sS" = (/obj/structure/artilleryplaceholder{icon_state = "8"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sT" = (/obj/structure/artilleryplaceholder{icon_state = "11"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sU" = (/obj/structure/artilleryplaceholder{icon_state = "10"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 1},/area/centcom/control)
+"sV" = (/obj/machinery/door/blast/regular{id = "battery3";name = "Battery 3 Firing Door"},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/control)
+"sW" = (/obj/structure/artilleryplaceholder{icon_state = "12"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 5},/area/centcom/control)
+"sX" = (/obj/effect/landmark{name = "Marauder Exit"},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"sY" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"sZ" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT3";name = "Launch Bay #3";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"ta" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/specops)
+"tb" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 4},/area/centcom/specops)
+"tc" = (/turf/unsimulated/floor{icon_state = "loadingarea";dir = 8},/area/centcom/specops)
+"td" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT3";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
+"te" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,/obj/item/mecha_parts/mecha_equipment/armor_booster/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/armor_booster/antiproj_armor_booster,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tf" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/projectile/automatic/x9,/obj/item/weapon/gun/projectile/automatic/x9,/obj/item/weapon/gun/projectile/automatic/x9,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tg" = (/obj/machinery/vending/tacticool/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"th" = (/obj/machinery/vending/assist,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"ti" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tj" = (/obj/machinery/pipedispenser/orderable,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tk" = (/obj/machinery/power/emitter,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tl" = (/obj/machinery/pipedispenser/disposal/orderable,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tm" = (/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"tn" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor";network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"to" = (/obj/machinery/computer/pod{id = "NTrasen";name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1441;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
+"tp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/creed)
+"tq" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"tr" = (/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/control)
+"ts" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/control)
+"tt" = (/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/control)
+"tu" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"tv" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"tw" = (/obj/machinery/computer/scan_consolenew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"tx" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"ty" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"tz" = (/obj/structure/artilleryplaceholder{icon_state = "13"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 8},/area/centcom/control)
+"tA" = (/obj/structure/artilleryplaceholder{icon_state = "15"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tB" = (/obj/structure/artilleryplaceholder{icon_state = "14"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tC" = (/obj/structure/artilleryplaceholder{icon_state = "17"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control)
+"tD" = (/obj/structure/artilleryplaceholder{icon_state = "16"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control)
+"tE" = (/obj/structure/artilleryplaceholder{icon_state = "19"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tF" = (/obj/structure/artilleryplaceholder{icon_state = "18"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/centcom/control)
+"tG" = (/obj/structure/artilleryplaceholder{icon_state = "21"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tH" = (/obj/structure/artilleryplaceholder{icon_state = "20"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tI" = (/obj/structure/artilleryplaceholder{icon_state = "23"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tJ" = (/obj/structure/artilleryplaceholder{icon_state = "22"},/turf/unsimulated/floor{icon_state = "podhatchcorner";dir = 8},/area/centcom/control)
+"tK" = (/obj/structure/artilleryplaceholder{icon_state = "24"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 4},/area/centcom/control)
+"tL" = (/turf/unsimulated/beach/sand{density = 1;opacity = 1},/area/beach)
+"tM" = (/obj/machinery/vending/tool,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tN" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/circuitboard/smes,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"tO" = (/obj/machinery/door/airlock/centcom{name = "Creed's Office";opacity = 1;req_access = list(108)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/creed)
+"tP" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"tQ" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/control)
+"tR" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"tS" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/control)
+"tT" = (/obj/machinery/door/airlock/centcom{name = "Research Facility";opacity = 1;req_access = list(104)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/test)
+"tU" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"tV" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "25"},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "podhatch";dir = 10},/area/centcom/control)
+"tW" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "26"},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"tX" = (/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"tY" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "28"},/obj/machinery/artillerycontrol{desc = "Bluespace Artillery; the thinking man's solution."},/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{tag = "icon-wood_siding2 (SOUTHEAST)";icon_state = "wood_siding2";dir = 6},/area/centcom/control)
+"tZ" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "27"},/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "battery3";name = "Battery 3 Firing Control"},/turf/unsimulated/floor{icon_state = "wood_siding10"},/area/centcom/control)
+"ua" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "30"},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"ub" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "29"},/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "wood_siding6"},/area/centcom/control)
+"uc" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "32"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"ud" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "31"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"ue" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "34"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"uf" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "33"},/turf/unsimulated/floor{icon_state = "podhatch"},/area/centcom/control)
+"ug" = (/obj/structure/artilleryplaceholder/decorative{icon_state = "35"},/turf/unsimulated/floor{icon_state = "podhatch";dir = 6},/area/centcom/control)
+"uh" = (/turf/unsimulated/beach/sand,/area/beach)
+"ui" = (/obj/structure/signpost,/turf/unsimulated/beach/sand,/area/beach)
+"uj" = (/obj/structure/closet,/turf/unsimulated/beach/sand,/area/beach)
+"uk" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops)
+"ul" = (/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"um" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/night{pixel_x = -1;pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1;pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1;pixel_y = -3},/obj/item/clothing/glasses/night,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"un" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/taperoll/police,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uo" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"up" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uq" = (/obj/structure/table/rack,/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"ur" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"us" = (/obj/machinery/vending/engivend,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"ut" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/steel{amount = 50;pixel_x = 2;pixel_y = 2},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uu" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uv" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"ux" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uy" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uz" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uA" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uB" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 6},/area/centcom/control)
+"uC" = (/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/control)
+"uD" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 8},/area/centcom/control)
+"uE" = (/turf/unsimulated/floor{icon_state = "ramptop";dir = 4},/area/centcom/control)
+"uF" = (/turf/unsimulated/floor{icon_state = "vault";dir = 9},/area/centcom/control)
+"uG" = (/turf/unsimulated/floor{icon_state = "engine"},/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control)
+"uH" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"uI" = (/obj/effect/wingrille_spawn/reinforced_phoron,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
+"uJ" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand,/area/beach)
+"uK" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach)
+"uL" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT2";name = "Launch Bay #2";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"uM" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT2";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
+"uN" = (/obj/item/mecha_parts/mecha_equipment/teleporter,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"uP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"uQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"uR" = (/obj/machinery/vending/engineering,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uS" = (/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"uU" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"uV" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/control)
+"uW" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
+"uX" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/control)
+"uY" = (/obj/structure/closet/secure_closet/medical3{pixel_x = -5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"uZ" = (/obj/structure/closet/secure_closet/medical1{pixel_x = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"va" = (/obj/structure/closet/secure_closet/medical2{pixel_x = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"vb" = (/obj/machinery/sleeper,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/test)
+"vc" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/unsimulated/floor{icon_state = "wood_siding9"},/area/centcom/control)
+"vd" = (/obj/structure/window/phoronreinforced,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"ve" = (/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach)
+"vf" = (/obj/mecha/working/ripley/firefighter,/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops)
+"vg" = (/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,/obj/item/mecha_parts/mecha_equipment/tool/rcd,/obj/item/weapon/pickaxe/diamonddrill,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vh" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/box/cdeathalarm_kit,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vi" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vj" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vk" = (/obj/structure/table/reinforced,/obj/item/weapon/aicard,/obj/item/weapon/pinpointer/advpinpointer,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vl" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/hand_tele,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vm" = (/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/taperoll/engineering,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vn" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"vo" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/specops)
+"vp" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vr" = (/mob/living/silicon/decoy{name = "A.L.I.C.E."},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
+"vs" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vt" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vu" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/test)
+"vv" = (/obj/machinery/door/blast/regular{id = "battery2";name = "Battery 2 Firing Door"},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/control)
+"vw" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT1";name = "Launch Bay #1";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"vx" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT1";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
+"vy" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vz" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vA" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vB" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vC" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vD" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vE" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vF" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"vG" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"vH" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/riveted,/area/centcom/specops)
+"vI" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 4},/area/centcom/control)
+"vJ" = (/obj/machinery/computer/ordercomp,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vK" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1443;listening = 0;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vM" = (/obj/machinery/door/window{dir = 2;name = "AI Core Door";req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vO" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vP" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"vQ" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 1},/area/centcom/control)
+"vR" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/riveted,/area/centcom/test)
+"vS" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/test)
+"vT" = (/obj/machinery/door/airlock/centcom{name = "Bluespace Artillery Deck";opacity = 1},/obj/machinery/door/blast/regular{id = "centcomm_bsa";name = "Bluespace Artillery Deck"},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/control)
+"vU" = (/obj/effect/overlay/palmtree_r,/turf/unsimulated/beach/sand,/area/beach)
+"vV" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "delivery";dir = 6},/area/centcom/specops)
+"vW" = (/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vX" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/mounted/plasmacutter,/obj/item/rig_module/mounted/plasmacutter,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/rcd,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/mounted/egun,/obj/item/rig_module/mounted/egun,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"vY" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/pistol,/obj/item/weapon/gun/projectile/automatic/rifle/w556,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"vZ" = (/obj/machinery/door/airlock/centcom{name = "Armory Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wa" = (/obj/machinery/door/airlock/centcom{name = "Engineering Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wb" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "CREED";name = "Ready Room";p_open = 0},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wc" = (/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
+"wd" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/specops)
+"we" = (/obj/machinery/door/airlock/centcom{name = "Special Operations";opacity = 1;req_access = list(103)},/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "CREED";name = "Ready Room";p_open = 0},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/specops)
+"wf" = (/obj/machinery/door/airlock/centcom{name = "Bridge";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wg" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "CCIAAgent"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wh" = (/obj/machinery/door/airlock/centcom{name = "Bluespace Artillery Deck";opacity = 1},/obj/machinery/door/blast/regular{id = "centcomm_bsa";name = "Bluespace Artillery Deck"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/test)
+"wi" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/test)
+"wj" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall/riveted,/area/centcom/control)
+"wk" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "27"},/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "battery2";name = "Battery 2 Firing Control"},/turf/unsimulated/floor{icon_state = "wood_siding10"},/area/centcom/control)
+"wl" = (/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
+"wm" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "ASSAULT0";name = "Launch Bay #0";p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"wn" = (/obj/machinery/camera/network/ert{c_tag = "Assault Armor South";dir = 1},/turf/unsimulated/floor{icon_state = "loadingarea";dir = 8},/area/centcom/specops)
+"wo" = (/obj/machinery/mass_driver{dir = 8;id = "ASSAULT0";name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
+"wp" = (/obj/machinery/door/airlock/centcom{name = "Special Operations Command";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wq" = (/obj/structure/sign/securearea{name = "\improper ARMORY";pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wr" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS";pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"ws" = (/obj/machinery/recharger/wallcharger{pixel_x = 4;pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wt" = (/obj/item/device/radio/intercom{broadcasting = 1;dir = 1;frequency = 1441;listening = 0;name = "Spec Ops Intercom";pixel_y = 28},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wu" = (/obj/structure/table/rack,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/head/beret/centcom/officer,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"wv" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ww" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall/riveted,/area/centcom/specops)
+"wx" = (/turf/unsimulated/floor{icon_state = "bluecorner"},/area/centcom/control)
+"wy" = (/obj/machinery/computer/robotics,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wz" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wA" = (/obj/item/modular_computer/console/preset/command,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wB" = (/obj/machinery/computer/med_data,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wC" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/control)
+"wD" = (/obj/structure/sign/securearea,/turf/unsimulated/wall/riveted,/area/centcom/control)
+"wE" = (/obj/structure/table/standard,/turf/unsimulated/beach/sand,/area/beach)
+"wF" = (/obj/structure/table/standard,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach)
+"wG" = (/obj/structure/sign/redcross{pixel_y = -32},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wH" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"wI" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"wJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"wK" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/handcuffs,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"wL" = (/obj/structure/bed/chair/office/light,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"wM" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"wN" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"wO" = (/obj/structure/table/reinforced,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wP" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wQ" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access";name = "Crescent Checkpoint Access";pixel_x = -6;pixel_y = -24;req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome";name = "Thunderdome Access";pixel_x = 6;pixel_y = -24;req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle";name = "VIP Shuttle Access";pixel_x = 6;pixel_y = -34;req_access = list(101)},/obj/machinery/turretid{pixel_x = 28;pixel_y = -28;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wR" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/captains_spare,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"wS" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor,/area/centcom/control)
+"wT" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach)
+"wU" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach)
+"wV" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/beach)
+"wW" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"wX" = (/obj/machinery/door/airlock/centcom{name = "Medical Special Operations";opacity = 1;req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"wY" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however...";hacked = 1;name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"wZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xa" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xb" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xc" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 0},/turf/unsimulated/wall/riveted,/area/centcom/specops)
+"xd" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xe" = (/obj/structure/table/rack,/obj/item/device/lightreplacer,/obj/item/device/lightreplacer,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xf" = (/obj/structure/table/reinforced,/obj/item/device/pda/captain,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"xg" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"xh" = (/obj/machinery/computer/security,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"xi" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"xj" = (/obj/machinery/door/blast/regular{id = "battery1";name = "Battery 1 Firing Door"},/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/control)
+"xk" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xm" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xn" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xo" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xp" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xq" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xr" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xs" = (/obj/effect/landmark{name = "Response Team"},/obj/effect/landmark{name = "Commando"},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xt" = (/obj/structure/closet{icon_closed = "syndicate1";icon_opened = "syndicate1open";icon_state = "syndicate1";name = "emergency response team wardrobe"},/obj/item/clothing/under/ert,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/rank/centcom_officer,/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"xu" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xv" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"xw" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"xx" = (/obj/structure/closet/crate,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/obj/item/device/magnetic_lock,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xy" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"xz" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6;pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6;pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xA" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xB" = (/obj/item/weapon/mop,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xC" = (/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/control)
+"xD" = (/obj/item/weapon/caution,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"xE" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"xF" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/obj/structure/artilleryplaceholder/decorative{icon_state = "27"},/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "battery1";name = "Battery 1 Firing Control"},/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{icon_state = "wood_siding10"},/area/centcom/control)
+"xG" = (/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,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "specops_centcom_dock";name = "docking port controller";pixel_x = 0;pixel_y = -25;req_one_access = list(103);tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault";dir = 8},/area/centcom/specops)
+"xI" = (/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"xJ" = (/obj/effect/decal/cleanable/greenglow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"xK" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "ramptop";dir = 4},/area/centcom/control)
+"xL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"xM" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/effect/decal/cleanable/dirt,/obj/item/weapon/stool,/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control)
+"xN" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control)
+"xO" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"xP" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/effect/decal/cleanable/dirt,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{tag = "icon-wood_siding1 (SOUTHEAST)";icon_state = "wood_siding1";dir = 6},/area/centcom/control)
+"xQ" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"xR" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
+"xS" = (/mob/living/simple_animal/crab/Coffee,/turf/unsimulated/beach/sand,/area/beach)
+"xT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xU" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xV" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xW" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/circular_saw,/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel{pixel_x = 4;pixel_y = 3},/obj/item/weapon/bonesetter,/obj/item/weapon/scalpel,/obj/item/weapon/retractor{pixel_x = 0;pixel_y = 6},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/FixOVein{pixel_x = -6;pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xY" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"xZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"ya" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"yb" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "vault";dir = 1},/area/centcom/specops)
+"yc" = (/turf/unsimulated/floor{icon_state = "loadingarea"},/area/centcom/specops)
+"yd" = (/obj/machinery/light/small{dir = 4},/turf/unsimulated/floor{icon_state = "loadingarea"},/area/centcom/specops)
+"ye" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp";prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"yf" = (/turf/space,/area/centcom/specops)
+"yg" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/control)
+"yh" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/control)
+"yi" = (/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/control)
+"yj" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"yk" = (/turf/unsimulated/floor{icon_state = "engine"},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/unsimulated/floor{icon_state = "wood_siding9"},/area/centcom/control)
+"yl" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
+"ym" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/control)
+"yn" = (/obj/item/clothing/head/collectable/paper,/turf/unsimulated/beach/sand,/area/beach)
+"yo" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "specops_centcom_dock_door";locked = 1},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/specops)
+"yp" = (/obj/machinery/vending/cola{name = "Robust Softdrinks";prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"yq" = (/obj/machinery/door/airlock/centcom{name = "Holding Cell";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_checkpoint_access";name = "NMSS Odin Checkpoint"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"yr" = (/turf/unsimulated/floor{icon_state = "sandwater"},/area/beach)
+"ys" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/specops)
+"yt" = (/turf/simulated/shuttle/plating,/area/centcom/specops)
+"yu" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-wall3 (NORTHWEST)";icon_state = "wall3";dir = 9},/area/shuttle/specops/centcom)
+"yv" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/specops/centcom)
+"yw" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "specops_shuttle_port_hatch";locked = 1;name = "Port Docking Hatch";req_access = list(13)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yx" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom)
+"yy" = (/obj/machinery/vending/cigarette{name = "cigarette machine";prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"yz" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding)
+"yA" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding)
+"yB" = (/obj/item/weapon/stool/padded,/obj/item/weapon/stool/padded,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding)
+"yC" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor,/area/centcom/holding)
+"yD" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding)
+"yE" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"yF" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding)
+"yG" = (/turf/unsimulated/wall/riveted,/area/centcom/holding)
+"yH" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_checkpoint_access";name = "NMSS Odin Checkpoint"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
+"yI" = (/turf/unsimulated/beach/coastline{density = 1;opacity = 1},/area/beach)
+"yJ" = (/turf/unsimulated/beach/coastline,/area/beach)
+"yK" = (/obj/machinery/recharger/wallcharger{pixel_x = 4;pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yL" = (/obj/machinery/recharger/wallcharger{pixel_x = 4;pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3;name = "Emergency NanoMed";pixel_x = -28;pixel_y = 0},/obj/machinery/light/small/readylight{tag = "icon-bulb1 (WEST)";icon_state = "bulb1";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yM" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "specops_shuttle_port";name = "port docking hatch controller";pixel_x = 0;pixel_y = 25;tag_door = "specops_shuttle_port_hatch"},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yN" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yO" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 4},/turf/unsimulated/floor,/area/shuttle/specops/centcom)
+"yQ" = (/obj/machinery/computer/security/telescreen{desc = "";name = "Spec. Ops. Monitor";network = list("ERT");pixel_y = 30},/obj/machinery/computer/shuttle_control/specops,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"yR" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom)
+"yS" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding)
+"yT" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding)
+"yU" = (/turf/unsimulated/floor{icon_state = "greencorner";dir = 1},/area/centcom/holding)
+"yV" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/holding)
+"yW" = (/turf/unsimulated/floor{icon_state = "greencorner";dir = 4},/area/centcom/holding)
+"yX" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/holding)
+"yY" = (/turf/unsimulated/beach/water{density = 1;opacity = 1},/area/beach)
+"yZ" = (/turf/unsimulated/beach/water,/area/beach)
+"za" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "specops_shuttle_fore";name = "forward docking hatch controller";pixel_x = 0;pixel_y = -25;tag_door = "specops_shuttle_fore_hatch"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"zb" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "specops_shuttle_fore_hatch";locked = 1;name = "Forward Docking Hatch";req_access = list(13)},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom)
+"zc" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"zd" = (/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"ze" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding)
+"zf" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
+"zg" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape/centcom)
+"zh" = (/obj/structure/window/shuttle{icon_state = "window4"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"zi" = (/obj/structure/window/shuttle{icon_state = "window12"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"zj" = (/obj/structure/window/shuttle{icon_state = "window8"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"zk" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape/centcom)
+"zl" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/holding)
+"zm" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-diagonalWall3 (NORTHEAST)";icon_state = "diagonalWall3";dir = 5},/area/shuttle/specops/centcom)
+"zn" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"zo" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light/small{brightness_color = "#DA0205";brightness_power = 1;brightness_range = 5},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"zp" = (/obj/machinery/computer/prisoner{name = "Implant Management"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"zq" = (/obj/machinery/computer/communications,/obj/item/device/radio/intercom{broadcasting = 0;dir = 1;frequency = 1443;listening = 1;name = "Spec Ops Intercom";pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
+"zr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
+"zs" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals - Holding Cell";dir = 4},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding)
+"zt" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell";req_access = list(2)},/turf/unsimulated/floor,/area/centcom/holding)
+"zu" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
+"zv" = (/obj/machinery/door/blast/regular{id = "CentComPort";name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"zw" = (/obj/machinery/door/airlock/centcom{name = "Arrivals Processing";opacity = 1;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zx" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
+"zy" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 9},/area/shuttle/escape/centcom)
+"zz" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"zA" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"zB" = (/obj/machinery/computer/shuttle_control/emergency,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"zC" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"zD" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"zE" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 5},/area/shuttle/escape/centcom)
+"zF" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
+"zG" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom)
+"zH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/centcom/holding)
+"zI" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell";req_access = list(2)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zJ" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding)
+"zK" = (/obj/machinery/door/window/northleft{base_state = "right";dir = 8;icon_state = "right";name = "Arrivals Processing";req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zL" = (/obj/item/modular_computer/console/preset/command,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zM" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge West"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zN" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zO" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zP" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge East"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zQ" = (/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding)
+"zR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zS" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors.";id = "CentComPort";name = "Security Doors";pixel_x = -12;pixel_y = -25;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zT" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North";dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"zU" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"zV" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "escape_shuttle";pixel_x = 0;pixel_y = -25;req_one_access = list(13);tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zW" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zX" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"zY" = (/obj/machinery/light/spot,/turf/simulated/shuttle/plating,/area/centcom/specops)
+"zZ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding)
+"Aa" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Ab" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding)
+"Ac" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "CentComPort";name = "Security Doors";opacity = 0},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Ad" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing";req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Ae" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/skills{icon_state = "medlaptop";pixel_x = 3;pixel_y = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Af" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Ag" = (/turf/simulated/shuttle/wall{dir = 2;icon_state = "swall_straight"},/area/shuttle/escape/centcom)
+"Ah" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Ai" = (/obj/item/modular_computer/console/preset/security,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Aj" = (/turf/simulated/shuttle/wall{icon_state = "swall"},/area/shuttle/escape/centcom)
+"Ak" = (/obj/structure/AIcore/deactivated,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Al" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Am" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"An" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Ao" = (/turf/unsimulated/wall/riveted,/area/centcom/ferry)
+"Ap" = (/obj/machinery/atm{pixel_x = -26},/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"Aq" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding)
+"Ar" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding)
+"As" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit";req_access = list(19)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"At" = (/turf/simulated/shuttle/wall{icon_state = "swall_t";dir = 1},/area/shuttle/escape/centcom)
+"Au" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 8},/area/shuttle/escape/centcom)
+"Av" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"},/area/shuttle/escape/centcom)
+"Aw" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/space,/area/space)
+"Ax" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1;name = "escapeshuttle_leave";teleport_x = 25;teleport_x_offset = 245;teleport_y = 25;teleport_y_offset = 245;teleport_z = 6;teleport_z_offset = 6},/obj/effect/step_trigger/thrower{affect_ghosts = 1;direction = 2;name = "thrower_throwdown";tiles = 0},/turf/simulated/mineral,/area/space)
+"Ay" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/ferry)
+"Az" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"AA" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 8},/area/centcom/ferry)
+"AB" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"AC" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_shuttle_bay";name = "shuttle bay controller";pixel_x = 0;pixel_y = 25;tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"AD" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/obj/structure/window/reinforced{dir = 5;health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"AE" = (/obj/machinery/computer/shuttle_control{req_access = list(101);shuttle_tag = "Centcom"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"AF" = (/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/ferry)
+"AG" = (/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/holding)
+"AH" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"AI" = (/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/holding)
+"AJ" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"},/area/shuttle/escape/centcom)
+"AK" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"AL" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Cell"},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"AM" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"AN" = (/turf/unsimulated/floor{icon_state = "warnplate"},/area/centcom/ferry)
+"AO" = (/turf/unsimulated/floor{icon_state = "warnplate";dir = 10},/area/centcom/ferry)
+"AP" = (/obj/machinery/door/airlock/external{frequency = 1380;glass = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_bay_door";locked = 1;name = "Transport Airlock"},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/ferry)
+"AQ" = (/obj/structure/window/shuttle{icon_state = "window2"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"AR" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"AS" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"AT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"AU" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/shuttle/transport1/centcom)
+"AV" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/transport1/centcom)
+"AW" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/transport1/centcom)
+"AX" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window4"},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"AY" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"AZ" = (/obj/structure/grille,/obj/structure/window/shuttle{tag = "icon-17 (NORTHEAST)";icon_state = "17"},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"Ba" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"Bb" = (/turf/space,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/transport1/centcom)
+"Bc" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Bd" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding)
+"Be" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"Bf" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"Bg" = (/obj/item/weapon/shovel,/turf/unsimulated/floor{icon_state = "asteroid"},/area/space)
+"Bh" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/space)
+"Bi" = (/obj/machinery/computer/shuttle_control{req_access = list(101);shuttle_tag = "Centcom"},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"Bj" = (/turf/simulated/shuttle/wall{icon_state = "swall_f";dir = 8},/area/shuttle/transport1/centcom)
+"Bk" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 9},/area/shuttle/transport1/centcom)
+"Bl" = (/turf/simulated/shuttle/wall{dir = 1;icon_state = "swall_f"},/area/shuttle/transport1/centcom)
+"Bm" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"Bn" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"Bo" = (/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"Bp" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"Bq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 4},/turf/unsimulated/floor,/area/shuttle/transport1/centcom)
+"Br" = (/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/riveted,/area/centcom/ferry)
+"Bs" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/obj/machinery/door/blast/regular{id = "crescent_vip_shuttle";name = "NMSS Odin VIP Shuttle"},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/ferry)
+"Bt" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner";dir = 4},/area/centcom/holding)
+"Bu" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2;pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Bv" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell";req_access = list(2)},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"Bw" = (/obj/item/weapon/coin/gold,/turf/unsimulated/floor{icon_state = "asteroid"},/area/space)
+"Bx" = (/obj/effect/decal/remains,/turf/unsimulated/floor{icon_state = "asteroid"},/area/space)
+"By" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"Bz" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"BA" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"BB" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"BC" = (/obj/structure/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 1;icon_state = "carpetside"},/area/centcom/holding)
+"BD" = (/obj/structure/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 9;icon_state = "carpetside"},/area/centcom/holding)
+"BE" = (/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"BF" = (/obj/structure/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/centcom/holding)
+"BG" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner";dir = 1},/area/centcom/holding)
+"BH" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"BI" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals East"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"BJ" = (/turf/unsimulated/floor{dir = 4;heat_capacity = 1;icon_state = "warning"},/area/centcom/holding)
+"BK" = (/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding)
+"BL" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_dock_airlock";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding)
+"BM" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/obj/machinery/mech_sensor{dir = 8;frequency = 1380;id_tag = "shuttle_dock_north_mech";pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BN" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BO" = (/obj/machinery/camera/network/crescent{c_tag = "Shuttle Center"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BP" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/shuttle/transport1/centcom)
+"BQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_shuttle";pixel_x = 0;pixel_y = -25;tag_door = "centcom_shuttle_hatch"},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"BR" = (/turf/simulated/shuttle/wall{icon_state = "swall_f";dir = 2},/area/shuttle/transport1/centcom)
+"BS" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 10},/area/shuttle/transport1/centcom)
+"BT" = (/turf/simulated/shuttle/wall{icon_state = "swall_f";dir = 4},/area/shuttle/transport1/centcom)
+"BU" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"BV" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"BW" = (/turf/unsimulated/floor{dir = 2;icon_state = "carpetsymbol"},/area/centcom/holding)
+"BX" = (/turf/unsimulated/floor{dir = 8;icon_state = "carpetside"},/area/centcom/holding)
+"BY" = (/turf/unsimulated/floor{dir = 4;icon_state = "carpetside"},/area/centcom/holding)
+"BZ" = (/obj/machinery/door/airlock/glass{name = "Arrivals Bar"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Ca" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West";dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Cb" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East";dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Cc" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
+"Cd" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/transport1/centcom)
+"Ce" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window12"},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"Cf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"Cg" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/transport1/centcom)
+"Ch" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 2;icon_state = "carpetside"},/area/centcom/holding)
+"Ci" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 10;icon_state = "carpetside"},/area/centcom/holding)
+"Cj" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 6;icon_state = "carpetside"},/area/centcom/holding)
+"Ck" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/holding)
+"Cl" = (/turf/unsimulated/floor{icon_state = "warning"},/area/centcom/holding)
+"Cm" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_dock";name = "docking port controller";pixel_x = 25;pixel_y = 0;req_one_access = list(13);tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{dir = 6;icon_state = "warning"},/area/centcom/holding)
+"Cn" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"Co" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1;pixel_y = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Cp" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1;pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East";dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Cq" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner";dir = 8},/area/centcom/holding)
+"Cr" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Cs" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
+"Ct" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/control)
+"Cu" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 0},/turf/unsimulated/wall/riveted,/area/centcom/holding)
+"Cv" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar Center"},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Cw" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Cx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals South";dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"Cy" = (/turf/unsimulated/floor{dir = 5;heat_capacity = 1;icon_state = "warning"},/area/centcom/holding)
+"Cz" = (/turf/unsimulated/floor{icon_state = "warning";dir = 1;heat_capacity = 1},/area/centcom/holding)
+"CA" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CB" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CC" = (/obj/machinery/cryopod,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CD" = (/obj/machinery/computer/cryopod{density = 0;layer = 3.3;pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CE" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/obj/structure/cryofeed,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CF" = (/obj/structure/cryofeed,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CG" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CH" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CI" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CK" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CL" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CM" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"CN" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape/centcom)
+"CO" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"CP" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"CQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"CR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"CS" = (/obj/structure/sign/double/barsign,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"CT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"CU" = (/turf/unsimulated/wall/riveted,/area/syndicate_mothership{name = "\improper Raider Base"})
+"CV" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"CW" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CX" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"CZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Da" = (/turf/unsimulated/floor{icon_state = "wood"},/obj/item/weapon/stool/padded,/turf/unsimulated/floor{name = "plating";icon_state = "siding2"},/area/centcom/holding)
+"Db" = (/turf/unsimulated/floor{icon_state = "greencorner";dir = 8},/area/centcom/holding)
+"Dc" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding)
+"Dd" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/obj/machinery/mech_sensor{dir = 8;frequency = 1380;id_tag = "shuttle_dock_south_mech";pixel_y = 19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"De" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Df" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dg" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine";prices = list();products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Di" = (/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dj" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dk" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dl" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dm" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dn" = (/obj/structure/mirror/raider{pixel_x = 0;pixel_y = 28},/obj/structure/sink{pixel_y = 11},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Do" = (/obj/structure/curtain/open/shower,/obj/machinery/shower,/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dp" = (/obj/structure/sink{pixel_y = 11},/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dq" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Dr" = (/turf/unsimulated/floor{icon_state = "wood"},/turf/unsimulated/floor{name = "plating";icon_state = "siding4"},/area/centcom/holding)
+"Ds" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"Dt" = (/obj/structure/sign/redcross,/turf/unsimulated/wall/riveted,/area/centcom/holding)
+"Du" = (/obj/machinery/door/airlock/glass_medical{name = "Arrivals Medbay"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Dv" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 2},/area/shuttle/escape/centcom)
+"Dw" = (/obj/machinery/door/airlock/glass_mining{name = "Shuttle Cargo"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Dx" = (/obj/machinery/door/airlock/glass_medical{name = "Escape Shuttle Infirmary";req_access = list(5)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Dy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Dz" = (/obj/item/weapon/broken_bottle,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"DA" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"DB" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"DC" = (/obj/item/weapon/mop,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"DD" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"DE" = (/turf/simulated/mineral,/area/syndicate_mothership{name = "\improper Raider Base"})
+"DF" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"DG" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"DH" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"DI" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"DJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/obj/item/clothing/head/that{pixel_x = 4;pixel_y = 6},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"DK" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"DL" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"DM" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"DN" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"DO" = (/obj/structure/bed/roller,/turf/unsimulated/floor{dir = 4;icon_state = "whitegreenfull"},/area/centcom/holding)
+"DP" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed";pixel_x = 0;pixel_y = 29},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding)
+"DQ" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/holding)
+"DR" = (/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/holding)
+"DS" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"DT" = (/obj/structure/closet/hydrant{pixel_x = 30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"DU" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"DV" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"DW" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"DX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8;pixel_x = 4;pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0;pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9;pixel_x = 2;pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"DY" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4;pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"DZ" = (/obj/structure/closet/hydrant{pixel_x = -30;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Ea" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Eb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ec" = (/obj/effect/decal/cleanable/ash,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ed" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ee" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/drinkingglasses,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ef" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Eg" = (/obj/structure/closet/crate/loot,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Eh" = (/obj/vehicle/bike,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ei" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ej" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Ek" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"El" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"Em" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/holding)
+"En" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/unsimulated/floor{dir = 8;icon_state = "whitegreencorner"},/area/centcom/holding)
+"Eo" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"Ep" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"Eq" = (/obj/machinery/door/airlock/centcom{name = "Aurora II Prepatory Wing";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Er" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/camera/network/crescent{c_tag = "Shuttle West Storage";dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Es" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Et" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical";dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Eu" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Ev" = (/obj/machinery/vending/wallmed1{layer = 3.3;name = "Emergency NanoMed";pixel_x = 28;pixel_y = 0},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Ew" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Ex" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/crescent{c_tag = "Shuttle East Storage";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"Ey" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "plating"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ez" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"EA" = (/obj/effect/decal/cleanable/vomit,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"EB" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/vending/cola{name = "hacked Robust Softdrinks";prices = list()},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"EC" = (/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"ED" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/single{icon = 'icons/obj/drinks.dmi';icon_state = "cola";name = "randomly spawned cola";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/reagent_containers/food/drinks/cans/cola},/obj/random/single{icon = 'icons/obj/playing_cards.dmi';icon_state = "deck";name = "randomly spawned deck of cards";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/deck},/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding)
+"EE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/lipstick/random,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding)
+"EF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/medical,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding)
+"EG" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 6},/area/centcom/holding)
+"EH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/wallet/random,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding)
+"EI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/tool,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 1},/area/centcom/holding)
+"EJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/action_figure,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding)
+"EK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding)
+"EL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/random/single{icon = 'icons/obj/items.dmi';icon_state = "lighter-g";name = "randomly spawned lighter";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/flame/lighter},/turf/unsimulated/floor{icon_state = "warnwhite";dir = 1},/area/centcom/holding)
+"EM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 9},/area/centcom/holding)
+"EN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/bible,/turf/unsimulated/floor{icon_state = "warnwhite";dir = 5},/area/centcom/holding)
+"EO" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"EP" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"EQ" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"ER" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
+"ES" = (/turf/unsimulated/floor{dir = 8;icon_state = "whitegreen"},/area/centcom/holding)
+"ET" = (/turf/unsimulated/floor{dir = 8;icon_state = "whitegreencorner"},/area/centcom/holding)
+"EU" = (/turf/unsimulated/floor{dir = 2;icon_state = "whitegreencorner"},/area/centcom/holding)
+"EV" = (/obj/structure/sign/nosmoking_2{pixel_x = 28;pixel_y = 0},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding)
+"EW" = (/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/spawning)
+"EX" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/spawning)
+"EY" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/spawning)
+"EZ" = (/turf/unsimulated/wall/riveted,/area/centcom/spawning)
+"Fa" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"Fb" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Fc" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Fd" = (/obj/structure/bed/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Fe" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Ff" = (/turf/unsimulated/floor{icon_state = "warnwhitecorner";dir = 8},/area/centcom/holding)
+"Fg" = (/obj/structure/table/standard,/obj/random/medical,/turf/unsimulated/floor{dir = 8;icon_state = "whitegreen"},/area/centcom/holding)
+"Fh" = (/turf/unsimulated/floor{icon_state = "warnwhitecorner";dir = 4},/area/centcom/holding)
+"Fi" = (/turf/unsimulated/floor{icon_state = "warnwhite";dir = 1},/area/centcom/holding)
+"Fj" = (/obj/structure/table/standard,/obj/random/plushie,/turf/unsimulated/floor{dir = 4;icon_state = "whitegreen"},/area/centcom/holding)
+"Fk" = (/obj/machinery/door/airlock/glass{name = "NMSS Odin Cryogenic Storage"},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreenfull"},/area/centcom/holding)
+"Fl" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"Fm" = (/obj/machinery/door/airlock/glass{name = "NMSS Odin Sports Megacenter"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Fn" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0;pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7;pixel_y = 1},/obj/item/weapon/wrench,/turf/unsimulated/floor{dir = 8;icon_state = "whitegreen"},/area/centcom/holding)
+"Fo" = (/turf/unsimulated/floor{dir = 10;icon_state = "whitegreen"},/area/centcom/holding)
+"Fp" = (/turf/unsimulated/floor{dir = 6;icon_state = "whitegreen"},/area/centcom/holding)
+"Fq" = (/turf/unsimulated/floor{dir = 8;icon_state = "whitehall"},/area/centcom/holding)
+"Fr" = (/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Fs" = (/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/spawning)
+"Ft" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Fu" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/spawning)
+"Fv" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/shuttle/escape/centcom)
+"Fw" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape/centcom)
+"Fx" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Fy" = (/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Fz" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/escape/centcom)
+"FA" = (/obj/machinery/optable,/obj/item/organ/stack,/obj/effect/decal/cleanable/blood/xeno,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FB" = (/obj/effect/decal/cleanable/generic,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FC" = (/obj/item/weapon/stool/padded,/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FD" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FE" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FF" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FG" = (/obj/random/vendor,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FH" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"FI" = (/turf/unsimulated/floor{dir = 4;icon_state = "whitegreen"},/area/centcom/holding)
+"FJ" = (/turf/unsimulated/floor{icon_state = "whitegreen";dir = 1},/area/centcom/holding)
+"FK" = (/turf/unsimulated/floor{dir = 9;icon_state = "whitegreen"},/area/centcom/holding)
+"FL" = (/turf/unsimulated/floor{dir = 5;icon_state = "whitegreen"},/area/centcom/holding)
+"FM" = (/turf/unsimulated/floor{icon_state = "green";dir = 1},/area/centcom/holding)
+"FN" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Medical";dir = 4},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding)
+"FO" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{dir = 9;icon_state = "whitegreen"},/area/centcom/holding)
+"FP" = (/turf/unsimulated/floor{dir = 1;icon_state = "whitegreencorner"},/area/centcom/holding)
+"FQ" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 10},/area/shuttle/escape/centcom)
+"FR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"FS" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 6},/area/shuttle/escape/centcom)
+"FT" = (/obj/item/organ/xenos/eggsac,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FU" = (/obj/structure/mirror/raider{pixel_x = 0;pixel_y = 28},/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FV" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FW" = (/obj/item/clothing/head/philosopher_wig,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2;pixel_y = 6},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -6},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FY" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"FZ" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp";prices = list()},/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ga" = (/obj/machinery/door/airlock/hatch{name = "Warehouse";req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gb" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6;pixel_y = 1},/turf/unsimulated/floor{name = "plating";icon_state = "whitecorner"},/area/centcom/holding)
+"Gc" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0;pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{dir = 2;icon_state = "whitehall"},/area/centcom/holding)
+"Gd" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/turf/unsimulated/floor{dir = 2;icon_state = "whitehall"},/area/centcom/holding)
+"Ge" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{icon_state = "whitecorner";dir = 8},/area/centcom/holding)
+"Gf" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4;pixel_y = 3},/turf/unsimulated/floor{dir = 2;icon_state = "whitehall"},/area/centcom/holding)
+"Gg" = (/turf/unsimulated/floor{dir = 4;icon_state = "whitegreencorner"},/area/centcom/holding)
+"Gh" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
+"Gi" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gj" = (/obj/item/tape/engineering{icon_state = "engineering_v"},/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gk" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/dice,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gl" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/item/pizzabox/meat,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gm" = (/obj/machinery/vending/sovietsoda,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gn" = (/obj/item/weapon/cigbutt,/turf/unsimulated/floor{dir = 8;icon_state = "wood"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Go" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gp" = (/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding)
+"Gq" = (/turf/unsimulated/floor{icon_state = "whitehall";dir = 4},/area/centcom/holding)
+"Gr" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre";req_access = list(45)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"Gs" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gt" = (/obj/effect/decal/remains/robot,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Gu" = (/obj/machinery/door/window/northleft{name = "Women's Changing Room"},/turf/unsimulated/floor{icon_state = "whitered";dir = 1},/area/centcom/holding)
+"Gv" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whitered_c";dir = 9},/area/centcom/holding)
+"Gw" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whitered_w";dir = 5},/area/centcom/holding)
+"Gx" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whitered_w";dir = 5},/area/centcom/holding)
+"Gy" = (/obj/machinery/door/window/northright{name = "Women's Changing Room"},/turf/unsimulated/floor{icon_state = "whitered";dir = 1},/area/centcom/holding)
+"Gz" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 9},/area/centcom/holding)
+"GA" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 5},/area/centcom/holding)
+"GB" = (/obj/machinery/door/window/northleft{name = "Men's Changing Room"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 1},/area/centcom/holding)
+"GC" = (/obj/machinery/door/window/northright{name = "Men's Changing Room"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 1},/area/centcom/holding)
+"GD" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/tinted{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 9},/area/centcom/holding)
+"GE" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding)
+"GF" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{icon_state = "escapecorner";dir = 4},/area/centcom/holding)
+"GG" = (/turf/unsimulated/floor{icon_state = "whitehall";dir = 5},/area/centcom/holding)
+"GH" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
+"GI" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed";pixel_x = 28},/turf/unsimulated/floor{icon_state = "whitecorner";dir = 1},/area/centcom/holding)
+"GJ" = (/turf/unsimulated/floor{icon_state = "whitehall";dir = 9},/area/centcom/holding)
+"GK" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 0;pixel_y = 0},/turf/unsimulated/floor{dir = 4;icon_state = "whitegreen"},/area/centcom/holding)
+"GL" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning)
+"GM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning)
+"GN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning)
+"GO" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning)
+"GP" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning)
+"GQ" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning)
+"GR" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"GS" = (/obj/effect/decal/cleanable/blood/oil/streak,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"GT" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"GU" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"GV" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"GW" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whitered";dir = 8},/area/centcom/holding)
+"GX" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whitered";dir = 4},/area/centcom/holding)
+"GY" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whitered";dir = 4},/area/centcom/holding)
+"GZ" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 8},/area/centcom/holding)
+"Ha" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 4},/area/centcom/holding)
+"Hb" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 8},/area/centcom/holding)
+"Hc" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"Hd" = (/obj/structure/mirror{pixel_y = 32},/obj/structure/sink{pixel_y = 16},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"He" = (/obj/structure/mirror{pixel_y = 32},/obj/structure/sink{pixel_y = 16},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"Hf" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding)
+"Hg" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3;pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Hh" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{dir = 1;icon_state = "whitehall"},/area/centcom/holding)
+"Hi" = (/turf/unsimulated/floor{icon_state = "escapecorner";dir = 4},/area/centcom/holding)
+"Hj" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4;pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4;pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5;pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5;pixel_y = -1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Hk" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "whitecorner";dir = 1},/area/centcom/holding)
+"Hl" = (/obj/machinery/bodyscanner{dir = 8;icon_state = "body_scanner_0";tag = "icon-body_scanner_0 (EAST)"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Hm" = (/obj/structure/bed/roller,/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding)
+"Hn" = (/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/unsimulated/floor{icon_state = "whitehall";dir = 4},/area/centcom/holding)
+"Ho" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{layer = 2.8;pixel_x = 4;pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9;pixel_x = 2;pixel_y = 3},/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding)
+"Hp" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2;pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2;pixel_y = 4},/obj/item/weapon/storage/firstaid/adv{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/turf/unsimulated/floor{dir = 0;icon_state = "whitegreen"},/area/centcom/holding)
+"Hq" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{dir = 6;icon_state = "whitegreen"},/area/centcom/holding)
+"Hr" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning)
+"Hs" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning)
+"Ht" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning)
+"Hu" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning)
+"Hv" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning)
+"Hw" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/arrival/centcom)
+"Hx" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/shuttle/arrival/centcom)
+"Hy" = (/turf/simulated/shuttle/wall{icon_state = "swall_t";dir = 1},/area/shuttle/arrival/centcom)
+"Hz" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window4"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"HA" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window12"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"HB" = (/obj/structure/grille,/obj/structure/window/shuttle{tag = "icon-17 (NORTHEAST)";icon_state = "17"},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"HC" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/arrival/centcom)
+"HD" = (/turf/unsimulated/wall/fakepdoor{name = "shuttle bay blast door"},/area/centcom/spawning)
+"HE" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"HF" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/obj/item/weapon/gun/launcher/spikethrower,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"HG" = (/obj/machinery/door/airlock/centcom{name = "Unisex Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"HH" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning)
+"HI" = (/obj/machinery/door/airlock/centcom{name = "To: Arrivals Deck"},/turf/unsimulated/floor,/area/centcom/spawning)
+"HJ" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning)
+"HK" = (/obj/machinery/door/window/westright,/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning)
+"HL" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning)
+"HM" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning)
+"HN" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"HO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HP" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/arrival/centcom)
+"HQ" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HR" = (/obj/machinery/light{dir = 1},/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HS" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HT" = (/obj/structure/closet/emcloset,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Shuttle"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HU" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HV" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"HW" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 5},/area/shuttle/arrival/centcom)
+"HX" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/arrival/centcom)
+"HY" = (/obj/structure/bed/chair,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"HZ" = (/turf/unsimulated/floor{icon_state = "whitered"},/area/centcom/holding)
+"Ia" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whitered_a";dir = 10},/area/centcom/holding)
+"Ib" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whitered_a";dir = 6},/area/centcom/holding)
+"Ic" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whitered_a";dir = 6},/area/centcom/holding)
+"Id" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "whiteblue_ex";dir = 10},/area/centcom/holding)
+"Ie" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "whiteblue";dir = 6},/area/centcom/holding)
+"If" = (/turf/unsimulated/floor{icon_state = "whiteblue"},/area/centcom/holding)
+"Ig" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "whiteblue_ex";dir = 10},/area/centcom/holding)
+"Ih" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = "odin_stall";name = "Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"Ii" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals - Holding Cell";dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"Ij" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning)
+"Ik" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning)
+"Il" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning)
+"Im" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"In" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/shuttle/engine/heater{icon_state = "heater";dir = 8},/turf/unsimulated/floor{name = "plating"},/area/shuttle/arrival/centcom)
+"Io" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Ip" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Iq" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Ir" = (/obj/structure/window/shuttle{icon_state = "window2"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"Is" = (/obj/structure/table/rack,/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"It" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Iu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Iv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Iw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ix" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Iy" = (/obj/machinery/button/remote/airlock{id = "odin_stall";name = "Door Bolt Control";pixel_x = -25;pixel_y = 8;specialfunctions = 4},/obj/structure/toilet{dir = 1},/obj/machinery/light/small{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"Iz" = (/obj/structure/window/basic{dir = 4},/obj/machinery/shower{dir = 1},/obj/machinery/door/window/northleft{name = "Shower";req_access = list()},/obj/structure/curtain/open/shower,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"IA" = (/obj/structure/window/basic{dir = 8},/obj/machinery/shower{dir = 1},/obj/machinery/door/window/northright{name = "Shower"},/obj/structure/curtain/open/shower,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/holding)
+"IB" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding)
+"IC" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/holding)
+"ID" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/holding)
+"IE" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning)
+"IF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning)
+"IG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/spawning)
+"IH" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"II" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"IJ" = (/obj/machinery/status_display/arrivals_display{pixel_x = 32},/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/spawning)
+"IK" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "arrival_shuttle";pixel_x = 0;pixel_y = -25;req_one_access = list(13);tag_door = "arrival_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"IL" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"IM" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"})
+"IN" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"IO" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"})
+"IP" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"IQ" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"IR" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"IS" = (/obj/structure/holostool,/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding)
+"IT" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/holding)
+"IU" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/centcom/holding)
+"IV" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/holding)
+"IW" = (/obj/structure/table/holotable,/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/holding)
+"IX" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/spawning)
+"IY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning)
+"IZ" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning)
+"Ja" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r";dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/arrival/centcom)
+"Jb" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 2},/area/shuttle/arrival/centcom)
+"Jc" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Jd" = (/obj/machinery/requests_console{department = "Arrival shuttle";pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Je" = (/turf/simulated/shuttle/wall{icon_state = "swall";dir = 6},/area/shuttle/arrival/centcom)
+"Jf" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/arrival/centcom)
+"Jg" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Jh" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ji" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Jj" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/holding)
+"Jk" = (/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/holding)
+"Jl" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/spawning)
+"Jm" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/spawning)
+"Jn" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/spawning)
+"Jo" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/spawning)
+"Jp" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/spawning)
+"Jq" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 1},/area/shuttle/arrival/centcom)
+"Jr" = (/obj/machinery/status_display/arrivals_display,/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 4},/area/shuttle/arrival/centcom)
+"Js" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"},/area/shuttle/arrival/centcom)
+"Jt" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrival_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Ju" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/shuttle/arrival/centcom)
+"Jv" = (/obj/machinery/door/window/holowindoor{base_state = "right";dir = 2;icon_state = "right";name = "Red Corner"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"Jw" = (/obj/structure/window/reinforced/holowindow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"Jx" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North";dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"Jy" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals - Holding Cell";dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"Jz" = (/obj/machinery/door/window/holowindoor{name = "Red Team"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"JA" = (/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/spawning)
+"JB" = (/obj/machinery/door/airlock/centcom{name = "To: NMSS Odin Hab Complex"},/turf/unsimulated/floor,/area/centcom/spawning)
+"JC" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/spawning)
+"JD" = (/obj/machinery/door/window/westleft,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/spawning)
+"JE" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/spawning)
+"JF" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning)
+"JG" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning)
+"JH" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_arrivals_airlock";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning)
+"JI" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8;icon_state = "diagonalWall3"},/area/skipjack_station/start)
+"JJ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1;icon_state = "diagonalWall3"},/area/skipjack_station/start)
+"JK" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"JL" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/holding)
+"JM" = (/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/holding)
+"JN" = (/obj/structure/window/reinforced/holowindow{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"JO" = (/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/spawning)
+"JP" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/spawning)
+"JQ" = (/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/spawning)
+"JR" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/spawning)
+"JS" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/spawning)
+"JT" = (/obj/effect/landmark{name = "JoinLate"},/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/spawning)
+"JU" = (/obj/machinery/light/spot,/turf/unsimulated/floor{name = "plating"},/area/centcom/spawning)
+"JV" = (/turf/simulated/wall/voxshuttle,/area/skipjack_station/start)
+"JW" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_northwest_lock";locked = 0;req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"JX" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1331;master_tag = "vox_west_control";req_one_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start)
+"JY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"JZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ka" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Kb" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_northeast_lock";locked = 0;req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Kc" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1331;master_tag = "vox_east_control";req_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start)
+"Kd" = (/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/holding)
+"Ke" = (/obj/structure/window/reinforced/holowindow/disappearing,/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/centcom/holding)
+"Kf" = (/obj/structure/window/reinforced/holowindow/disappearing,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Kg" = (/obj/structure/window/reinforced/holowindow/disappearing,/turf/unsimulated/floor{icon_state = "red";dir = 4},/area/centcom/holding)
+"Kh" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = newlist()},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Ki" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/spawning)
+"Kj" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning)
+"Kk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/spawning)
+"Kl" = (/obj/machinery/airlock_sensor{frequency = 1331;id_tag = "vox_west_sensor";pixel_x = 25},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Km" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331;id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Kn" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Ko" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Kp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Kq" = (/obj/machinery/button/remote/blast_door{id = "skipjackshutters";name = "remote shutter control";req_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start)
+"Kr" = (/obj/machinery/airlock_sensor{frequency = 1331;id_tag = "vox_east_sensor";pixel_x = -25},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ks" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 0;frequency = 1331;id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Kt" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/turf/unsimulated/floor{icon_state = "green";dir = 8},/area/centcom/holding)
+"Ku" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"Kv" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/centcom/holding)
+"Kw" = (/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning)
+"Kx" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning)
+"Ky" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning)
+"Kz" = (/obj/machinery/porta_turret/crescent,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"KA" = (/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning)
+"KB" = (/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning)
+"KC" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"KD" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent";tag_exterior_door = "vox_northwest_lock";frequency = 1331;id_tag = "vox_west_control";tag_interior_door = "vox_southwest_lock";pixel_x = 24;req_access = list(150);tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1331;id_tag = "vox_west_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"KE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KG" = (/obj/structure/bed/chair{dir = 1},/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/head/pirate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KH" = (/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KI" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent";tag_exterior_door = "vox_northeast_lock";frequency = 1331;id_tag = "vox_east_control";tag_interior_door = "vox_southeast_lock";pixel_x = -24;req_access = list(150);tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1331;id_tag = "vox_east_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"KJ" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"KK" = (/turf/unsimulated/floor{icon_state = "blue";dir = 8},/area/centcom/spawning)
+"KL" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning)
+"KM" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 4},/area/centcom/spawning)
+"KN" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 4},/area/centcom/spawning)
+"KO" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning)
+"KP" = (/obj/structure/table/rack,/obj/item/ammo_magazine/d762,/obj/item/weapon/gun/projectile/dragunov,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KQ" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KR" = (/obj/structure/table/rack,/obj/random/melee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"KS" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 1},/area/centcom/spawning)
+"KT" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"KU" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_southwest_lock";locked = 0;req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"KV" = (/obj/machinery/door/airlock/hatch{frequency = 1331;icon_state = "door_closed";id_tag = "vox_southeast_lock";locked = 0;req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"KW" = (/obj/machinery/door/window/holowindoor{dir = 1;name = "Green Corner"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"KX" = (/obj/machinery/door/window/holowindoor{base_state = "right";icon_state = "right";name = "Green Team"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"KY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"KZ" = (/obj/machinery/megavendor,/turf/unsimulated/floor{icon_state = "vault";dir = 9},/area/centcom/spawning)
+"La" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/material/harpoon,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/stealth,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lb" = (/turf/unsimulated/floor{icon_state = "plaque"},/area/centcom/spawning)
+"Lc" = (/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/material/minihoe,/obj/item/weapon/beartrap,/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ld" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Le" = (/obj/structure/table/rack,/obj/random/energy_antag,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Lf" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/item/device/multitool,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lg" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lh" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Li" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/suit/space/void/atmos,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/hacker,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lj" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior";frequency = 1331;master_tag = "vox_west_control";pixel_x = -22;req_one_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lk" = (/obj/machinery/microwave{pixel_x = -1;pixel_y = 8},/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ll" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior";frequency = 1331;master_tag = "vox_east_control";pixel_x = 22;req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lm" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"Ln" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"Lo" = (/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning)
+"Lp" = (/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning)
+"Lq" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Lr" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ls" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lt" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lu" = (/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning)
+"Lv" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "wood_siding2"},/area/centcom/spawning)
+"Lw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Lx" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Ly" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Lz" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"LA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"LB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"LC" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/holding)
+"LD" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen";item_state = "boxinggreen"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"LE" = (/obj/structure/table/holotable,/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding)
+"LF" = (/obj/machinery/status_display/arrivals_display,/turf/unsimulated/wall/riveted,/area/centcom/spawning)
+"LG" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall/riveted,/area/centcom/spawning)
+"LH" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/centcom/holding)
+"LI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LK" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "wood_siding4"},/area/centcom/spawning)
+"LL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/lavendergrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LR" = (/obj/item/robot_parts/l_leg,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"LS" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "wood_siding8"},/area/centcom/spawning)
+"LT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"LU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/fullgrass,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"LW" = (/turf/unsimulated/floor{icon_state = "floor"},/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "wood_siding1"},/area/centcom/spawning)
+"LX" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"LY" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"LZ" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Ma" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Mb" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit/improved,/obj/item/device/suit_cooling_unit/improved,/obj/item/weapon/rig/industrial/syndicate,/obj/item/weapon/pickaxe/jackhammer,/obj/item/weapon/pickaxe/jackhammer,/obj/item/weapon/pickaxe/jackhammer,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Mc" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Md" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Me" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mf" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Mg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mh" = (/obj/structure/table/standard,/obj/item/clothing/glasses/sunglasses{pixel_x = 4;pixel_y = 4},/obj/item/clothing/glasses/sunglasses{pixel_x = 1;pixel_y = 1;pixel_z = 0},/obj/item/clothing/glasses/sunglasses{pixel_x = -2;pixel_y = -2},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding)
+"Mi" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding)
+"Mj" = (/obj/structure/table/standard,/obj/item/clothing/ears/earmuffs{pixel_x = 4;pixel_y = 4},/obj/item/clothing/ears/earmuffs{pixel_x = 1;pixel_y = 1},/obj/item/clothing/ears/earmuffs{pixel_x = -2;pixel_y = -2},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding)
+"Mk" = (/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding)
+"Ml" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding)
+"Mm" = (/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/holding)
+"Mn" = (/obj/structure/holohoop,/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/holding)
+"Mo" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mp" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Mq" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Mr" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Ms" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1";name = "grass"},/area/centcom/spawning)
+"Mt" = (/obj/item/weapon/wrench,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mu" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/crowbar,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mv" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"Mw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters";name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mx" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"My" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning)
+"Mz" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MA" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MB" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MC" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"MD" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"ME" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"MF" = (/obj/structure/table/steel,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"MG" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"MH" = (/turf/unsimulated/floor{icon_state = "bluecorner"},/area/centcom/spawning)
+"MI" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning)
+"MJ" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"MK" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"ML" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MM" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MN" = (/turf/unsimulated/floor{icon_state = "bluecorner";dir = 8},/area/centcom/spawning)
+"MO" = (/obj/structure/banner,/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning)
+"MP" = (/obj/machinery/light/small{dir = 1},/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"MQ" = (/obj/machinery/bodyscanner{allowed_species = list("Human","Skrell","Unathi","Tajara","M'sai Tajara","Zhan-Khazan Tajara","Vaurca Worker","Vaurca Warrior","Diona","Vox");dir = 8;icon_state = "body_scanner_0";tag = "icon-body_scanner_0 (EAST)"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"MR" = (/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/holding)
+"MS" = (/obj/structure/flora/pottedplant/random,/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning)
+"MT" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/skipjack_station/start)
+"MU" = (/obj/structure/shuttle/engine/heater,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MV" = (/obj/structure/flora/pottedplant/random,/turf/unsimulated/floor{icon_state = "blue";dir = 6},/area/centcom/spawning)
+"MW" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "odinasshutters";name = "Blast Shutters";opacity = 0},/turf/unsimulated/floor{icon_state = "blue";dir = 9},/area/centcom/spawning)
+"MX" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced/crescent{icon_state = "rwindow";dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "odinasshutters";name = "Blast Shutters";opacity = 0},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning)
+"MY" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/northright{req_access = list(109)},/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "odinasshutters";name = "Blast Shutters";opacity = 0},/turf/unsimulated/floor{icon_state = "blue";dir = 1},/area/centcom/spawning)
+"MZ" = (/obj/machinery/status_display/arrivals_display{pixel_y = -32},/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning)
+"Na" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/holding)
+"Nb" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2";dir = 8},/area/wizard_station)
+"Nc" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 9},/area/wizard_station)
+"Nd" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 5},/area/wizard_station)
+"Ne" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Nf" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4;icon_state = "diagonalWall3"},/area/skipjack_station/start)
+"Ng" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northleft,/obj/machinery/door/window/southright,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/centcom/holding)
+"Nh" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/practice,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/holding)
+"Ni" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/practice,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/holding)
+"Nj" = (/obj/machinery/door/blast/regular/open{id = "odinaslockdown"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Nk" = (/obj/machinery/door/airlock/centcom{name = "Security Checkpoint";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Nl" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station)
+"Nm" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{icon_state = "bluecorner";dir = 4},/area/centcom/spawning)
+"Nn" = (/obj/machinery/button/remote/blast_door{id = "odinaslockdown";name = "Arrivals Lockdown";pixel_x = 8;pixel_y = 28;req_access = list(109)},/obj/machinery/button/remote/blast_door{id = "odinasshutters";name = "Security Shutters";pixel_x = -8;pixel_y = 28},/turf/unsimulated/floor{icon_state = "blue";dir = 5},/area/centcom/spawning)
+"No" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"Np" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/skipjack_station/start)
+"Nq" = (/obj/structure/table/standard,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"Nr" = (/obj/structure/table/standard,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"Ns" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"Nt" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Nu" = (/obj/machinery/door/airlock/centcom{name = "Unisex Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"Nv" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack/satchel/withwallet,/turf/unsimulated/floor{dir = 9;icon_state = "carpetside"},/area/wizard_station)
+"Nw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0;pixel_x = -3;pixel_y = 8},/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/wizard_station)
+"Nx" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "\[center]\[b]LIST OF SPELLS AVAILABLE\[/b]\[/center]\[br]\[br]Magic Missile:\[br]This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.\[br]\[br]Fireball:\[br]This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.\[br]\[br]Disintegrate:\[br]This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.\[br]\[br]Disable Technology:\[br]This spell disables all weapons, cameras and most other technology in range.\[br]\[br]Smoke:\[br]This spell spawns a cloud of choking smoke at your location and does not require wizard garb.\[br]\[br]Blind:\[br]This spell temporarly blinds a single person and does not require wizard garb.\[br]Forcewall:\[br]This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.\[br]\[br]Blink:\[br]This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.\[br]\[br]Teleport:\[br]This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.\[br]\[br]Mutate:\[br]This spell causes you to turn into a hulk, and gain telekinesis for a short while.\[br]\[br]Ethereal Jaunt:\[br]This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.\[br]\[br]Knock:\[br]This spell opens nearby doors and does not require wizard garb.\[br]";name = "List of Available Spells (READ)"},/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/wizard_station)
+"Ny" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/holding)
+"Nz" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/holding)
+"NA" = (/obj/item/weapon/beach_ball/holoball,/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/holding)
+"NB" = (/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/holding)
+"NC" = (/turf/unsimulated/floor{icon_state = "red";dir = 1},/area/centcom/spawning)
+"ND" = (/turf/unsimulated/floor{icon_state = "red";dir = 9},/area/centcom/spawning)
+"NE" = (/turf/unsimulated/wall/riveted,/area/wizard_station)
+"NF" = (/turf/unsimulated/floor{icon_state = "red";dir = 5},/area/centcom/spawning)
+"NG" = (/obj/structure/filingcabinet,/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning)
+"NH" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NI" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"NJ" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/retractor,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"NK" = (/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NL" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NM" = (/obj/structure/cryofeed,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NN" = (/obj/item/modular_computer/console/preset/command,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"NO" = (/obj/machinery/cryopod,/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NP" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NQ" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NR" = (/obj/machinery/status_display/arrivals_display{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"NS" = (/turf/unsimulated/floor{dir = 8;icon_state = "carpetside"},/area/wizard_station)
+"NT" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"NU" = (/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 4;icon_state = "carpetside"},/area/wizard_station)
+"NV" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{dir = 2;icon_state = "carpetsymbol"},/area/wizard_station)
+"NW" = (/turf/unsimulated/floor{icon_state = "green";dir = 9},/area/centcom/holding)
+"NX" = (/turf/unsimulated/floor{icon_state = "green";dir = 5},/area/centcom/holding)
+"NY" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/centcom/spawning)
+"NZ" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"Oa" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/centcom/spawning)
+"Ob" = (/obj/machinery/door/airlock/centcom{name = "Staff Only";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Oc" = (/turf/unsimulated/floor{icon_state = "red";dir = 6},/area/centcom/spawning)
+"Od" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "centcom_setup";name = "docking port controller";pixel_x = 25;pixel_y = 0;req_one_access = list(13);tag_door = "centcom_arrivals_airlock"},/turf/unsimulated/floor{icon_state = "blue";dir = 4},/area/centcom/spawning)
+"Oe" = (/obj/machinery/suit_cycler/wizard,/turf/unsimulated/floor{dir = 10;icon_state = "carpetside"},/area/wizard_station)
+"Of" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly";frequency = 1213;name = "Syndicate Intercom";pixel_x = 32;subspace_transmission = 1;syndie = 1},/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/turf/unsimulated/floor{dir = 6;icon_state = "carpetside"},/area/wizard_station)
+"Og" = (/turf/unsimulated/floor{dir = 2;icon_state = "carpetside"},/area/wizard_station)
+"Oh" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start)
+"Oi" = (/turf/unsimulated/floor{icon_state = "ramptop";dir = 2},/area/centcom/spawning)
+"Oj" = (/obj/structure/closet/wardrobe{name = "Officer's Wardrobe"},/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/officer,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "blue"},/area/centcom/spawning)
+"Ok" = (/obj/structure/closet/wardrobe{name = "Officer's Wardrobe"},/obj/item/clothing/under/rank/centcom_officer,/obj/item/clothing/shoes/white,/obj/item/clothing/gloves/white,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/holster/hip,/obj/item/device/radio/headset/ert,/obj/item/clothing/head/beret/centcom/officer,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "blue";dir = 10},/area/centcom/spawning)
+"Ol" = (/obj/structure/simple_door/iron{name = "Interdimensional Prison Cell"},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Om" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start)
+"On" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3;pixel_y = 3},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Oo" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3;pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start)
+"Op" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 2},/area/centcom/spawning)
+"Oq" = (/obj/machinery/door/airlock/centcom{name = "The Big Empty";opacity = 1;req_access = list(109)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Or" = (/obj/structure/urinal{dir = 4;icon_state = "urinal";pixel_x = -32},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"Os" = (/obj/structure/toilet{dir = 8},/obj/machinery/button/remote/airlock{id = "odin_stall2";name = "Door Bolt Control";pixel_x = 25;pixel_y = 8;specialfunctions = 4},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"Ot" = (/obj/structure/holohoop{dir = 1},/turf/unsimulated/floor{icon_state = "green"},/area/centcom/holding)
+"Ou" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = "odin_stall2";name = "Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor";dir = 2},/area/centcom/spawning)
+"Ov" = (/turf/unsimulated/wall/fakeglass{dir = 1;icon_state = "fakewindows"},/area/wizard_station)
+"Ow" = (/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Ox" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Oy" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Oz" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2";dir = 1},/area/wizard_station)
+"OA" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable.";name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OB" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OC" = (/turf/unsimulated/wall/riveted,/area/tdome)
+"OD" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{name = "plating"},/area/tdome)
+"OE" = (/obj/structure/target_stake,/obj/item/target,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "redfull"},/area/centcom/holding)
+"OF" = (/obj/structure/target_stake,/obj/item/target,/obj/effect/decal/warning_stripes,/turf/unsimulated/floor{icon_state = "bluefull"},/area/centcom/holding)
+"OG" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OH" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"OI" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"OJ" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OK" = (/obj/structure/table/rack,/obj/item/clothing/gloves/green,/obj/item/clothing/gloves/rainbow,/obj/item/clothing/gloves/blue,/obj/item/clothing/gloves/orange,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/red,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OL" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas/cyborg,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/mask/gas/plaguedoctor,/obj/item/clothing/mask/luchador/rudos,/obj/item/clothing/mask/luchador/tecnicos,/obj/item/clothing/mask/pig,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OM" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"ON" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"OO" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"OP" = (/obj/machinery/camera/network/crescent{c_tag = "Shuttle West";dir = 4},/turf/unsimulated/floor{icon_state = "green";dir = 10},/area/centcom/holding)
+"OQ" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OR" = (/obj/structure/table/rack,/obj/item/clothing/glasses/eyepatch,/obj/item/clothing/glasses/monocle,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OS" = (/obj/structure/table/rack,/obj/item/clothing/mask/smokable/pipe/cobpipe,/obj/item/clothing/mask/smokable/pipe,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigar,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OT" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome";name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"OU" = (/obj/structure/table/rack,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/obj/item/xenos_claw,/obj/item/device/megaphone,/obj/item/weapon/material/knife/ritual,/obj/item/device/flashlight/lantern,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OV" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/cultpack,/obj/item/weapon/storage/backpack,/obj/effect/decal/cleanable/dirt,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"OW" = (/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/tdome)
+"OX" = (/turf/unsimulated/floor{icon_state = "neutral";dir = 8},/area/tdome)
+"OY" = (/turf/unsimulated/floor{icon_state = "neutral";dir = 4},/area/tdome)
+"OZ" = (/obj/structure/cult/tome,/obj/effect/decal/cleanable/cobweb,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Pa" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome)
+"Pb" = (/obj/machinery/librarycomp,/obj/structure/table/woodentable,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Pc" = (/obj/machinery/vending/magivend,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Pd" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/woodentable,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Pe" = (/turf/unsimulated/floor{dir = 8;icon_state = "red"},/area/tdome)
+"Pf" = (/turf/unsimulated/floor{icon_state = "green";dir = 4},/area/tdome)
+"Pg" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{dir = 9;icon_state = "carpetside"},/area/wizard_station)
+"Ph" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{dir = 5;icon_state = "carpetside"},/area/wizard_station)
+"Pi" = (/obj/structure/table/woodentable,/obj/item/organ/heart,/turf/unsimulated/floor{dir = 1;icon_state = "carpetside"},/area/wizard_station)
+"Pj" = (/turf/unsimulated/floor{icon_state = "red";dir = 10},/area/tdome)
+"Pk" = (/turf/unsimulated/floor{icon_state = "red";dir = 2},/area/tdome)
+"Pl" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Pm" = (/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Pn" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Po" = (/turf/unsimulated/floor{icon_state = "green";dir = 6},/area/tdome)
+"Pp" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{dir = 8;icon_state = "carpetside"},/area/wizard_station)
+"Pq" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{dir = 4;icon_state = "carpetside"},/area/wizard_station)
+"Pr" = (/obj/structure/table/woodentable,/obj/item/toy/figure/wizard,/turf/unsimulated/floor{icon_state = "carpet";dir = 2},/area/wizard_station)
+"Ps" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome";name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"Pt" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/turf/unsimulated/floor{icon_state = "carpet";dir = 2},/area/wizard_station)
+"Pu" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/tdome)
+"Pv" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/unsimulated/floor{dir = 10;icon_state = "carpetside"},/area/wizard_station)
+"Pw" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 8},/turf/unsimulated/floor{dir = 6;icon_state = "carpetside"},/area/wizard_station)
+"Px" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{dir = 2;icon_state = "carpetside"},/area/wizard_station)
+"Py" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome";name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault";dir = 5},/area/tdome)
+"Pz" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"PA" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"PB" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PC" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PD" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PE" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
+"PF" = (/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PG" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PH" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
+"PI" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PJ" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"PK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"PL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"PM" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"PN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"PO" = (/turf/unsimulated/floor{icon_state = "rampbottom";dir = 1},/area/wizard_station)
+"PP" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
+"PQ" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PR" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PS" = (/turf/unsimulated/wall/riveted,/area/tdome/tdome2)
+"PT" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"PU" = (/turf/unsimulated/wall/riveted,/area/tdome/tdome1)
+"PV" = (/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station)
+"PW" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome2)
+"PX" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/floor,/area/tdome)
+"PY" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/tdome)
+"PZ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome1)
+"Qa" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station)
+"Qb" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Qc" = (/obj/machinery/igniter,/obj/structure/banner,/turf/simulated/floor,/area/tdome)
+"Qd" = (/turf/simulated/floor,/area/tdome)
+"Qe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/tdome)
+"Qf" = (/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"Qg" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"Qh" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/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/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"Qi" = (/obj/structure/disposalpipe/segment,/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"Qj" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
+"Qk" = (/obj/structure/cult/pylon,/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station)
+"Ql" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
+"Qm" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"Qn" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
+"Qo" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
+"Qp" = (/obj/structure/cult/talisman,/obj/effect/decal/remains/human,/obj/effect/landmark{name = "Teleport-Scroll"},/obj/item/weapon/paper{info = "Your sacrifice has not gone unnoticed. Today your imprisonment ends - be free, and do not contact us again so idly.";name = "Letter From a Friend"},/turf/unsimulated/floor{dir = 1;icon_state = "chapel"},/area/wizard_station)
+"Qq" = (/obj/structure/cult/pylon,/turf/unsimulated/floor{name = "plating";icon_state = "cult"},/area/wizard_station)
+"Qr" = (/obj/structure/bed/chair,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull";dir = 8},/area/tdome/tdomeobserve)
+"Qs" = (/turf/simulated/floor/bluegrid,/area/tdome)
+"Qt" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (EAST)";icon_state = "fakewindows2";dir = 4},/area/wizard_station)
+"Qu" = (/turf/unsimulated/floor{name = "plating";icon_state = "lava"},/area/wizard_station)
+"Qv" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
+"Qw" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/bluegrid,/area/tdome)
+"Qx" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe";name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome2)
+"Qy" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
+"Qz" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
+"QA" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe";name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome/tdome1)
+"QB" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor,/area/tdome)
+"QC" = (/obj/effect/gibspawner/human,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{name = "plating";icon_state = "lava"},/area/wizard_station)
+"QD" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome)
+"QE" = (/obj/machinery/door/blast/regular{id = "thunderdomegen";name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"QF" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/tdome)
+"QG" = (/obj/machinery/door/blast/regular{id = "thunderdome";name = "Thunderdome Blast Door"},/turf/simulated/floor,/area/tdome)
+"QH" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 10},/area/wizard_station)
+"QI" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows";dir = 6},/area/wizard_station)
+"QJ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"QK" = (/obj/effect/landmark{name = "tdome2"},/obj/machinery/camera/network/thunder{c_tag = "Thunderdome - Red Team";invisibility = 101},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
+"QL" = (/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/tdome)
+"QM" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"QN" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/tdome)
+"QO" = (/obj/machinery/flasher{id = "flash";name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome)
+"QP" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{c_tag = "Green Team";invisibility = 101},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
+"QQ" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena";invisibility = 101},/turf/simulated/floor/bluegrid,/area/tdome)
+"QR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor,/area/tdome)
+"QS" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor,/area/tdome)
+"QT" = (/obj/machinery/door/blast/regular{id = "thunderdomegen";name = "General Supply"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"QU" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration";req_access = list(102)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"QV" = (/obj/machinery/door/blast/regular{id = "thunderdomehea";name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"QW" = (/turf/unsimulated/floor{icon_state = "redcorner";dir = 8},/area/tdome)
+"QX" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration";req_access = list(102)},/turf/simulated/floor,/area/tdome)
+"QY" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"QZ" = (/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Ra" = (/obj/machinery/atmospherics/valve,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rb" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rc" = (/obj/structure/bed/chair{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rd" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Re" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/sleeping_agent{pixel_x = 1},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rf" = (/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rg" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rh" = (/obj/machinery/door/airlock/centcom{name = "General Access";opacity = 1;req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"Ri" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rj" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rk" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rl" = (/obj/machinery/computer/pod{id = "thunderdomegen";name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rm" = (/obj/machinery/computer/pod{id = "thunderdomeaxe";name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rn" = (/obj/machinery/computer/pod{id = "thunderdomehea";name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Ro" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rp" = (/obj/machinery/computer/pod{id = "thunderdome";name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rq" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rr" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rs" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/spawning)
+"Rt" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Ru" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rv" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "redyellowfull";dir = 5},/area/tdome/tdomeadmin)
+"Rw" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/sign/double/map/left{pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+"Rx" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/arrival/centcom)
+
+(1,1,1) = {"
+aaacabaeadagafahaaajaialakanamaoafagaiabaeahaladanajaoakahaiapaqarasatauavawaxazayaBaAaDaCaFaEaHaGaJaIaLaKaxazayaBaAaDaCaFaEaHaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaOaOaOaOaOaOaOaOaOaOaOaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaPaRaRaRaRaRaRaRaRaRaRaP
+aiaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebabgbdaYbbacauavawbhbibjbkaAblbmbnaqarasatauavawbhbibjbkboblbmbnaqarasatauaLaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaObpbqaObpbraObsbtaObpbqaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbxbwbwbwbwbwbwbybzbAbzbAbzbzbAbzbAbzbybBbCbCbCbCbCbCbCbCbCbybDbEbFbFbFbFbFbFbFbFbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbKbLbLbLbLbLbMbN
+anaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaSbgaXbeadarasatauavawbhazbjbkboblbmbnaqarasasatauavbhbibjbkboblbmbnaqaraGaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaObObtaObObPaObObqaObObQaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbwbwbwbRbwbybSbTbSbTbSbTbSbTbSbTbybHbHbHbHbHbHbHbHbHbHbybDbUbVbVbVbVbVbVbVbVbybGbWbGbGbGbGbGbGbWbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbXbDbDbDbDbDbYbN
+aeaYaWbgaXbcbaaTbeaTaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfaVaSaTaUahbhbibjbkboblbmaFaqarasatauavawbhbiawbhbibjbmbnaqarasatauavawbhazaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaOaOaOaOaOaOaOaOaOaOaOaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbRbwbwbwbwbwbwbwbwbybTbSbZcacbcacbccbTbSbybHbHbHbHbHbHbHbHbHbHbybDcdbVbFcebFbVcfcgchbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbHcibXbDbDbDbDbDbYbN
+akaXbfaSaTaZaWbaaUbabdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcaYaVbabdafbmbnaqarasatauaLawbhbibjbkboblbmbnatauavawauavawbhbibjbkboblbmaFaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOcjbQaObpbQaOckbqaObpbtaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbxbwbwbwbwbycacbclbwcmcmcncobSbTbycpcpcpcpcpcpcpcpcpcqbybDcdcrcsctcucvcwcxcybybGbGbGbWbGbGbWbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbXbDbDbDbDbDbYbN
+aoaTbcaVbabbbfaWbdaWbgcAczcCcBcEcDcGcFcHaVaWaUbaaSaZaXaYaWbgabbhbibjbkboblbmaFaqarasatauavawbhbibjbkboblbmbnaqarasatauavawbhazaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaObObqcIbObqaObOcJaObOcKaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbxbwbwbwbxbwbwbwbycncncncncLcLcncMbTbSbybDbDcOcNcNcNcNcPbDcQbybDcdcOcNcNcNcPcwcRcSbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJbXbDbDbDbDbDbYbN
+acbaaZaYaWbebcbfbgbfcBcTcUcUcUcUcUcUcUcFcGaVbdaWaVbbaTaXbfaSajasatauavawbhbiaybkboblbmbnaqarasataqarasatbibjbkboblbmbnaqarasaJaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaOaOaOaOaOaOaOaOaOaOaOaOaOaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbwbwbwbwbwbycncncncncLcLcncMbTbSbybDbDcVcWcWcWcWcXbDcQbybDcdcYcZdacZdbcwcRcSbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJdcbDbDbDbDbDddbN
+adaWbbaXbfaUaZbcaSdfdecUcUcUcUcUcUcUcUcUcDdgbgbfaYbebaaTbcaVagboblbmbnaqarasaJauavawbhbibjbkbobjawasarbiavatauavawbhbibjbkboaDaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbRbwbwbwbxbydhdjdibwcmcmcncobSbTbybDbDcVcWcWcWcWcXbDcQbybDcddkdldadldmcwcRcSbybGbGbGbWbGbGbWbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJdcbDbDbDbDbDddbN
+ahbfbeaTbcbdbbaZaVcAcUcUcUcUcUcUcUcUcUcUcUdnaSbcaXaUaWbaaZaYambnaqarasatauavaKbhbibjbkboblbmbnawaqarasatboawbhbibjbkboblbmbnaEaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbRbwbwbwbwbwbwbwbybTbSdodhdjdhdjdpbTbSbybDbDcVcWcWcWcWcXbDcQbybDdrdqdadadadscwcRcSbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbHdtdcbDbDbDbDbDddbN
+afbcaUbaaZbgbebbaYcTcUcUcUcUcUcUcUcUcUcUcUcHaVaZaTbdbfaWbbaXalbjbkboblbmbnaqaHasatdvdudxdwdzdydAdydBdAdDdCdCdEatauavawbhbibjaBaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububwbwbwbwbwbwbwbwbwbwbybSbTbSbTbSbTbSbTbTbSbybDbDdFdGdGdGdGdHbDcQbybDcddkdldldldmcwdIdJbybGbWbGbGbGbGbGbGbWbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJdcbDbDbDbDbDddbN
+abaZbdaWbbaSaUbeaXcBcUcUcUcUcUcUcUcUcUcUcUdKaYbbbabgbcbfbeaTaaatauavawbhbibjaBbobldLdMdNdOdPdQdRdSdTdUdVdWdXdxdwdLbnaqarasataIaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbububxbwbwbwbRbwbwbwbwbRbybzbAbzbAbzbzbAbzbAbzbydYbDbDbDbDbDbDbDbDdZbybDbEeaebebebeccwbFbFbybGbGbGbGbGbGbGbGbGbGbybGbGbGbGbGbGbGbGbGbGbybHbIbJedeeeeeeeeeeefbN
+ajbbbgbfbeaVbdaUaTdecUcUcUcUcUcUcUcUcUcUcUcGaXbeaWaSaZbcaUbaaibibjbkboblbmbnaEarasegdSdTdUdVehdMdNdOdPdQdRdSdTdUegauavawbhbiayaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPejejejejejejejejejejaPejejejejejejejejejejaPejejejejejejejejejejaPekekekekekekekekekekaPekekekekekekekekekekaPekekekekekekekekekekaPekekekekekekekekekekaP
+agbeaSbcaUaYbgbdbaelcUcUcUcUcUcUcUcUcUcUcUemaTaUbfaVbbaZbdaWanarasatauavawbhazbjbkdAendUdTehdXdVdWdXeneoehdMdNdOdAblbmbnaqaraGaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqeqeqeqeqeqeqbybVbVbVbVbVbVbVbVbVerbybHbIbJeteseteuevesevbyexeweyexezexeweyexezbybHbIbJeBeAeAeAeAeAeCbyeDeDbHbHbHbHbHbHbHbHbN
+amaUaVaZbdaXaSbgeEeFcUcUcUcUcUcUcUcUcUcUcUeHeGbdbcaYbebbbgbfaeavawbhbibjbkboaDbmbneIdSdTdUdVdOeneoehdMdNdOdPdQdReIarasatauavaKaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepeJepepepepeJepbyeqeKeqeqeqeqeKeqeqeqbybVbVeMeLeLeLeNbVbVbVbybHbIbJdcbDdcbDddbDddbyezeOePezexezexeOeOexbybHbIbJdcbDbDbDbDbDddbybHbHbHbHeQeQeQbHbHbHbN
+albdaYbbbgaTaVaSdfcUcUcUcUcUcUcUcUcUcUcUcUcUeRbgaZaXaSaUaVaZaobkboblbmbnaqaraGataududMdNdOdPdTdTdUdVdWdXeneoehdMduawbhbibjbkaAaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqeqeqeqeqeSeqbybVbVbFbFbFbFbFbVbVbVbybHbHcidcbDesesesbDddbyexezexewexexeUeTewexbybHbHcidcbDbDbDbDbDddbybHbHbHeVeWeWeWbHbHbHbN
+aabgaXbeaSbaaYaVeXcUcUcUcUcUcUcUcUcUcUcUcUcUcDaSbbaTbdbdaYbbacblbmbnaqarasataIavawdwdWdXeneodVehdOdPdQdRdSdTdUdVdwbibjbkboblaCaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepeJepepepepeJepepepbyeqeqeYeqeSeqeqeqeqeqbyeZeZeZeZeZeZeZeZeZbHbybHbIbJdcbDbDbDbDbDddbyewexezeOfaewexezeOezbybHbIbJdcbDbDbDbDbDddbybHeQfbetesesbDfceQbHbN
+aiaSaTaUaVaWaXaYcAcUcUcUcUcUcUcUcUcUcUcUcUcUcHaVbebabgbgaXbeadawbhbibjbkboblaCbnaqdCdTdUdVdWdPdSdTdUdVdWdXendwdzdCasatauavawaxaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqfdeqeqeqeqfdeqbydZfefffffffffffgeZbHbybHbIbJfhfififjfififkbyexeyexeweyexeyflewfmbybHbIbJedeeeeeeeeeeefbybHeQfbdcfofnbYfceQbHbN
+anaVbabdaYbfaTaXcTcUcUcUcUcUcUcUcUcUcUcUcUcUdKaYaUaWaSaSaTaUahboblbmbnaqarasaJauavdxdwdzdydBdAdwdCdEegdvdDegdvavawbhbibjbkboaDaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqeqeqeqeqeqeqbydZcVcWcWcWcWcWcXeZbHbybHbIbJbKbLbLbLbLbLbMbyezfmfpfpfqeyfmfpfpfrbybHbIbJftfsfsfsfsfsfubybHeQfbdcfvfwbYfceQbHbN
+aeaYaWbgaXbcbaaTcBcUcUcUcUcUcUcUcUcUcUcUcUcUcGaXbdbfaVaVbabdafasatauavawbhbiaybkboblbmbnaqarasblbmbnaqarasbjbkboblbmbnaqarasaJaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepeJepepepepeJepbyeqeqeqeqeKeqeYeqeqeKbyeZcVcWcWcWcWcWcXeZbHbybHbIbJbXbDbDbDbDbDbYbyfmfrfxfxfyfpfrfxfxfxbybHbIbJbXbDbDbDbDbDbYbybHeQfbbDfzfzfAfceQbHbN
+akaXbfaSaTaZaWbadecUcUcUcUcUcUcUcUcUcUcUcUcUemaTbgbcaYaYaWbgabbjbkboblbmbnaqaHasatauavawbhbibjbkboblbmbnaqarasatauavawbhbibjaBaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyfBeqeqeqeqfBeqeqeqeqbyeZcVcWcWcWcWcWcXeZbHbybHbHdtbXbDfzfzfzbDbYbyfrfxfxfxfxfxfxfxfxfxbybHbHdtbXbDbDbDbDbDbYbybHbHbHfCfCfCfDbHbHbHbN
+aoaTbcaVbabbbfaWelcUcUcUcUcUcUcUcUcUcUcUcUcUeHbaaSaZaXaXbfaSajauavawbhbibjbkaAblbmbnaqarasatauavawbhbibjbkboblbmbnaqarasatauaLaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepeJepepepepeJepepepbyeqfdeqeYeqeqfdeqeYeqbyeZdFdGdGdGdGdGdHeZbHbybHbIbJbXbDbXbDbYbDbYbyfxfxfxfxfxfxfxfxfxfxbybHbIbJbXbDbDbDbDbDbYbybHbHbHeQeQeQbHbHbHbHbN
+acbaaZaYaWbebcbfeFcUcUcUcUcUcUcUcUcUcUcUcUcUfEaWaVbbaTaTbcaVagbnaqarasatauavaKbhbibjbkboblbmbnaqarasatauavawbhbibjbkboblbmbnaEaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbubuepepepepepepepepepepbyeqeqeqeqfBeqeqeqeqfBbyeZeZeZeZeZeZeZeZeZbHbybHbIbJfFfzfFfGfAfzfAbyfxfxfxfxfxfxfxfxfxfxbybHbIbJfHfIfIfIfIfIfJbybHbHbHbHbHbHbHbHfKfKbN
+adaWbbaXbfaUaZbccCcUcUcUcUcUcUcUcUcUcUcUcUcUcFbfaYbebabaaZaYamblbmbnaqarasataIavawbhbibjbkboblbmbnaqarasatauavawbhbibjbkboblaCaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaPfMfMfMfMfMfMfMfMfMfMaP
+ahbfbeaTbcbdbbaZfNcUcUcUcUcUcUcUcUcUcUcUcUcUfObcaXaUaWaUaVaZapavawbhbibjbkboaDbmbnaqarasatauavawbhbibjbkboblbmbnaqarasatauavaKaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+afbcaUbaaZbgbebbczcUcUcUcUcUcUcUcUcUcUcUcUcUdnaZaTbdbfaUaVaZaobibjbkboblbmbnaEarasatauavawbhbibjbkboblbmbnaqarasatauavawbhbiayaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+abaZbdaWbbaSaUbefPcUcUcUcUcUcUcUcUcUcUcUcUcUfQbbbabgbcbdaYbbacatauavawbhbibjaBaAaDaCaFaEaHaGaJaIaLaKaxazayaBaAaDaCaFaEaHaGaJaIaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+ajbbbgbfbeaVbdaUfRcUcUcUcUcUcUcUcUcUcUcUcUcUcEbeaWaSaZbgaXbeadaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+agbeaSbcaUaYbgbdfScUcUcUcUcUcUcUcUcUcUcUcUcUfTaUbfaVbbaSaTaUahaSaaacabaeadagafahaaajaialakanamaoafagaiabaeahaladanajaoaSbcaMfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+amaUaVaZbdaXaSbgeRdKdKcGfVcUcUcUcUcUfVcFfOdKeGbdbcaYbeaVbabdafaVaiaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebaacaVaZaMfUbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+albdaYbbbgaTaVaSbfaXbceRemfVfWfXfYfZcHfQbbaSaWbgaZaXaUaYaWbgabaYanaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWadaYbbaMfUaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aabgaXbeaSbaaYaVbcaTaZbfeHcGeRfEfQeGdKaXbeaVbfaSbbaTbdaXbfaSajaXaeaYaWbgaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfahaXbeaMfUbfaYbebfbfaYbebfaYbebfaYbebfaYbebfbfaYbebfaYbebfaYbebfaYbebfaYbebfbfaYaNfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aiaSaTaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVbebabgaTbcaVagaTakaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcafaTaUaMfUbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgagbgbgbgbgbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+anaVbabdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYaUaWaSbaaZaYambaaoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZabbabdaMfUbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgegdgggfghgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aeaYaWbgaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaXbdbfaVaWbbaXalaWacbaaZaYaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdaWaVbbajaWbgaMfUbgbbbbbabgbbbabgbbbabgbbbabgbbbabgbgbbbbbabgbbbabgbbbabgbbbabgbbbabgaUbbfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigjgjgjgigcgcgcgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+akaXbfaSaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaTbgbcaYbfbeaTaabfadaWbbaXbfaUaZbcaSglgkgngmgpgogrgqgsaVbbaXbcbgbfaYbeagbfaSaMfUaSbebeaWaSbeaWaSbeaWaSbeaWaSbeaWaSaSbebeaWaSbeaWaSbeaWaSbeaWaSbeaWaSbebefUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigtgtgtgigcgvgugcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aoaTbcaVbabbbfaWbdaZbgaUaYaSbeaXbfbbbgbcaVaWaUbaaSaZaXbcaUbaaibcahbfbeaTbcbdbbaZgwgxgygzgAgBgCgDgEgogFbeaTaZaSbcaXaUambcaVaMfUaVaUaUbfaVaUbfaVaUbfaVaUbfaVaUbfaVaVaUaUbfaVaUbfaVaUbfaVaUbfaVaUbfaVaUaUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigGgHgIgigcgcgcgcgcgcgcgcgcgcgcgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+acbaaZaYaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdaWaVbbaTaZbdaWanaZafbcaUbaaZbgbebbgFgBgJgAgEgKgLgMgNgOgPaUbabbaVaZaTbdalaZaYaMfUaYbdbdbcaYbagQgQgQgQgQgQbagQgQgQbababagQgQgQbagQgQgRgSgFgRbcaYbdbcaYbdbdfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigGgHgIgigTgUgVgWgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+adamanabalakaiaaadaeahacajafaoagaiakahanabaaacalafaeaganacalhcbbabaZbdaWbbaSaUbegPgMgNgDhdgygEgAgChehfbdaWbeaYbbbabgaabbaXaMfUaXbgbgaZaXbagQhggQgQhggQbagQhggQgQgQgQgQhggQbagQhghhhhhihhaZaXbgaZaXbgbgfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigGgHgIgihjgUgYgYgXgYgUgYhbhbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+ahbeaTaZaSbcaXaUbcbeaTaZaSbcaXaUbcaXaUbeaTaZaSbcaXaUamaNaNaNaNbeajbbbgbfbeaVbdaUhfgAgCgOgJgBhdgDgzgLgQbgbfaUaXbeaWaSaibeaTaMfUaTaSaSbbaTbagQhghghghggQgQgQhghghghkhlhlhmgQgQgQhkhlhlhmhhbbaTaSbbaTaSaSfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigHgHgHhnhohpgYgYgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+afaUbabbaVaZaTbdaZaUbabbaVaZaTbdaZaTbdaUbabbaVaZaTbdalaNaNaNaNaUagbeaSbcaUaYbgbdgQgDgzhegNgMgJgOgKgEhqaSbcbdaTaUbfaVanaUbaaMfUbaaVaVbebabagQhghghghggQgQhghghghghrhshshthggQgQhrhshshthhbebaaVbebaaVaVfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgigHgHgHhnhohpgYgYgYgYhugYhbhbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaNaNaNaNaNaNaNaNaNaNaNaN
+abbdaWbeaYbbbabgbbbdaWemhwhxgrcFbbbabgbdaWbeaYbbbabgaaaNaNaNaNbdamaUaVaZbdaXaSbghqgOgKgLgCgAgNhegyhdhyaVaZbgbabdbcaYaebdbfaMfUaWaYaYaUaWbagQhghghghggQgQhghghghghzhAhAhBhggQgQhzhAhAhBhhaUaWaYaUaWaYaYfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgihCgHhDgihjgUgYgYgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+ajbgbfaUaXbeaWaSbebgbfeHhFhGhHfObeaWaSbgbfaUaXbeaWaSaiaNaNaNaNbgalbdaYbbbgaTaVaShyhIgygEgzgDgCgLgBgsgSaYbbaSaWbgaZaXakbgbcaMfUbfaXaXbdbfbagQhghghkhlhlhmhghghghghghJhKhghghghghghJhKhghhbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbhLgihMgihNgTgUgYgYgXgYgUgYhbhbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+agaSbcbdaTaUbfaVaUaSbcfEhOhPhQdnaUbfaVaSbcbdaTaUbfaVanaNaNaNaNaSaabgaXbeaSbaaYaVhIgqgKgOgKgOgzgKgOgohRaXbeaVbfaSbbaTaoaSaZaMfUbcaTaTbgbcbagQhghghrhshshthghghghghkhShThkhghghghkhShThkhhbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbhUhLhVhNhUgTgUgYgYgXgYgUgZhahbhbgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+amaVaZbgbabdbcaYbdaVaZcFhWhXhYfQbdbcaYaVaZbgbabdbcaYaeaNaNaNaNaVaiaSaTaUaYhZgmibiagKgBgLgBgLgygBgLgDgogogRibaZaVbebaacaVbbaMfUbaaSaZbaaZbagQhghghzhAhAhBhghghghghrhlichrhghghkhrhlichrhhaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+alaYbbaSaWbgaZaXbgaYbbfOhHidiecEbgaZaXaYbbaSaWbgaZaXakaNaNaNaNaYanaVbabdaXgSgDgMhdgBgLgCgKgOgBgNgOgKgJgDgDgmbbaYaUaWadaYbeaMfUaWaVbbaWbbbagQhkhlhlhmhKhghghghghghghghghghghghrhshshthihhaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEaNaNaNaNaNaNaNaNaNhEaNaNaNaNhEhEhEhEhEhEhEhEhEhEaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aaaXbeaVbcaTaZbfaUaVbcfTdKcDeHcGaWbdaYbaaZaVbfaSbbaTaoaNaNaNaNaXaeaYaWbgaThRgDgAgJgNgOgzgBgLgMgCgDgygNgOgzgrbeaXbdbfahaXaUaMfUbfaYbebfbebagQhrhshshthThkhkhlhlhmhlhlhmhghghghzhAhAhBhihhaYbebfaYbeaNbffUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNhEaNaNaNaNifaNaNhEhEaNaNaNihigijiiaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aibbaUaYaSbeaVbgaTaYaSbeaVbgaTaYbdbaaZaUaVaYbcaVbebaacaNaNaNaNaTakaXbfaSbaikgOgDgNgChegKgDgJgAgzgLgBgChegKilaUaTbgbcafaTbdaMfUbfaYbebfbegQgQhzhAhAhBichrhrhshshthshshthghghghghJhKhghihhgFbebfaYbeaNbffUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNhEaNaNimaNaNaNaNaNaNaNinaNioipaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+anbebdaXaVaUaYaSbaaXaVaUaYaSbaaXbgaWbbbdaYaXaZaYaUaWadaNaNaNaNbaaoaTbcaVaWiqhegOgCgzgLgygOgNgDgKgEgMgzgLgyhZbdbaaSaZabbabgaMfUbfaYbebfbegQhghghJhKhghghghzhAhAhBhAhAhBhghghghkhShThkhihigFbebfaYbeaNbffUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNhEhEhEhEaNaNirisaNaNaNaNaNaNaNiraNinitiuaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aeaUbgaTaYfEiviwilfTaYbdaXaVaWaTaScDiqixibfTbbaXbdbfahaNaNaNaNaWacbaaZaYbfgsgLhegzgKgEgBhegCgOgyhdgAgKgEgBhIbgaWaVbbajbfaSaMfUbcaXaUbcaUgQhghkhShThkhkhlhlhmhKhghJhKhghghghghrhlichrhihigPaUbcaXaUaNbcfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNiyhEhEhEhEaNizaNaNaNaNaNaNaNaNaNisaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+akbdaSbaaXcFiAiBiCeGaXbgaTaYbfbaaVcHiDiEiFeGbeaTbgbcafaNaNaNaNbfadaWbbaXbcgogEgLgKgyhdgMgLgzhegBgJgDgyhdgMgqaSbfaYbeagaNaVaMfUbgbbbbbabggQgQhrhlichrhrhshshthThkhShThkhghghghghghihihihhgQbgbbbabgaUbbfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNiGiHhEhEhEaNisaNifaNiraNaNaNaNaNaNaNaNaNaNaNaNaNaNhEaNaNaNhEhEhEaNhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aobgaVaWaTfOiIiJiKeRaTaSbaaXbcaWaYdKiLiMiNeRaUbaaSaZabaNaNaNaNbcahbfbeaThRgnhdgEgygBgJgAgEgKgLgMgNgOgBgJgAiagwbcaXaUambcaYaMfUaSbebeaWaSbagQgQgQgQgQhzhAhAhBichrhlichrhghghghggQhhhhhhhhaWaSbeaWaSbebefUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNhEhEhEiPiOiPhEhEaNaNaNiGiQaNaNaNiraNifiRiGaNiSiSiShEhEaNaNaNaNaNaNhEaNaNhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+acaSaYbfbdeRiTiUiVfOaYbfbdaWaVbbaWdniWiEiXcDbdaWaVbbajaNaNaNaNaZafbcaUbaikgzgJhdgBgMgNgDhdgygEgAgChegMgNgDhdgFaZaTbdalaZaXaMfUaVaUaUbfaVbababababagQhghJhKhghghghghghghghghghggQaNaNaNaNbfaVaUbfaVaUaUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNiYioifhEaNaNaNaNiZifizisifaNaNaNifiuhEiSiSjahEhEaNaNaNaNaNaNhEaNhEhEhEhEhEhEhEhEhEhEhEaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+adbbaXbcbgcDiBjbiCcGaXbcbgbfaYbebffQjciWjdcHbgbfaYbeagaNaNaNaNbbabaZbdaWjegKgNgJgMgAgCgOgJgBhdgDgzgLgAgCgOgJgPbbbabgaabbaTaMfUaYbdbdbcaYbababababagQhkhShThkhghghghghghghghghggQaNaNaNaNbcaYbdbcaYbdbdfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNiraNaNaNaNaNaNaNaNifjfifaNifaNaNaNiSiSiShEaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEhEhEhvaNaNaNaNaNaNaNaNaNaNaNaN
+ahaTaTaZaScHcEeHcHfTaTaZaSbcaXaUbccEeHfTfTdKaSbcaXaUamaNaNaNaNbeajbbbgbfjggygCgNgAgDgzhegNgMgJgOgKgEgDgzhegNhfbeaWaSaibebaaMfUaXbgbgaZaXbababababagQhrhlichrhghghghghghghghghggQaNaNaNaNaZaXbgaZaXbgbgfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNifaNaNaNiraNaNiSiSiSaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEhEhEhEhEhEhEhvaNaNaNaNaNaNaNaNaNaNaNaN
+afbababbaVaZaTbdaZbababbaVaZaTbdaZaTbdbababbaVaZaTbdalaNaNaNaNaUagbeaSbcgRgBgzgCgDgOgKgLgCgAgNhegyhdgOgKgLgCgQaUbfaVanaUbfaMfUaTaSaSbbaTbababababagQgQgQhghghghghghghghghggQgQgQaNaNaNaNbbaTaSbbaTaSaSfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNisifaNaNaNaNaNhEisiraNaNaNaNaNaNaNjhaNaNaNaNhEhEhEhEhEhEhEhEhEhEhEhEaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+abaWaWbeaYbbbabgbbaWaWbeaYbbbabgbbbabgaWaWbeaYbbbabgaaaNaNaNaNbdamaUaVaZjigMgKgzgOgBhegDhdgLgAgJgKgMhegygEgzhqbdbcaYaebdbcaMfUbaaVaVbebaaVaNaNaNaNaNaNhhhhhihihihihihihihhhhaNaNaNaNaNaNbebaaVbebaaVaVfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhEhEaNaNaNaNaNaNaNaNaNhEhEaNiQaNaNaNaNaNaNjjjjjjiyjkjkjlaNaNaNaNhEhEaNaNhEhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+ajbfbfaUaXbeaWaSbebfbfaUaXbeaWaSbeaWaSbfbfaUaXbeaWaSaiaNaNaNaNbgalbdaYbbjmgAgygKhegMgLgOgJgEgDgNgygAgLgBhdgKhybgaZaXakbgaZaMfUaWaYaYaUaWaYaUaWaYaUaWaYaUhqgFjghqhqgFgFjghqaYaUaWaYaUaWaYaUaWaYaUaWaYaYfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhEhEhEaNaNizjkifjnaNhEhEhEaNjoaNaNaNaNaNisjjjjjjjpjqjrjsaNaNaNhEhEhEaNaNhEhEhEhEhEhEhEhEhEaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+agbcbcbdaTaUbfaVaUbcbcbdaTaUbfaVaUbfaVbcbcbdaTaUbfaVanaNaNaNaNaSaabgaXbefNgDgBgygLgAgEhegNhdgOgCgBgDgEgMgJgyeXaSbbaTaoaSbbaMfUbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNhEhEaNaNifjtaNaNjujujuhEaNaNaNaNaNaNaNirjjjjjjjvjkjkjwaNaNaNaNaNaNaNaNaNhEhEhEhEhEhEhEaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+amakahaiaoabadacamafalaganaafUfUfUfUfUahaiacagaoaaafaeaNaNaNaNaVaiaSaTaUgpgOgMgBgEgDhdgLgCgJhegzgMgOhdgAgNgBgqaVbebaacaVbeaMfUbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNiraNaNjujujuisaNaNaNaNaNaNhEhEjjjjjjaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEhEaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+bfbdaYbbbgaTaVaSbfaXbcaWbeaZbaaUaVaTbcaYbbaSaWbgaZaXaUaNaNaNaNaYanaVbabdibhegAgMhdgOgsgEgzgNgLgKgrhegJgDgCgMiaaYaUbfadaYaUaMfUbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNisaNhEaNjujujuaNaNaNaNaNaNaNaNhEhEhEaNaNaNaNaNaNaNhEhEhEaNaNaNaNaNhEaNhEhEaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+bcaXbeaVbfaSaVbfaSaXbeaVbfaSaXbeaVbfaSaXbeaVbfaSbbaTbdaNaNaNaNaXaeaYaWbggmgLgDgAgJhegohdgKgCgEgyilgLgNgOgzgAglaXbdbfahaXbdaMfUaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjujujuaNaNaNaNaNaNaNaNhEaNaNaNizaNaNaNaNhEhEhEhEaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aZaTaUaYbcaVaYbcaVaTaUaYbcaVaTaUaYbcaVaTaUaYbcaVbebabgaNaNaNaNaTakaXbfaSgrgEgOgDgNgLgngsgpjxglibhZgEgChegKgDgsaTbgbcafaTbgaMfUbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfbfaXaXbdbfaXbdbfaXbdbfaXbdbfaXbdbfaXaXfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhEhEhEhEaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+bbbabdaXaZaYaXaZaYbabdaXaZaYbabdaXaZaYbabdaXaZaYaUaWaSaNaNaNaNbaaoaTbcaVilglhIhZgniajxbdaXaVaUaThIgljxgqgphZgobaaSaZabbaaSaMfUbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcbcaTaTbgbcaTbgbcaTbgbcaTbgbcaTbgbcaTaTfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNiyjyjzaNhEaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+beaWbgaTbbaXaTbbaXaWbgaTbbaXaWbgaTbbaXaWbgaTbbaXbdbfaVaNaNaNaNaWadaWbbaXbfaUaZbcaSbeaVbgaTaYbdbaaZaUaVbbaXbcbgbfaYbeagaWaYaMfUbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbaaSaZbaaZbaaSaZbaaSaZbaaSaZbaaSaZbabafUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNifiQinaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aUbfaSbabeaTbabeaTbfaSbabeaTbfaSbabeaTbfaSbabeaTbgbcaYaNaNaNaNbfahalaeajaaaoanaiahakafadagabacamanaoafaeabajadaaabakambfaXaMfUaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaWaVbbaWbbaWaVbbaWaVbbaWaVbbaWaVbbaNaWfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUfUfUfUfUfUfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNhEaNinifaNhEhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+bdbcaVaWaUbaaWaUbabcaVaWaUbabcaVaWaUbabcaVaWaUbaaSaZaXaNaNaNaNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUfUaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjAjBjCjBjDfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNhEhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjBjEjFjGjBfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNhEaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjHjFjIjFjHfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjJjFjFjFjJfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjJjFjFjFjJfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjKjFjFjFjKfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjBjLjMjNjBfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjBjOjOjOjBfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUjPjQjRjSjTfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfUfUfUfUfUfUfUaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjUhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaN
+aPaPaPaPaPaPaPjWaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNjVjVjVjVjVjVjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNjVjVjVjVjVjVjVjVjVaNjVjVjVjVjVjVjVjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNjXaNifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNjXifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNjXaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVaNaNaNaNaNaNjYifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVaNaNaNaNaNaNjZaNifjVjVgbgbgbgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNgbgbkbkckdgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNkekfkgkhkgkfgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNkikfkgkhkgkfgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNkjkfkgkhkgkfgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbgbkhkhkkgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNgbkhkhkhgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNklkmkmkngbgbkogbgbgbgbgbgbgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNkpkrkqkqkqktksaNaNkukvkxkwkvkvkvkygbkzkAkBkCgbjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNkpkDkEkFkGkHkIkDksaNkukvkJkJkvkvkvkvkKkLkLkLkMgbgbgbgbgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNkDkNkOkOkPkOkOkHkDaNkukQkSkRkTkvkvkvgbkLkLkLkUgbkVkWkXgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNkDkYkOkOkOkOkZlakDaNkukvlblbkvkvkvlcgbldkLlelfgblgkWlhgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDlikOkOljkOkOlkkDaNkukvkvkvkvkvkvllgbgbgbgbgbgblmkWlngbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNlokDlpkDkDkDkDkDlqaNlrkmkmlsgbltltltgblululvlwgblxkWlygbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDlzlAlBlClDkDaNaNaNaNaNaNlEltltltlGlFlFlHlHgblxkWlygbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDlIlJkZkOlKkDaNaNaNaNaNaNlLltltltgblMlFgbgbgblNlOlNgbgbgbgbjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkpkDlPlAkZkOlQkDksaNaNjZjYlRgbltltltgbgbgbgblSlSkWkWkWlTlTlUgbgbjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkpkDkDkDkDlVlAkZkOlWkDkDkDkDkslXlXgblYltltltgblZmakWkWkWkWkWkWkWkWmbgbjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDmcmdmekDkOmfkOmgkDkDmimhmkmjmlmmmlltltltltmnkWkWkWkWkWmokWkWkWkWmpgbjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNmqmrmsmrkDkDkDmtkDkDmumimvmwmjmlmxmlltltltltgbmymzkWkWkWkWkWkWkWkWmAgbjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNkDkDmqmBkDkDmCkOmDkDkDmEmFmEkDmGmGgbmHkmlsgbgbgbgbmImJkWkWkWmKmKmLgbgbjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkDmMkOkOmNkDkOkOkOkDmOmPmQmRkDifaNifaNaNaNaNjVjVgbgbgblNmSlNgbgbgbgbjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkDmTkOkOkOmUkOkOkOmVkOkOkOmWkDjYjYjYjYaNaNaNaNjVjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNkDmYkOkOkOmZkOkOkOnakOkOkOnbkDaNaNaNaNaNaNaNaNaNjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkpkDkDkDkDkDkDkOkOkOkDkDkDkDkDkDksaNaNaNaNaNjXaNifjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNkDncndnenfngkDnhkOnikDnjnknknmnlkDaNaNaNaNaNjXifjVjVjVgbmXkWmXgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNnnndndndndndkDkOkOkOkDnokOkOkOnpnqaNaNaNaNaNjZaNjVjVjVgbgbnrgbgbjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNntnsnundndndnvkOkOkOnwkOkOkOnxnynzaNaNaNaNaNjXififjVjVjVgbgbgbjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNnAndndndndndnBkOkOkOnCkOkOkOkOnDnEaNaNaNaNaNjXaNaNifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDnFndndndnGkDmEnHmEkDnInJnKkOnLkDaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDnMnNnOnQnPkDnRkOnSkDnTkDkDnUkDkDaNaNaNaNaNaNaNjXaNifjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDnVndnWkDkDkDkOnXnYkDkDkDnZkOoakDaNaNaNaNaNaNaNjXififjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDobocodkDaNkDoeoeoekDaNkDkHofogkDaNaNaNaNaNaNaNjXaNifaNjVjVjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNkDoeoeoekDaNloohoiojlqaNkDoeoeoekDaNaNaNaNaNaNaNjXifififififjVjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNloohoiojlqaNaNaNaNaNaNaNloohoiojlqaNaNaNaNaNaNaNjXaNifaNifaNaNjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokolololololololololololololololololololokaNaNaNaNaNaNaNaNaNomomomomomomomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokonononononononononononononononononononokaNaNaNaNaNaNaNaNaNomopoooooooqomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororororororororororororororororororokaNaNaNaNaNaNaNaNaNomosoposoqosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororororotouououououovororororororokaNaNaNaNaNaNaNaNaNomosososososomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororororotowoxoyozoAoBowovorororororokaNaNaNaNaNaNaNaNaNomosoCosoDosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororotowoEoFoGoHoGoFoIowovororororokaNaNaNaNaNaNaNaNaNomoCoJoJoJoDomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororouoGoGoGoLoKoMoGoGoGouororororokaNaNaNaNaNaNaNaNaNomomomoNomomomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororowoOoPoQowoRowoSoToUowororororokaNaNaNomomomomomomomoVoWoYoXoVomomomomomomomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororowoZouowowowowowouoZowororororokaNaNaNomopoooooooqompapboYpcpaomopoooooooqomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororowoGpdowpepfpeowpgoGowororororokaNaNaNomosoposoqosompiphoYpjpiomosoposoqosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNpkaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororouoGpdowplpmpnowpgoGouororororokaNaNaNomososososospooYoYoYoYoYpposososososomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororotowoOpdowpqpmpnowpgoUowovorororokaNaNaNomosoCosoDosompsproYptpsomosoCosoDosomaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowpuoGpdowowpvowowpgoGpuoworororokaNaNaNomoCoJoJoJoDompapboYpcpaomoCoJoJoJoDomaNaNaNpwpwpwpwpwpwpwpwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGoGpxoGoGoGpxoGoGoGpyorororokaNaNaNomomomomomomompapboYpcpaomomomomomomomifififpwpApzpzpzpzpBpwpwpwpwpwpwpwpwpwpwpwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowpCoGouoGoGoGoGoGouoGpDoworororokaNaNaNomompEpFpEpFpGpapboYpcpapHpFpEpFpEomomaNifaNpwpIpApIpIpBpIpwpJpKpKpKpLpKpKpKpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGouoGpOpOpOoGouoGoGouorororokaNaNaNompQpPpspRpspapapboYpcpapapspRpspSpTomomomompwpIpIpIpIpIpIpwpJpVpUpUpUpUpUpWpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGpXouoGpYpZqaoGoupXoGouorororokomomomomqcqbpaoVpapapapboYpcpapapaoVpaqdqeomaNifaNpwpIpIpIpIpIpIpwpJqfqgqgqgqgqgqfqhpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGouoGqiqiqioGouoGoGouorororokaNaNaNompQqjpiqkpipapapboYpcpapapiqkpiqlpTomomomompwpIqmpIpIqnpIpwqoqfqpqgqgqgqqqfpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowqroGouoGqsqtquoGouoGqvoworororokaNaNaNomomqwqxqwqxpHpapboYpcpapGqxqwqxqwomomaNifaNpwqmqyqyqyqyqnpwpKqfqgqgqgqgqzqApwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororouoGoGqBoGoGoGoGoGqBoGoGpyorororokaNaNaNomomomomomomompapboYpcpaomomomomomomomifififpwpwpwpwpwpwpwpwpKqfqgqgqgqgqgqCpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNqDhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvpkhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowouqEowououqFououowqGouoworororokaNaNaNomopoooooooqompapboYpcpaomopoooooooqomaNaNaNaNaNaNifaNaNaNpwpKqfqgqgqgqgqHqfpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowqIqJowqKqLqMqNqOowqPqQoworororokaNaNaNomosoposoqosompiphoYpjpiomosoposoqosomaNaNaNaNaNaNififaNaNpwpKqfqgqgqgqgqgqCpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowqRqSowqTqUqMqMqVowqWqXoworororokaNaNaNomosososososqYoYoYqZoYoYraosososososomaNaNaNaNaNaNaNififaNpwpKqfqgqgqgqgrbrcpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororowrdrdowreqMqMqMrfowrdrdoworororokaNaNaNomosoCosoDosompsproYptpsomosoCosoDosomififififififififififpwpKqfqpqgqgqgqqqfpwpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororrgrhrhowriqMqMrjrkowrhrhrlorororokomomomomoCoJoJoJoDompapboYpcpaomoCoJoJoJoDomaNaNaNaNaNaNaNaNaNifpwrmqfqgqgqgqgqgqfrnpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororororrgowrororoowrlorororororrpokrqrqrqokomomomomomompapboYpcpaomomomomomomomaNaNaNaNaNaNaNaNaNaNpwpKrsrrrtrtrtrrrupMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokorororororororrgrhrhrhrlororororororrwrvrqrqrqokomomomomomompapboYpcpaomomomomomomomaNaNaNaNaNaNaNaNaNaNpwpKpKrxryryryrzpKpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNokororororororororororororororororororrwrvrqrqrqrArCrBrErDrFrApapboYpcparArGrHrIrJrJrAomomomomomomomomomompwpKpKpKpKrKpKpKpKpMpNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrMrMrMrMrMrMokrqrqrqrArNrOrOrOrPrApapboYpcparArJrJrJrJrJrAaNaNaNaNaNaNaNaNaNaNpwpwpwpwpwpwpwpwpwpwpwaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrQrLrSrRrUrTrWrVrLrXrZrYsbsasdscscseserMsfsgsgsgsgokrqrqrqrArNrOrOrOrPrApiphoYpjpirArJrJrJrJrJrAaNaNaNaNaNaNaNaNaNaNaNifaNifaNifaNifaNifaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLshrLrYrYrYrYrYrYrLsirZrYrYrYrYrYrYrYrYrMsjsgsksgsgokrqrqrqrAslsmsnsosprAsqsrsqsrsqrArJrJrJrJrJrAaNaNaNaNaNrArArArArArArArArArArArArArArArArAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssstsvsusxswrYrYrYrYrYrYrYsyrLrLrLrYrYrYrYrYrYrYrYrMszsAsBsgsgokoksCokrArArAsDrArArAoYsEoYsEoYrArArAsFrArArAsGsGsGsGsGrAsHsIsKsJsMsLsOsNsQsPsSsRsUsTsWsVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYsZtasYsYsYtbsZtdtcsvsvterLtfrYrYrYrYrYrYtgrLthrYrYrYtititjtltktkrMtmtntosgsgrMtptqtqtqrAtrtstststspRpRpRpRpRtststststtsGtutvtwtvtxtyrAsIsIsKtztBtAtDtCtFtEtHtGtJtItKsVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLswrLrLrLrYrYrYrYrYrYrYrYrLtMrYrYrYtNrLrLrLrLrLrMrMrMrMrMtOrMtptqtqtPrAtQrOrOtRrOpapapapaparOtRrOrOtStTtututUtutUturAsIsIsKtVtXtWtZtYubuauducufueugsVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuiuhuhuhujujujuhuhujujujuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssuksvsvulrLunumupuouruqrYrYrLusrYrYrYutrLuuuvuvuuuwuyuxuztqtqtqtqtqtquArLtQrOuBuCuCuCuCuCuCuCuCuCuDrOtSsGtutututututurAsIsIuFuErJrJuGuGuGuHuHuHuHuHuHuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuJuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhuKtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYuLtasYsYsYtbuLuMtcsvsvuNrLuOuPuPuPuQrLrYrYrLuRrYrYrYuSrLrYtqtqtquTtqtqtqtqtqtqtqtquUrLrLtQtRuVuWuWuWuWuWuWuWuWuWuXtRtSsGsGuYuZvavbturAsIsIsKvcvdvdvdvdvdvdvdvdvdvdvduIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhuhuhuhuhuhuhuhuhveuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssvfsvsvvguwvivhvkvjvluwrYrYuwrYrYrYrYvmuwrYtqtqsxvntqtqtquxuxrLrLrLrLrLvotQrOuVuWvprOvqvrvsrOvtuWuXrOtSvusGsGsGsGsGsGrAsIsIsKsJsMsLsOsNsQsPsSsRsUsTsWvvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhuhuhuhuhuhuhuhuhuJuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYvwtasYsYsYtbvwvxtcsvsvvyuTvzrYrYrYvAuTrYrYuTrYrYvBvDvCuTvEtqtqtqrLuOuPvFuPuQrLvGvGvGvHvotQrOvIuWvJvKvLvMvNvOvPuWvQrOtSvuvRvSvSvSvSvSvTsIsIsKtztBtAtDtCtFtEtHtGtJtItKvvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhvUveuhuhuhuhuhuhuhuhuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLssvVsvsvvWrLvXrYrYrYvYrLvZvZrLwawarLrLrLrLvEtqtqsxwbwcwcwcwcwcwdwcwcwcwevotQrOrOwfrOrOwgrOwgrOrOwfrOrOtSvuwhvSvSwivSvSwjsIsIsKtVtXtWwktYubuauducufueugvvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhwlwluhuhuhuhuhuhuhuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsYsYsYsYsYsYsYsYsYsYsYsYsYwmtasYsYsYtbwmwownsvsvsxwprYrYrYrYrYwprYrYwqrYrYwrwtwswsrYtqtqwurLuOuPvFuPuQrLwvwvwvwwvotQrOwxuWwyvKwzrOwAvOwBuWuDrOtSwCwDsIsIsIsIsIvTsIsIuFuErJrJuGuGuGuHuHuHuHuHuHuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhwlwEwFwluhuhuhuhuhuhuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLrLsvsvsxwprYrYrYrYrYwprYrYwGrYrYtqwHwHwHtqtqtqwIwJwKwLtqwMwNrLrLrLrLrLvotQrOuVuWwOrOwPrOwPwQwRuWuXrOtSwCrAwSwSwSwSwSrAsIsIsKvcvdvdvdvdvdvdvdvdvdvdvduIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhwlwTwUwluhuhvUuhwVuhuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLsvsvwWrLuOuPuPuPuQrLwXwXrLwYrYtqwZxaxbtqtqtqxdxcwLtqtqtqtqvntqxevBrLrLtQrOuVrArAxfxgrOxhxirArAuXrOtSrArAaNaNaNifaNrAsIsIsKsJsMsLsOsNsQsPsSsRsUsTsWxjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhwlwluhuhuhuhuhuhuhuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLxlxkxnxmxorYrYrYuwxprYtqxaxqxrtqtqtqtqvntqtqtqxsxtuwtqtqtqxurLtQtRuVrArAuWuWuWuWuWrArAuXtRtSrAififififififrAxvxvxwtztBtAtDtCtFtEtHtGtJtItKxjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhveuhuhuhuhuhuhuhuhuhuhuhuhuhuJuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrYrYrYrYrYrYrYrYuTxxrYtqxyxyxytqtqtqtqvntqtqtqxsxtuTtqxzxBxArLtQrOvIxCxCxCxCxCxCxCxCxCvQrOtSrAaNifaNaNifaNrAsIxDxEtVtXtWxFtYubuauducufueugxjaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhvUveuhuhuhuhuhuhuhuhuhuhuhuhveuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrYrYrYrYrYrYrYrYrLxGrYrYxHrYrYrYtqtqxGxctqtqtqxsxtrLrLrLrLrLrLtQrOrOtRrOrOrOrOrOrOrOtRrOrOtSrAaNifaNaNifaNrAxIxJuFxKxLxLxNxMxPxOxOxOxOxOxQuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhuhuhuhuhxRuhxRuhxRuhxSuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLxTxTxVxUxXxWxZxYrLyaybtPrLycydrLtPybyawJyetqtqxsxtrLyfyfyfyfrLygyhyhyhyhyhyhyhyhyhyhyhyhyhyirAififififififrAsHyjylykxLymymymymxLymymymymxLuIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLuhuhuhynuhuhuhuhuhuhuhuhuhuhuhuhuhuhuhtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLrLrLrLrLrLrLrLrLrLrLrLrLyoyorLrLrLrLrLyptqtqxsxtrLrLrLrLrLrLrAwDyqwjrAwCwCwCwCwCrArArArArArAaNifaNaNaNaNrArArArArArArArArArArArArArArArArAaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVtLyryryryryryryryryryryryryryryryryryryrtLjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNysytyuyvyvyvywywyvyvyvyxrLyytqtqxsxtrLrLyzyByAyzyCyDyEyFyGrAwDyHwjrArAaNifaNaNaNaNifaNaNaNaNaNyGaNaNaNyGaNaNaNyGaNaNaNyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyIyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyJyIjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNysyuyvyLyKyMyNyNyOyQyPyRrLrLvnvnrLrLrLrLyzySySyzyCyTyEyFyGyVyUyEyWyXyGaNifaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyszbzayNyNyNyNyNyNzcyPyRytuwtqtqtqtqtqrLyzyAyAyzyCyTyEyFyGzdyEyEyEzeyGaNifaNaNaNaNyGzfzfzfzfzfzgzhzizizizjzkzfzfzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyszmyvznznznzoznzpzqyPyRytzrtqtqtqtqtqrLzsyzyzyzztyTyEyFyGzuzvzuzwzuyGaNifaNaNaNaNyGzxzfzfzfzgzyzzzAzBzCzDzEzkzfzfzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNysytzmyvyvyvyvyvyvyvyvzGytzrtqtqtqtqtqvHyzzHyzzHyCyTyEzJzIzdyEzKyEzLyGaNifififififyGzfzfzfzgzyzMzNzOzNzOzNzPzEzkzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLytytytytytytytytytytytytzrtqtqtqtqtqwbyzzHyzzHyCyTyEzJzIzQyEzRzSzTyGaNifaNaNifaNyGzfzfzfzUzOzOzOzVzWzXzOzOzOzUzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLytzYytytzYytytzYytytzYytuTtqtqtqtqtqrLyzzHyzzHyCzZAaAbyGzuAcAeAdzuyGaNifaNaNifaNyGzfzfzfAgAfAhAiAjAkAjAlAmAnAgzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNrLrLAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoyGyGApyEyEAqAryGyGyGififififyGzfzfzfAgAszUAtAvAuAvAtzUAsAgzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvAwAwAwAwAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAoAAAzABABABAzABABABAzABABABAzABACAEADAFAFAFAFAFAoAGzuAHyEyEAIzezuAGyGaNaNifaNyGzfzfzfAgzOAmAJAKALAMAJAhzOAgzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvjVjVjVjVjVaPaPaPaPaPaPjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAoAOANANANANANANANANANANANANANABABABAPAFAFAFAFAFAoAGzuAHyEyEyEzezuAGyGyGyGyGyGyGzfzfzfzUzOAmAQARASATAQAhzOzUzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvaPaPaPaPaPaPjVjVjVjVaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABABAVAUAWAVAUAXAZAYAXAZBbBaAAABABADAFAFAFAFAFAoAGzuAHyEBcyEBdzuAGAGAGAGAGAGyGzxzfzgzyAfAmBeARBfATBeAhAnzEzkzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvaPjVjVjVjVjVjVBhBgjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABAVBjBiBlBkBmBnBmBoBmBnBqBpAAABABAoAoAoAoBrBsAoAGzuAHyEyEyEBtzuzuzuzuzuzuzuzuzuzuAgBuzOAmzEzUBvzUzyAhzOBuAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvaPjVjVjVjVjVjVBwBhBxjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABByBoBzBoBABoBoBoBoBoBoBqBpAAABBBAoBDBCBFBEBEyGzuzuBGyEyEyEyEBHyEyEBIyEyEBJBLBKBLBMzOzOzOBNBOzOzOBNzOzOAmzUzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvaPjVjVjVjVjVjVjVBhBhaNaNaNaNjVjVjVjVjVjVjVjVjVaNaNjVjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABBPBRBQBTBSBUBVBUBUBUBVBqBpAAABABAoBXBWBYBEBEBZyEBHyEyEyEyEyEBHyEyEyEyEyEBJzuzuzuAgCazOAmAQAhzOAmAQAhzOCbAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVjVjVjVaPAxaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAyABCcBPAUCdBPAUAXCeCeCeAZCgCfAAABABAoCiChCjBEBEBZyEBHyEyEyEyECkzuzuzuyEyEClCmyGzfzfAQAhzOAmCnAhzOAmCnAhzOAmAQzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyYjVaP
+aNhvaPjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoAoCpCoCoBEBEyGzuzuCqyECryEBdzuAGCsyEBJCtCuyGzxzfCnAhzOAmCnAhzWAmCnAhzOAmCnzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYyYjVaP
+aNhvaPjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGBEBEBEBECvBEBEBEBEBEBEBEBEBEBECwBEyGAGzuCxyEyEyEBtzuzuzuyEyECzCyyGzfzfBeAhzOAmCnAhzOAmCnAhzOAmBezfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVaP
+aNhvaPjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACDCCCECACDCCCECACDCCCFyGCHCGCJCIBECHCLCKCIBEBEBEBEBEBEBEBEyGAGzuCMyEyEyEyEBHyEyEyEyEyEBJzuzuzuCNCOzOAmBeAhzOAmBeAhzOCPAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP
+aNhvaPjVaNaNaNaNaNaNaNCRCQCQCSCQCQCQCTCUCUCUCUCUaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGCHCWCXCIBECHCZCYCIBEBEDaDaDaDaDaDayGAGzuDcDbyEyEyEBHyEyEyEyEyEBJBLBKBLDdzOzODezOzOzOzOzODezOAmzUzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVBhaNaNaNaNaNDfDhDgDjDiDiDkDmDlCUDnDpDoCUaNaNaNaNaNaNaNjVjVjVjVjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGBEBEBEBEDqBEBEBEBEBEDrDsDsDsDsDsDsyGyGyGyGDtDuDuyGyGyGyGyEyEyEyGzuzuzuDvzUDwDvzhzjDxzhzjDvDwzUDvzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVBhBhaNaNaNaNDyDzDiDiDADiDiDiDiCUDBDDDCCUaNaNaNaNCUCUCUCUCUCUDEjVjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGCHDFDGCIBECHDIDHCIBEDrDJDKDKDKDKDKyGDLDLDLDMDNDNDPDODOyGzQDQDRyGyGzxzfAgDSDTAgDUDVDWDYDXAgDZEaAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVBhBhaNaNaNDyEbDiEcDAEdDADAEeCUCUEfCUCUaNaNaNaNCUEgEhEhEiEgDEDEjVjVjVjVaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGCBCACVCCCECACVCCCECACVCCCFyGCHEjEkCIBECHEmElCIBEDrDKDKDKDKDKDKyGEnEoEoEpDNDNDNDODOyGzuEqzuyGyGzfzfAgErEsAgEtEuDWDWEvAgEwExAgzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVjVaNEyEzDiDiEbEbEbEbEbDiEADjEBCUCUCUCUCUCUEiECEiEiEiEiDEjVjVjVaPaPhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGEEEDEGEFEIEHEGEJELEKEGEMENyGBEBEBEBEBEBEBEBEBEBEDrDKDKEOEPEQERyGESDNDNDNEUETDNDNEVyGEXEWEYEZyGzfzfCNFaFaAgFbDWFcFdFeAgFaFaCNzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVDEDEDEjVCUEbDiDiDiDiDiDiDiDiDiDiDjCUEiEiEiEiCUEiECEgEiEiEgDEjVjVjVaPaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGFgFfFiFhDNFfFiFhDNFfFiFhFjyGyGyGyGFkFlFkyGzuzuFmzuzuyGyGyGyGyGyGFnDNDNEUFpFoETFqFryGFsFtFuEZyGzfzfFvFwFwCNFxDWDWDWFyCNFwFwFzzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVDEDEFADEDECUDjDiDiFBDiFCFEFDFCDiDiDiFFEiEiEiEiCUEgEiECECEiFGCUaPaPaPaPaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGESDNDNDNDNDNFHDNDNDNDNDNFIFkFKFJFJFJFJFLyGyVFMFMFMyXyGaNyGyGyGyGyGyGyGFNFLFOFPFqFryGFsFtFuEZyGzxzfzfzfzfFvFQFRFRFRFSFzzfzfzfzfzFzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVDEDEFTFVFUFWCUCUDjDiDiDiFCFYFXFCDiDiFZCUEiEiEiEiGaECECECEiEiEgCUjVjVjVjVaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGESDNDNDNDNDNDNDNDNDNDNDNFIFkESDNFHDNDNFIyGzdyEyEyEzeyGaNyGGbGdGcGfGeyGDNGgFPDNDNEUzuFsFtFuEZyGzfzfzfzfzfGhFvFwFwFwFzGhzfzfzfzfzfzlaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVDEGiFVFVFVFVFVGjDiDjDjDjFCGlGkFCDiGnGmCUEiEiEiEiCUEgECEiECGoEiCUjVjVjVjVaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGFoGpGpGpGpGpGpGpGpGpGpGpFpFkFoGpGpGpGpFpyGzdyEyEyEzeyGyGyGGqDNDNDNDNGrDNDNDNDNDNFIzuFsFtFuEZyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVDEGsFVFVFVGtFVGjDiCUCUCUCUCUCUCUCUCUCUCUCUCUFFCUCUCUCUGaCUCUCUCUCUjVjVaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGGvGuGwGvGyGxzuGzGBGAGDGCGAyGyGyGyGyGyGyGyGAHyEyEyEGEyGaNyGGFGGGHGJGIyGDNDNDNDNDNGKzuFsFtFuEZGMGLGLGLGNEZGOGPGPGPGPGPGPGPGPGPGPGPGPGPGPGQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVDEGRFVGSFVFVGTDECUCUjVjVCUEiEiEiEiEiEiCUGUGUGUGUGVCUEiEiEiEiEiEiCUjVaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGGWDNGXGWDNGYzuGZDNHaHbDNHayGaNyGHcyGHeHdyGAHyEyEyEHfyGaNyGHgHiHhHkHjyGHlHnHmHpHoHqyGFsFtFuEZHsHrHuHtHvEZGPHwHyHxHxHxHzHAHBHxHxHxHCGPGPGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVDEDEHEFVFVFVHFDEjVjVjVjVCUEiEiEiEiEiEiCUGUGUGUGUGUCUEiEiEiEiEiEiCUjVaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGGWDNGXGWDNGYzuGZDNHaHbDNHayGaNyGCVCVCVCVHGzdyEBcyEBdyGaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGFsFtHHHIHKHJHMHLHvEZGPHNHPRwRxHRHSHTHSHUHQHVHWHxHXGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVDEDEHEFVFVHFDEjVaNaNjVCUEiEiEiEiEiEiFFGUGUHYGUGUFFEiEiEiEiEiEiCUjVaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIaHZIbIaHZIczuIdIfIeIgIfIeyGaNyGIhyGCVCVyGIiyEyEyEBdyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNEZFsFtFuEZHsIjIlIkHvEZGPImInHQIoIpHQIoIpHQIoHQIqHQIrGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVDEDEIsItDEDEjVjXaNifCUEiEiCUIuIvIwCUGUGUIxGUGUCUIuIvIwCUEiEiCUifaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGyGyGyGaNyGIyyGIAIzyGIBDbyEICIDyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNEZFsFtFuEZIFIEIEIEIGEZGOImInHQIoIpHQIoIpIHIoHQHQHQIIGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVDEDEDEDEjVifjXaNifCUEiEiCUifififCUCUIuIvIwCUCUifififCUEiEiCUifaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGzdyEzeyGyGyGyGyGyGyGyGyGyGyGyGaNaNaNaNEZFsFtIJEZEZEZEZEZEZEZGPImInHQIoIpHQIoIpHQIoHQIqIKILGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVjVjVjVjVifaNaNifIMININIOifaNifififififififififaNifIMININIOifaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIPIPIQIQIQIQIQIQIQIRyGyUyEyWyGIQISIUITIVIVIVIVIVIWyGaNaNaNaNEZFsFtFuEZIYIXIXIXIZEZGPJaJbHOHQJcHQHQHQJdHQHVJeHxJfGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVjVjVjVjVaNaNaNaNIMJgJhIOaNaNaNaNaNaNaNaNaNaNaNaNaNIMJgJhIOaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQIQISISISIQIQIQJiJjyEJkJiIQISIUyTyEyEyEyEyEzJyGaNaNaNaNEZFsFtFuEZJmJlJoJnJpEZGPJqJsJrJtHxHzHAHBHxJtJrJuGPGPGPHDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVjVjVjVaNaNaNaNaNIMJgJhIOaNaNaNaNaNaNaNaNaNaNaNaNaNIMJgJhIOaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQJvJwJwJwIQIQJxzuDbyEICzuJyIQJzyTyEyEyEyEyEzJyGaNaNaNaNEZFsFtJAJBJDJCJFJEJpEZGPGPGPJGJHJGGPGPGPJGJHJGGPGPGPGQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVjVjVjVaNaNaNaNaNJIININJJaNaNaNJIaNaNaNaNaNJJaNaNaNJIININJJaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKJMJLJLyEJNISIQzuzdyEzezuIQISIUyTyEyEyEyEyEzJyGaNaNaNaNEZJOJPJQEZJmJRJTJSJpEZGOGPGPJGGPJGGPJUGPJGGPJGGPGPGPGPEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVJXJWJVaNaNaNJVJYJZJZJZKaJVaNaNaNJVKbKcJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKyTKdKdzeJNISIQzuzdyEzezuIQISIUKeKfKfKfKfKfKgyGaNaNaNaNEZEZKhEZEZKjKiKiKiKkEZJGJGJGJGJHJGJGJGJGJGJHJGJGJGJGEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVKmKlJVaNaNJIJVJVKnKoKpKqJVJJaNaNJVKrKsJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKyTKdKdzeJNISIQzuzdyEzezuIQISIUKtKuKuKuKuKuKvyGaNaNaNaNEZKxKwKyEZEZEZEZEZEZEZKzKAKwKwKwKwKwKwKwKwKwKwKwKBKzEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVKCKDJVaNaNJVJVKEKFKGKFKHJVJVaNaNJVKIKJJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQISJKyEDQDQDRJNISIQzuzdyEzezuIQISIUzdyEyEyEyEyEzeyGEZJGJGJGEZKKFtKMKLKNKAKwKBKNKOKwKSFtFtFtFtFtFtFtFtFtFtFtKMKwKyEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaUbabeaSbcbdaXaSbgaWbfaVaZbgbabdbcaYbebfaVaZbgbaaUbfaVbbaUaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVKUJVJVJVJVJVKPKQKQKQKQKQKRJVJVJVJVJVKVJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQKTKTKTKWIQIQIQzuyUyEyWzuIQIQKXzdyEyEyEyEyEzeyGKYKZKwKBJGKKFtFtNjKNFtLbFtKNNjFtFtFtFtFtFtFtFtFtFtFtFtFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdaWaUaVaZbgaTaVaSbfaXbcaWbeaZbaaUaVaTbcaYbbaSaWbdbcaYbebdaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNJVLjLaLkLcLdJVLeKQKQKQKQKQKRJVLfLgLhLiLlJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQISISISIQIQIQIQJiJjyEJkJiIQISIUzdyEyEyEyEyEzeyGLmLnFtHHKNKKFtFtNjKNLoLuLpKNNjFtFtFtLvLvLqLvLvLvLqLvLvFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbgbfbdaYbbaSbaaYaVbcaTaZbfaUbbaWbdaYbaaZaXbeaVbfbgaZaXaUbgaNaNaNaNaNaN
+aNhvaPjVjVaNaNaNaNaNaNaNaNaNaNaNJVLrLsLsLsLtJVLALwLBLxLALwLBJVLyLsLsLzLrJVaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGIQIQIQIQIQIQIQIQLDLDyGDbyEICyGIRISIULELCLCLCLCLCLHyGLIKZFtHHKNKKFtKzLFJGJGJGJGJGLGFtFtLKLJLLEZLNLMLOEZLQLPLSFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaSbcbgabaeadagafahaaajaialakanamaoafagaiabaeahaladanaTbdaSaNaNaNaNaNaN
+aNhvaPjVjVaNaNaNaNaNaNaNaNaNaNaNLTLrLsLsLsLsLxKQKQKQKQKQKQKQLxLsLsLRLsLrLTaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGzdBczeyGyGyGyGyGyGyGyGyGyGyGyGLULVFtHHKNKKFtFtNjKNKAKwKBKNNjFtFtFtLWLWMfLWLWLWMfLWLWFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaVaZaSajaUaVaWaXaYaZbabbbcbdbebfbgaXaWbbaTaUaYbcaVaebabgaVaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNMgLXLsLYLsLsJVLZMaKQKQKQMbMcJVLsMdLsMeLrMgaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMhMjMiMlMkzuIQIQIQIQyGyUyEyWyGIRISIUJMJLJMMnMmJLMmyGMsKZLuLpJGKKFtFtNjKNFtLbFtKNNjFtFtFtFtFtFtFtFtFtFtFtFtFtFtFtHHEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaYbbaVagbdaYbfaTaXbbaWbeaZbgaUbcaSaTbfbebabdaXaZaYakaWaSaYaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNMwLXLsLsJVMoJVJVJVMpMqMrJVJVJVMoJVMxMtMuMwaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMkMkMkMkMvIQIQIQIQJiJjyEJkJiIQISIUyTyEyTyEzJyEzJyGEZJGJGJGEZKKFtMHMyKNLoLuLpKNMILuMNFtFtFtFtFtFtFtFtFtFtFtMHLuMOEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaXbeaYambgaXbcbaaTbebfdecTcCelcAfNfSbcaUaWbgaTbbaXaobfaVaXaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNJIJVMzMAMBJVMCMDMCLTMEMFMGLTMQMPMJJVMKMLMMJVJJaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMkMRMkKdzuIQIQIQJxzuDbyEICzuJyIQJzyTyEJLJLJLyEzJyGaNaNaNaNEZMSLuMVEZEZMWMYMXEZEZKzLoLuLuMZLuLuLuLuLuLuLuLuLpKzEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaTaUaXalaSaTaZaWbaaUbcelNcNbNbNbNdeEaZbdbfaSbabeaTacbcaYaTaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNjVjVaNaNaNMTJVMUMUJVJVMCMCMCMgMEMqMGMgMJMJNeJVJVMUMUJVNfaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGzuNhNgNiNayGIQIQIQIQzuzdyEzezuIQISIUyTyEyEyEyEyEzJyGaNaNaNaNEZEZNkEZEZKAKSFtNmNnEZEZEZEZEZEZNoEZEZEZEZEZNuEZEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbabdaTaaaVbabbbfaWbdaZeFNlNvNxNwNldfbbbgbcaVaWaUbaadaZaXbaaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNjVjVaNaNaNaNMTNpNpNfJVNqNrMCMwNsKQNsMwMJMJNtJVMTNpNpNfaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuzdyEzezuIQISIUNyNzNzNANzNzNByGaNaNaNaNEZNDNCNFEZKKFtNNRsNGEZaNaNEZNHNLNKNONMEZEZNPNKNRNQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaWbgbaaiaYaWbebcbfbgbbcCNENSNVNUNEeXbeaSaZaYbfbdaWahbbaTaWaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNjVjVaNaNaNaNaNaNaNaNJVMCMCMCJVJVLxJVJVNIMJNJJVaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuzdyEzezuIQISIUNWFMFMFMFMFMNXyGaNaNaNaNEZOaNYOcObKKFtFtFtOdEZaNaNEZNHNLNKNONMEZEZNPNKNKNQEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbfaSaWanaXbfaUaZbcaScBfNNEOeOgOfNEcAdeaVbbaXbcbgbfafbebabfaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNJVMCMCOhJVKQKQKQJVMJMJNTJVaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuzdyEzezuIQISIUzdyEyEyEyEyEzeyGaNaNaNaNEZOiOiOiEZOkOjLuLuLpEZaNaNEZNHNLNKNONMEZEZEZNKEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbcaVbfaeaTbcbdbbaZaVdeNENENEOlNENENEelaYbeaTaZaSbcabaUaWbcaNaNaNaNaNaN
+aNhvaPjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNJVJVNZMCJVKEKQKHJVOoOnJVJVaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQzuyUyEyWzuIQIQKXzdyEDQDQDQyEzeyGaNaNaNaNEZOpOpOpEZEZEZOqEZEZEZaNaNEZEZEZEZEZEZEZEZOrNKOuOsEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZaYbcakbaaZbgbebbaYfPOvOxOwOwOwOyOvdfaXaUbabbaVaZajbdbfaZaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNMTJVJVJVJVOmOmOmJVJVJVJVNfaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkMRMkKdMkzuISISIQIQJiJjyEJkJiIQISIUzdyEzdyEzeyEzeyGaNaNaNaNEZEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEZEZEZEZEZEZaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbbaXaZaoaWbbaSaUbeaXfROzOAOwOwOwOBOzeXaTbdaWbeaYbbagbgbcbbaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNjVjVaNaNaNaNaNaNaNaNMTJVMUMUMUMUMUJVNfaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGMkOEMkOFMkzuIQIQIQIRyGDbyEICyGIQISIUzQDQzQOtDRDQDRyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbeaTbbacbfbeaVbdaUaTfSOzOGOwOwOwOJOzcAbabgbfaUaXbeamaSaZbeaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNMTNpNpNpNpNpNfaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGyGyGyGyGyGyGyGyGyGyGyGzdyEzeyGyGyGyGyGyGyGyGyGyGyGyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaUbabeadbcaUaYbgbdbaeEOzOKOwOwOwOLOzcTaWaSbcbdaTaUalaVbbaUaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNyGOPDQDRyGaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdaWaUahaZbdaXaSbgaWdfOzOROQOwOwOSOzcBbfaVaZbgbabdaaaYbebdaNaNaNaNaNaN
+aNhvaPjVjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCODOTODOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbgbfbdafbbbgaTaVaSdfeXNlOUOwOwOwOVNldeeXaYbbaSaWbgaiaXaUbgaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNaNaNaNjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOHOIODOXOWOYODOIOHOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaSbcbgabbeaSbaaYaVeXNENENENEOlNENENENEcAaXbeaVbfaSanaTbdaSaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOIOMONOXOWOYONOOOIOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaVaZaSajaUaYbfaTaXcTNEOZPbOwOwOwPdPcNEelbdbdaXaZaVaebabgaVaNaNaNaNaNaN
+aNhvaPjVjVjVaNaNaNaNaNaNaNjVjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCODOIODOXOWOYODOIODOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaYbbaVagbdaXbcaWaTcBOvOwOwOwOwOwOwOwOvdeaWaWaTbbaYakaWaSaYaNaNaNaNaNaN
+aNhvaPjVaNaNaNaNaNaNaNaNaNaNjVjVjVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOIOIOXOWOYOIOIPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaXbeaYambgaTaZaWbadeOzOwOwPgPiPhOwOwOzelbfaSbabeaXaobfaVaXaNaNaNaNaNaN
+aNhvaPaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCOCOCOCOCOCOCOCOCOCPjPkPkOXOWOYPaPaPoOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaTaUaXalaSbabbbfaWelOzOwOwPpPrPqOwOwOzeFbcaVaWaUaTacbcaYaTaNaNaNaNaNaN
+aNhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvhvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOWOWOWOWOWOWOWOWOWOWOCOCPsOCOCOWOCOCPsOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbabdaTaaaVaWbebcbfeFOzOwOwPpPtPqOwOwOzcCaZaYbfbdbaadaZaXbaaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCOCOCOCPuOCOCOCOWOWOWOWOWOWOCOWOCOWOWOWOWOWOWOWOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaWbgbaaiaYbfaUaZbccCOzOwOwPvPxPwOwOwOzfNbbaXbcbgaWahbbaTbfaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPlPmPmPmPmPnOCOCOCOCOCOCOCOCPyOCOCOCOCOCOCOCOCOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbfaSaWanaXbcbdbbaZfNNlOwOwOwOwOwOwOwNlczbeaTaZaSbfafbebaaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPlPmPmPmPmPnOCPCPBPDPBPGPFPFPFPFPFPGPFPGPFPIOCOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbcaVbfaeaTaZbgbebbczNEOwPMPLPOPNPMOwNEfPaUbabbaVbcabaUaWbcaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPzPmPmPmPmPAOCPFPQPQPQPQPQPFPFPFPQPQPQPQPRPTOCOWOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaZaYbcakbabbaSaUbefPNENEPEPVPEQaPHNENEfRbdaWbeaYaZajbdbfaZaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOWOCPzQbPJPJPmPmPKPFPFQgQfQgPFPFPFPFPFQgQfQgQiPFOCOWOWOWOWOWOWOWOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbbaXaZaoaWbeaVbdaUfRfSNEQkPPQpPPQqNEcAfSbgbfaUaXbbagbgbcbbaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOWOCOCPSPSPSPSPSOCPFPQPQPQPQPQPFPFPFPQPQPQPQQrPFOCPUPUPUPUPUOCOWOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbeaTbbacbfaUaYbgbdbaeENENcQtQtQtNdNEcTaWaSbcbdaTbeamaSaZbeaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOWOCOCPWPWPWPWPWOCPXPXPXPXPXPXPXPXPXPXPXPXPXPYPXOCPZPZPZPZPZOCOWOWPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaUbabeadbcbdaXaSbgaWdffNOzQuQuQuOzczcBbfaVaZbgbaaUalaVbbaUaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCOCOCQxQxQxQxQxOCQcQdQdQdQdQdQdQdQdQdQdQdQdQeQcOCQAQAQAQAQAOCOCOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbdaWaUahaZbgaTaVaSbfaXeXOzQuQCQuOzfNaTbcaYbbaSaWbdaaaYbebdaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQjQjQjQjQjQGQdQdQdQdQdQdQdQdQdQdQdQdQdQeQdQGQlQlQlQlQlQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbgbfbdafbbaSbaaYaVbcaTcAOzQuQuQuOzczbaaZaXbeaVbfbgaiaXaUbgaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQjQnQjQnQjQGQdQdQdQdQdQdQdQdQdQdQdQdQdQeQdQGQlQoQlQoQlQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaSbcbgabbeaVaWaXaYaZbacTQHNbNbNbQIfPaWbbaTaUaYbcaSanaTbdaSaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQjQjQKQjQjQGQdQdQdQdQdQdQsQOQsQdQdQdQdQeQdQGQlQlQPQlQlQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaVaZaSajaUaYbfaTaXbbaWcBcAeFdeeXcCfRbfbebabdaXaZaVaebabgaVaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQvQvQvQvQvQGQdQdQdQdQdQdQwQQQwQdQdQdQdQeQdQGQyQyQyQyQyQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaYbbaVagbdaXbcbaaTbebfaUbbaSbdaZaVbabcaUaWbgaTbbaYakbfaSaYaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQhQEQvQzQvQzQvQGQdQdQdQdQdQdQRQBQSQdQdQdQdQeQdQGQyQDQyQDQyQEQmOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaXbeaYambgaTaZaWbaaUbcbdbeaVbgbbaYaWaZbdbfaSbabeaXaobfaVaXaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCOIQTQvQvQvQvQvQGQdQdQdQdQdQdQdQFQdQdQdQdQdQeQdQGQyQyQyQyQyQTOIOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaTaUaXaladaganalamaoaiacakafadaeabalanacaaahamakajacbcaYaTaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPeOCQUOCQVQVQVQVQVOCQcQdQdQdQdQdQdQFQdQdQdQdQdQeQcOCQVQVQVQVQVOCQUOCPfOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbabdaTbcaVaWbebcbfbgbbaSbdaXaVaUaTbcbeaSaZaYbfbdbaaSaZaXbaaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCPjQWOIOCQJQJQJQJQJOCPXPXPXPXPXPXQXQLQXPXPXPXPXPYPXOCQMQMQMQMQMOCOIQNPoOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaWaSaWbbaXbfaUaZbcaSbeaVbgaTaYbdbaaZaUaVbbaXbcbgbfaYbebaaWaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOIOCOCOCOCOCOCOCQZQYQYQYQYQYRbRaQZQYQYQYQYRcQZOCOCOCOCOCOCOCOIOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbfaVbfbeaTbcbdbbaZaVaUaYaSbaaXbgaWbbbdaYbeaXaTaSbcaXaUaWbfaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOIOIOWOWOWOWOWOCQZQZRdQZRdQZQZReRfQZRdQZRdRgQZOCOWOWOWOWOWOIOIOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCOCOCOCOWRhQZQZQZRiRiRiQZQZQZRiRiRiRiRiQZRhOWOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCRjRjRjRkRmRlRnQZRpRoRrRqRuRtRvOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCOCaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
+"}
diff --git a/maps/Aurora-MapDev/aurora-1.dmm b/maps/Aurora-MapDev/aurora-1.dmm
new file mode 100644
index 00000000000..3341ca6eea6
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-1.dmm
@@ -0,0 +1,261 @@
+"a" = (/turf/space,/area/space)
+"b" = (/turf/space,/area/syndicate_station/under)
+"c" = (/turf/space,/area/skipjack_station/under)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaaacaaaaacaaacaacaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaaacccccccaaaccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaacccccccccaaccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaacccccccccaaccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccccaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbabbbbbabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbabbbbbabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbaaaaaaabbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-2.dmm b/maps/Aurora-MapDev/aurora-2.dmm
new file mode 100644
index 00000000000..9c2ed641e33
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-2.dmm
@@ -0,0 +1,2307 @@
+"aa" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored)
+"ab" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ac" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"ad" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ae" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/power)
+"af" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ag" = (/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ah" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 5"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ai" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aj" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ak" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"al" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"am" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 6"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"an" = (/obj/machinery/door/airlock/hatch{name = "Engine Access";req_access = list(11)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ao" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Engine Fore Airlock";dir = 8;icon_state = "camera"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ap" = (/obj/machinery/power/smes/buildable,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aq" = (/obj/machinery/light{dir = 1},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ar" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/meeting)
+"as" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/outpost/engineering/meeting)
+"at" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"au" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"av" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aw" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ax" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ay" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"az" = (/obj/machinery/computer/security/engineering,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aA" = (/obj/machinery/computer/power_monitor,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aB" = (/obj/machinery/computer/station_alert,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Breakroom"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aC" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aD" = (/obj/machinery/vending/coffee,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aE" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aF" = (/turf/simulated/wall,/area/outpost/engineering/meeting)
+"aG" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/gloves/yellow,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aH" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Storage"},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aJ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aL" = (/obj/machinery/power/emitter,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aN" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aO" = (/obj/machinery/door/airlock/hatch{name = "Engine Access";req_access = list(11)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aP" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aQ" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"aR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aS" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aT" = (/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aV" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/meeting)
+"aW" = (/obj/structure/table/steel,/obj/item/weapon/storage/briefcase/inflatable,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aX" = (/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"aZ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"ba" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bb" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"be" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bk" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bo" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"br" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bt" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/meeting)
+"bu" = (/obj/structure/table/steel,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plastic{amount = 10},/obj/item/stack/material/wood{amount = 30},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bw" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/item/stack/cable_coil,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bx" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"by" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bz" = (/obj/structure/cable,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bB" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bC" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bD" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bF" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bG" = (/obj/structure/table/standard,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bH" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bJ" = (/obj/structure/table/steel,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bL" = (/obj/structure/table/rack,/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bM" = (/obj/machinery/shower{icon_state = "shower";dir = 4;pixel_x = 0;pixel_y = 0},/obj/structure/curtain/open/shower/engineering,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"bN" = (/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"bO" = (/obj/machinery/door/airlock/engineering{name = "Restrooms";req_access = list(10)},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"bP" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"bQ" = (/obj/effect/landmark{name = "carpspawn"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bS" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bT" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bV" = (/obj/machinery/power/terminal,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"bW" = (/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"bX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/table/standard,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bY" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"bZ" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"ca" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/meeting)
+"cb" = (/obj/structure/table/steel,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cc" = (/obj/machinery/pipedispenser,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cd" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack{pixel_x = -4;pixel_y = 3},/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/stack/medical/ointment{pixel_y = 10},/obj/item/stack/medical/bruise_pack{pixel_x = -4;pixel_y = 3},/obj/machinery/camera/network/engineering_outpost{icon_state = "camera";dir = 5},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Restrooms";dir = 4;icon_state = "camera"},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"ce" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"cf" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cg" = (/obj/machinery/field_generator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ch" = (/obj/machinery/field_generator,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ci" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ck" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cn" = (/obj/machinery/power/smes/buildable/outpost_substation,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Collector Array Fore";dir = 5;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"co" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cp" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"cr" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"cs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"ct" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cu" = (/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cx" = (/obj/machinery/pipedispenser/disposal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cy" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"cz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"cA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"cB" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"cC" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 4";dir = 4;icon_state = "camera"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cE" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cF" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cG" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cH" = (/obj/machinery/floodlight,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cI" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cJ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cK" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cL" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/weapon/pickaxe,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cM" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cN" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cO" = (/obj/machinery/floodlight,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/meeting)
+"cP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"cQ" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cR" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cT" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cU" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cV" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Particle Emitter";dir = 2;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = 36},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cX" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"cY" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/hallway)
+"cZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
+"da" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
+"db" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/airlock/glass_engineering{name = "Break Room";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
+"dd" = (/turf/simulated/wall,/area/outpost/engineering/hallway)
+"de" = (/obj/machinery/door/airlock/engineering{name = "Restrooms";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/outpost/engineering/meeting)
+"df" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dh" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"di" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dj" = (/obj/machinery/particle_accelerator/control_box,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dk" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Particle Emitter";dir = 9;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dl" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dm" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dn" = (/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"do" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dq" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"ds" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dt" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"du" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dv" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Corridor Camera 4";dir = 2;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dw" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dx" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dy" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dz" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dB" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dC" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dD" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/power)
+"dE" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dF" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dH" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dL" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dM" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dN" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "eng_sl_eva_inner";locked = 1;luminosity = 1;name = "Engineering Sub-Level EVA";req_access = list(10,13)},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"dP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "eng_sl_eva_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "eng_sl_eva_airlock";name = "Engineering Sub-level Airlock Console";pixel_y = 25;req_access = list(13,10);tag_airpump = "eng_sl_eva_pump";tag_chamber_sensor = "eng_sl_eva_sensor";tag_exterior_door = "eng_sl_eva_outer";tag_interior_door = "eng_sl_eva_inner"},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"dQ" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/airlock_sensor{master_tag = "eng_sl_eva_sensor";pixel_y = 26},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"dR" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "eng_sl_eva_outer";locked = 1;luminosity = 1;name = "Engineering Sub-Level EVA";req_access = list(10,13)},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"dS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dV" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"dW" = (/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dX" = (/obj/machinery/light,/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Corridor Camera 3";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dY" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"dZ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"ea" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Corridor Camera 2";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"ec" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"ed" = (/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"ee" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "eng_sl_eva_pump"},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"ef" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 3";dir = 4;icon_state = "camera"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eg" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eh" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ei" = (/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"ej" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/hallway)
+"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"el" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "eng_sl_eva_airlock";name = "interior access button";pixel_x = 26;pixel_y = 8;req_access = list(10,13)},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"em" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "eng_sl_eva_airlock";name = "exterior access button";pixel_x = -26;pixel_y = 8;req_access = list(10,13)},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"en" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ep" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eq" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"er" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"es" = (/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"et" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eu" = (/obj/machinery/power/tesla_coil,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"ev" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/storage)
+"ew" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"ex" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ey" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Collector Array Aft"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ez" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel -Tesla Parts Storage";dir = 5;icon_state = "camera"},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eC" = (/obj/machinery/power/tesla_coil,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eD" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Engine Aft Airlock";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eE" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eF" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eJ" = (/obj/machinery/door/airlock/glass_engineering{name = "Storage";req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/power)
+"eK" = (/obj/structure/particle_accelerator/end_cap{icon_state = "end_cap";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eL" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eM" = (/obj/machinery/power/grounding_rod,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eP" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eQ" = (/turf/simulated/wall/r_wall,/area/maintenance/sublevel)
+"eR" = (/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"eS" = (/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"eT" = (/obj/structure/particle_accelerator/particle_emitter/center{icon_state = "emitter_center";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eU" = (/obj/structure/particle_accelerator/fuel_chamber{icon_state = "fuel_chamber";dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eV" = (/obj/structure/particle_accelerator/power_box{icon_state = "power_box";dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eW" = (/obj/machinery/power/grounding_rod,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"eX" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eY" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"eZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
+"fa" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway)
+"fb" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"fc" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"fd" = (/turf/simulated/mineral/random,/area/mine/unexplored)
+"fe" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"ff" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fh" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fj" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fk" = (/obj/structure/particle_accelerator/particle_emitter/left{icon_state = "emitter_left";dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"fl" = (/obj/item/toy/figure/engineer,/obj/machinery/the_singularitygen/tesla,/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"fm" = (/obj/structure/particle_accelerator/particle_emitter/right{icon_state = "emitter_right";dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/outpost/engineering/storage)
+"fn" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/outpost/engineering/hallway)
+"fo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"fp" = (/obj/machinery/power/emitter{icon_state = "emitter";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fq" = (/obj/machinery/light{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fs" = (/turf/simulated/floor/tiled,/area/turbolift/engineering_maintenance)
+"ft" = (/turf/simulated/floor/tiled,/area/turbolift/research_maintenance)
+"fu" = (/obj/machinery/door/window/northleft,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fv" = (/obj/machinery/door/window/northright,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fy" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Engine Aft Airlock";dir = 8;icon_state = "camera"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fz" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fA" = (/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fC" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 1";dir = 1;icon_state = "camera"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fD" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fE" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fF" = (/obj/machinery/light,/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fG" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering Sublevel - Engine Camera 2";dir = 1;icon_state = "camera"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"fH" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fI" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fJ" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"fK" = (/obj/turbolift_map_holder/aurora/engineering,/turf/simulated/floor/tiled,/area/turbolift/engineering_maintenance)
+"fL" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"fN" = (/turf/simulated/mineral/random,/area/turret_protected/ai)
+"fO" = (/obj/structure/sign/securearea{name = "\improper DANGER: REACTOR VENT SHAFT"},/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"fP" = (/turf/simulated/wall/r_wall,/area/security/nuke_storage)
+"fQ" = (/turf/simulated/open,/area/mine/unexplored)
+"fR" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"fS" = (/obj/machinery/door/window{base_state = "right";dir = 2;icon_state = "left";name = "Core Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/corp,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"fT" = (/obj/machinery/door/window{base_state = "right";dir = 2;icon_state = "right";name = "Core Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/nanotrasen,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"fU" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/open,/area/mine/unexplored)
+"fV" = (/obj/item/weapon/hand_tele,/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage)
+"fW" = (/obj/item/weapon/aiModule/freeformcore{pixel_x = -4;pixel_y = -8},/obj/item/weapon/aiModule/purge,/obj/item/weapon/aiModule/oneHuman{pixel_x = 4;pixel_y = 8},/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage)
+"fX" = (/obj/item/weapon/rig/hazmat,/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage)
+"fY" = (/obj/item/rig_module/device/rcd,/obj/structure/table/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage)
+"fZ" = (/obj/effect/decal/warning_stripes,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southright,/mob/living/bot/secbot/ed209{on = 0},/turf/simulated/floor{icon_state = "bcircuitoff"},/area/security/nuke_storage)
+"ga" = (/turf/simulated/floor/tiled,/area/turbolift/vault_sub)
+"gb" = (/obj/machinery/computer/aiupload,/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = 22},/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gc" = (/obj/structure/table/standard,/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai)
+"ge" = (/obj/machinery/alarm/cold{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gf" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gg" = (/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gh" = (/obj/effect/decal/warning_stripes,/obj/machinery/porta_turret{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gi" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gj" = (/obj/machinery/door/window/southleft,/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gk" = (/obj/structure/closet/secure_closet/freezer/money,/obj/item/weapon/storage/belt/champion,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage)
+"gl" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/obj/machinery/camera/motion{c_tag = "Secure Vault";dir = 4},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gm" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gn" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"go" = (/obj/structure/sign/biohazard{pixel_x = -32},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Entrance";dir = 5;icon_state = "camera"},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/white,/area/mine/unexplored)
+"gp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/nuke_storage)
+"gq" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station)
+"gr" = (/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station)
+"gs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"gt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/cyan{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"gu" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station)
+"gv" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer)
+"gw" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gx" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gy" = (/obj/machinery/porta_turret{dir = 4},/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gz" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"gA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gB" = (/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gC" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gD" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gE" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Beta Core 2";dir = 1},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gF" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gG" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gH" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"gI" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gJ" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"gL" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"gM" = (/obj/effect/decal/warning_stripes,/obj/machinery/nuclearbomb/station,/turf/simulated/floor/reinforced,/area/security/nuke_storage)
+"gN" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gO" = (/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gP" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gQ" = (/obj/machinery/door/airlock/vault/bolted,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gR" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gT" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/turretid/lethal{ailock = 1;check_synth = 1;control_area = "\improper Vault";desc = "A firewall prevents AIs from interacting with this device.";name = "Vault lethal turret control";pixel_y = 29;req_access = list(20)},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"gV" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"gW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"gX" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
+"gY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"gZ" = (/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/camera/network/command{c_tag = "AI Core - Cyborg Storage"},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"ha" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"hb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"hc" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"hd" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"he" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/camera/network/command{c_tag = "AI Core - Upload Access"},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"hf" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hg" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hh" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"hi" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/porta_turret{dir = 4},/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hm" = (/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1343;name = "Private Channel";pixel_x = 26;pixel_y = 0},/obj/item/device/radio/intercom{broadcasting = 1;listening = 1;name = "Common Channel";pixel_x = -27;pixel_y = 0},/obj/item/device/radio/intercom{listening = 0;name = "Custom Channel";pixel_x = 0;pixel_y = -27},/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/effect/landmark{name = "tripai"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hn" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"ho" = (/obj/structure/safe/station,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage)
+"hp" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/machinery/camera/motion{c_tag = "Secure Vault";dir = 4},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"hq" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"hr" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"hs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/asteroid,/area/mine/explored)
+"ht" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"hu" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"hv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"hw" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"hx" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/turret_protected/ai_cyborg_station)
+"hy" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/cleanable/blood/oil,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"hz" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/turret_protected/ai_cyborg_station)
+"hA" = (/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"hB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"hC" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"hD" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/porta_turret,/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"hE" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"hF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hH" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/cyan{d2 = 4;icon_state = "0-4"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai)
+"hI" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"hJ" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"hK" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hL" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hM" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"hO" = (/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"hP" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - AI Subgrid";name_tag = "AI Subgrid"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"hQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"hT" = (/obj/item/rig_module/vision/thermal,/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage)
+"hU" = (/obj/item/rig_module/mounted/egun{pixel_x = 4;pixel_y = 4},/obj/item/rig_module/mounted/egun{pixel_x = -4;pixel_y = -4},/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage)
+"hV" = (/obj/item/weapon/rig/hazard{pixel_x = -8;pixel_y = 0},/obj/item/weapon/rig/hazard{pixel_x = 8;pixel_y = 0},/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/rig/unathi{pixel_y = -6},/turf/simulated/floor/plating,/area/security/nuke_storage)
+"hW" = (/obj/item/rig_module/chem_dispenser/combat,/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/nuke_storage)
+"hX" = (/obj/effect/decal/warning_stripes,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northright,/mob/living/bot/secbot/ed209{on = 0},/turf/simulated/floor{icon_state = "bcircuitoff"},/area/security/nuke_storage)
+"hY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"hZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/cyan,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai_cyborg_station)
+"ia" = (/obj/machinery/cryopod/robot,/obj/item/toy/figure/borg,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
+"ib" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"ic" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"id" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_cyborg_station)
+"ie" = (/obj/machinery/cryopod/robot,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
+"if" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"ig" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"ih" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = 27;pixel_y = -5},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"ii" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/motion{c_tag = "AI Core - Upload Room";dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"ij" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"ik" = (/obj/machinery/hologram/holopad,/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"il" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ai_core_outer";locked = 1;name = "Outer Core Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{temperature = 273.15},/area/turret_protected/ai)
+"im" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "ai_core_airlock";name = "exterior access button";pixel_x = 27;pixel_y = -26;req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"in" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ai_core_inner";locked = 1;name = "Inner Core Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/turf/simulated/floor/plating{temperature = 273.15},/area/turret_protected/ai)
+"io" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "ai_core_airlock";name = "AI Core airlock controller";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "ai_core_pump";tag_chamber_sensor = "ai_core_sensor";tag_exterior_door = "ai_core_outer";tag_interior_door = "ai_core_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "ai_core_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/light/small,/obj/effect/decal/warning_stripes,/obj/effect/decal/remains/mouse,/obj/machinery/camera/network/command{c_tag = "AI Core - Core Airlock"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "ai_core_pump"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{temperature = 273.15},/area/turret_protected/ai)
+"ip" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/ai_slipper{icon_state = "motion0"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"iq" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "ai_core_airlock";name = "interior access button";pixel_x = -27;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"ir" = (/obj/machinery/flasher{id = "AI";pixel_x = 22;pixel_y = 36},/obj/machinery/turretid/stun{check_synth = 1;name = "AI Chamber turret control";pixel_x = 36;pixel_y = 36},/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "AI Core Door";req_access = list(16)},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"is" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"it" = (/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"iu" = (/obj/item/device/radio/intercom{listening = 0;name = "Custom Channel";pixel_x = 0;pixel_y = 19},/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1343;name = "Private Channel";pixel_x = 0;pixel_y = -26},/obj/item/device/radio/intercom{broadcasting = 1;listening = 1;name = "Common Channel";pixel_x = 27;pixel_y = -3},/obj/machinery/newscaster/security_unit{pixel_x = 32;pixel_y = 32},/obj/machinery/requests_console{department = "AI";departmentType = 5;pixel_x = 32;pixel_y = -32},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the AI core maintenance door.";id = "AICore";name = "AI Maintenance Hatch";pixel_x = 17;pixel_y = 25;req_access = list(20)},/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan{d2 = 4;icon_state = "0-4"},/obj/effect/landmark/start{name = "AI"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"iv" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iw" = (/obj/effect/decal/warning_stripes,/obj/machinery/light/small{dir = 8},/obj/structure/cable/cyan,/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/machinery/power/smes/buildable{charge = 5e+006;input_attempt = 1;input_level = 200000;output_attempt = 1;output_level = 200000},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"ix" = (/obj/effect/decal/warning_stripes,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/porta_turret{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"iA" = (/obj/machinery/camera/network/command{c_tag = "AI Core - SMES Room";dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iB" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/wall,/area/turret_protected/ai)
+"iC" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall,/area/mine/unexplored)
+"iD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored)
+"iE" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station";req_access = list(16)},/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"iF" = (/obj/machinery/door/window/northleft{req_access = list(16)},/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 1},/area/turret_protected/ai_upload_foyer)
+"iG" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"iH" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"iI" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iJ" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload";req_access = list(16)},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"iK" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai)
+"iL" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iM" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"iN" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/ai)
+"iO" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"iP" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iQ" = (/obj/machinery/power/apc/super/critical{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/command{c_tag = "AI Core - Alpha Core";dir = 8},/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"iR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"iS" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"iT" = (/obj/structure/cable/cyan{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
+"iU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iV" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iW" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"iX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall,/area/turret_protected/ai)
+"iY" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_server_room)
+"iZ" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"ja" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jc" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jd" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/ramp{icon_state = "ramptop";dir = 1},/area/turret_protected/ai_upload_foyer)
+"je" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jf" = (/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jg" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"jh" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/porta_turret{dir = 4},/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"ji" = (/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jj" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jk" = (/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jl" = (/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1343;name = "Private Channel";pixel_x = 26;pixel_y = 0},/obj/item/device/radio/intercom{broadcasting = 1;listening = 1;name = "Common Channel";pixel_x = -27;pixel_y = 0},/obj/item/device/radio/intercom{listening = 0;name = "Custom Channel";pixel_x = 0;pixel_y = 19},/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan,/obj/effect/landmark{name = "tripai"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jm" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jn" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/wall,/area/mine/unexplored)
+"jo" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall,/area/mine/unexplored)
+"jp" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/wall,/area/mine/unexplored)
+"jq" = (/turf/simulated/floor/bluegrid,/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/cyan{d2 = 2;icon_state = "0-2"},/obj/machinery/hologram/holopad,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor{icon_state = "siding15"},/area/turret_protected/ai_server_room)
+"jr" = (/obj/machinery/computer/message_monitor,/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
+"js" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jt" = (/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"ju" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jv" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jw" = (/obj/structure/cable/cyan{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jx" = (/obj/machinery/hologram/holopad,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jy" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jz" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/item/weapon/aiModule/protectStation,/obj/effect/decal/cleanable/dirt,/obj/item/trash/chips,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jA" = (/obj/structure/bed/chair/office/dark,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jB" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/structure/cable/cyan,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/ai)
+"jC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/alarm/cold{dir = 1;pixel_y = -22},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jF" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jH" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Beta Core 1"},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"jJ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jK" = (/obj/machinery/door/airlock/highsecurity{name = "AI SMES";req_access = list(16)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "AICore";name = "AI core maintenance hatch";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jL" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jM" = (/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/up/supply,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"jN" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"jO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
+"jP" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_server_room)
+"jQ" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/cyan{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jR" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server";req_access = list(16)},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jS" = (/obj/machinery/porta_turret,/obj/effect/decal/warning_stripes,/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jT" = (/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jU" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = -27},/obj/structure/cable/cyan{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jV" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access";req_access = list(16)},/obj/structure/cable/cyan{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jW" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"jX" = (/obj/machinery/computer/borgupload,/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -5;pixel_y = -27},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jY" = (/obj/machinery/computer/robotics,/obj/effect/decal/cleanable/dirt,/obj/machinery/status_display{pixel_y = -32},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"jZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"ka" = (/obj/machinery/door/window/northright,/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/turret_protected/ai)
+"kb" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kc" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "sl1";pixel_x = 26},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ke" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kf" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kg" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kh" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
+"ki" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Messaging Server";dir = 1},/obj/machinery/blackbox_recorder,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
+"kj" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kk" = (/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "High-Risk Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/teleporterOffline,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/purge,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"kl" = (/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "right";name = "High-Risk Modules";req_access = list(20)},/obj/structure/table/standard,/obj/item/weapon/aiModule/oneHuman,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/freeformcore,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor";temperature = 278},/area/turret_protected/ai)
+"km" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ko" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl1i";locked = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ks" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kt" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "sl1p"},/obj/machinery/airlock_sensor{id_tag = "sl1s";pixel_y = -26},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ku" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "sl1";pixel_y = 32;tag_airpump = "sl1p";tag_chamber_sensor = "sl1s";tag_exterior_door = "sl1o";tag_interior_door = "sl1i"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kw" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl1o";locked = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"ky" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kA" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kB" = (/obj/machinery/camera/network/command{c_tag = "AI Core - Lobby";dir = 1},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kC" = (/obj/machinery/shieldwallgen,/obj/structure/cable/cyan,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kD" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Sublevel - Cavern Entrance";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "sl1";pixel_x = -26},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/maintenance/sublevel)
+"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kG" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"kH" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kJ" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kK" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"kM" = (/obj/item/device/radio/intercom/locked{frequency = 1343;locked_frequency = 1343;name = "Private AI Channel";pixel_x = -32;pixel_y = -5},/obj/machinery/turretid/stun{control_area = null;name = "AI Upload turret control";pixel_x = 24;pixel_y = 6},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"kN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/motion{c_tag = "AI Core - Entrance";pixel_x = 16},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"kO" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"kP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"kQ" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"kR" = (/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/asteroid,/area/turret_protected/ai_upload_foyer)
+"kS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"kT" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"kU" = (/obj/machinery/light/small{dir = 1},/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/structure/table/standard,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/outpost/research/analysis)
+"kV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"kW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"kX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker)
+"kY" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"kZ" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"la" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker)
+"lb" = (/turf/simulated/wall/r_wall,/area/outpost/research/analysis)
+"lc" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"ld" = (/obj/structure/reagent_dispensers/coolanttank,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"le" = (/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"lf" = (/turf/simulated/wall,/area/mine/explored)
+"lg" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"lh" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"li" = (/obj/machinery/radiocarbon_spectrometer,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/outpost/research/analysis)
+"lj" = (/obj/structure/ore_box,/turf/simulated/floor/asteroid,/area/mine/explored)
+"lk" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Sample Analysis";dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"ll" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"lm" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"ln" = (/turf/simulated/wall/r_wall,/area/bridge/aibunker)
+"lo" = (/turf/simulated/wall/r_wall,/area/outpost/research/anomaly_analysis)
+"lp" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"lq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/anomaly_analysis)
+"lr" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/mask/breath,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/helmet/space/emergency,/obj/item/clothing/suit/space/emergency,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"ls" = (/obj/structure/table/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/tiled/dark,/area/bridge/aibunker)
+"lt" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/tiled/dark,/area/space)
+"lu" = (/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lv" = (/obj/machinery/cryopod,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lw" = (/obj/structure/cryofeed,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lx" = (/obj/structure/closet,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ly" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"lz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lA" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lB" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lC" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lD" = (/obj/machinery/alarm{dir = 2;pixel_y = 25},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lE" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lF" = (/obj/structure/sign/nosmoking_2{pixel_x = 0;pixel_y = 32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"lG" = (/obj/machinery/conveyor{dir = 1;id = "anolaser"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"lH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"lI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/analysis)
+"lJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"lK" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"lL" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "sl3";pixel_x = 26},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"lM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker)
+"lN" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/asteroid,/area/turret_protected/ai_upload_foyer)
+"lO" = (/obj/machinery/door/airlock/highsecurity{name = "Ladder Access";req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lP" = (/obj/machinery/light/small/emergency,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker)
+"lQ" = (/obj/structure/bed/chair,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"lT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/anomaly_analysis)
+"lU" = (/obj/structure/table/steel,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"lV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"lW" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"lX" = (/obj/structure/table/steel,/turf/simulated/floor/asteroid,/area/mine/explored)
+"lY" = (/obj/structure/table/rack,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"lZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Anomalous Materials Storage";dir = 8},/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"ma" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mc" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"md" = (/obj/machinery/artifact_analyser,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_analysis)
+"me" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mf" = (/obj/machinery/conveyor{dir = 1;id = "anolaser"},/obj/structure/plasticflaps,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"mg" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_analysis)
+"mh" = (/obj/machinery/conveyor_switch{id = "anolaser"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mi" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Spectrometry Lab";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis)
+"mj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"mk" = (/turf/simulated/wall/r_wall,/area/outpost/research/emergency_storage)
+"ml" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"mm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"mn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"mo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"mp" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"mq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl3o";locked = 1},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"mr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "sl3";pixel_y = 32;tag_airpump = "sl3p";tag_chamber_sensor = "sl3s";tag_exterior_door = "sl3o";tag_interior_door = "sl3i"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ms" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "sl3p"},/obj/machinery/airlock_sensor{id_tag = "sl3s";pixel_y = -26},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"mt" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"mu" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl3i";locked = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"mv" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/latex,/obj/structure/window/reinforced,/obj/machinery/status_display{layer = 4;pixel_x = 32;pixel_y = 0},/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"mw" = (/obj/machinery/light/small{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -25;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mx" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"my" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mz" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mA" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mB" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mC" = (/obj/machinery/power/emitter{anchored = 1;dir = 4;state = 2},/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mD" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mE" = (/obj/machinery/conveyor{dir = 1;id = "anolaser"},/obj/machinery/door/window/westleft{dir = 2;layer = 3.1;name = "laser testing";req_access = list(65)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"mF" = (/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mG" = (/obj/machinery/door/window/westleft{dir = 4;name = "Monkey Pen";req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"mH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"mI" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Corridor Camera 6"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"mJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"mK" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"mL" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4;pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3;pixel_y = -3},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5;pixel_y = 5},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"mM" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "sl3";pixel_x = -26},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"mN" = (/obj/machinery/power/emitter{anchored = 1},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"mO" = (/obj/machinery/suspension_gen,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"mP" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mQ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mR" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mS" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mT" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/machinery/camera/network/command{c_tag = "AI Core - AI Maintenance Bunker";dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mU" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"mV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/bridge/aibunker)
+"mW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mX" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"mY" = (/obj/structure/closet/crate,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"mZ" = (/obj/machinery/floodlight,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"na" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"ne" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nf" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"ng" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nh" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ni" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nl" = (/obj/machinery/door/airlock/research{name = "Supply Closet";req_access = list(65)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/emergency_storage)
+"nm" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nn" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"no" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5;pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5;pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"np" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"nq" = (/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"nr" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/highsecurity{name = "Ladder Access";req_access = list(16)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/bridge/aibunker)
+"ns" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/anomaly_analysis)
+"nt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nu" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Anomalous Materials Lab";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nv" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"nw" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"nx" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_analysis)
+"ny" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nz" = (/obj/machinery/firealarm{pixel_y = -24},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nA" = (/obj/structure/table/rack,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nB" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nC" = (/obj/machinery/light/small,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nD" = (/obj/machinery/door/window/westleft{dir = 2;name = "Monkey Pen";req_access = list(47)},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nF" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nG" = (/obj/structure/closet/hydrant{pixel_x = -32},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"nH" = (/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nI" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"nJ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "plating"},/area/maintenance/sublevel)
+"nK" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
+"nL" = (/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"nM" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{name = "Anomalous Materials Locker Room";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nN" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials";req_access = list(65)},/turf/simulated/floor/tiled/white,/area/outpost/research/anomaly_analysis)
+"nO" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/asteroid,/area/mine/explored)
+"nP" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nQ" = (/obj/machinery/light{dir = 8},/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nS" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nT" = (/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"nU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway)
+"nV" = (/turf/simulated/wall/r_wall,/area/outpost/research/anomaly_storage)
+"nW" = (/turf/simulated/wall/r_wall,/area/medical/virology)
+"nX" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nY" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"nZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oa" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ob" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"od" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage)
+"oe" = (/obj/machinery/button/crematorium{id = "patientmurder";pixel_x = -4;pixel_y = 4},/obj/structure/table/standard,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"of" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Medical (Sub-level)";name_tag = "Medical (Sub-level)"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"og" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"oh" = (/obj/machinery/artifact_scanpad,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_storage)
+"oi" = (/obj/machinery/artifact_harvester,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_storage)
+"oj" = (/obj/structure/crematorium{id = "patientmurder"},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"ok" = (/obj/machinery/power/smes/buildable{RCon_tag = "Substation - Medical (Sub-level)"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ol" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical (Sub-level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"om" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway)
+"on" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oo" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"op" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"oq" = (/obj/structure/table/rack,/obj/item/stack/material/steel{amount = 10},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"or" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"os" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ot" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ou" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ov" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ow" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ox" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oy" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/external{name = "Access Airlock";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage)
+"oz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"oB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage)
+"oC" = (/obj/item/weapon/anodevice{pixel_x = 3;pixel_y = 3},/obj/item/weapon/anodevice,/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"oD" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"oE" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"oF" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"oG" = (/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"oH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"oI" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"oJ" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"oK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"oL" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"oM" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small/emergency,/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"oN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oO" = (/turf/simulated/wall,/area/mine/unexplored)
+"oP" = (/obj/structure/ore_box,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"oQ" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oR" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oS" = (/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oT" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oU" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oV" = (/obj/machinery/light,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Corridor Camera 5";dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oY" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"oZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage)
+"pa" = (/obj/item/weapon/anobattery{pixel_x = -6;pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2;pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2;pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6;pixel_y = 6},/obj/structure/table/steel,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"pb" = (/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"pc" = (/obj/machinery/light/small{dir = 8},/obj/structure/table/standard,/obj/item/device/camera{name = "Autopsy Camera";pixel_x = -2;pixel_y = 7},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Morgue";dir = 4;icon_state = "camera"},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pd" = (/obj/machinery/light/small/emergency{dir = 8},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"pe" = (/obj/effect/landmark/corpse/engineer/rotten,/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"pf" = (/obj/effect/decal/cleanable/blood,/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"pg" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"ph" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"pk" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "plating"},/area/maintenance/sublevel)
+"pl" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"pm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring)
+"pn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring)
+"po" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_monitoring)
+"pp" = (/obj/machinery/door/airlock/research{name = "Anomaly Isolation";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"pq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring)
+"pr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring)
+"ps" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/outpost/research/anomaly_storage)
+"pt" = (/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Anomaly Analysis";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/anomaly_storage)
+"pu" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pv" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pw" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_storage)
+"px" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"py" = (/obj/machinery/disposal,/obj/effect/decal/warning_stripes,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/turf/simulated/floor/plating,/area/medical/virology)
+"pz" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"pA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"pC" = (/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"pD" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/maintenance/sublevel)
+"pE" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"pF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"pG" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pH" = (/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pI" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pJ" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pK" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/structure/window/reinforced{dir = 4},/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pL" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/unexplored)
+"pM" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "research_airlock";name = "exterior access button";pixel_x = -25;pixel_y = -25;req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"pN" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pO" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/tape_roll,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pP" = (/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pQ" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"pR" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/autopsy_scanner,/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pS" = (/obj/machinery/optable,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pT" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/medical/virology)
+"pU" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"pV" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"pW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway)
+"pX" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pY" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"pZ" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qa" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qb" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qc" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qd" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/virology)
+"qe" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/medical{name = "Virology Morgue";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qf" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/structure/flora/pottedplant/random,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/white,/area/mine/unexplored)
+"qg" = (/turf/simulated/floor/tiled,/area/turbolift/medical_sub)
+"qh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/space)
+"qi" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/white,/area/space)
+"qj" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/space)
+"qk" = (/turf/simulated/wall/r_wall,/area/outpost/research/eva)
+"ql" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"qm" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "research_outer";locked = 1;name = "Research Outpost External Access";req_access = list(10,13)},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"qn" = (/turf/simulated/wall/r_wall,/area/outpost/research/hallway)
+"qo" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Corridor Camera 4";dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"qp" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qq" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qr" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qs" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qt" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qu" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/manifold/visible/supply,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qv" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qw" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qx" = (/obj/structure/table/standard,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three");req_one_access = list(47,24,11)},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qy" = (/obj/structure/table/standard,/obj/item/weapon/folder,/obj/item/device/camera,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qz" = (/obj/structure/closet/medical_wall{pixel_x = 28;pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"qA" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qB" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4;pixel_y = 4},/obj/item/weapon/reagent_containers/dropper,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qC" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qE" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qF" = (/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory";req_access = list(39)},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qH" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qI" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qJ" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Airlock";dir = 5;icon_state = "camera"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qK" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qL" = (/obj/structure/closet/wardrobe/virology_white,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qN" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"qQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"qR" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/space)
+"qS" = (/turf/simulated/floor/tiled/white,/area/space)
+"qT" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled/white,/area/space)
+"qU" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"qV" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"qW" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"qX" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "research_pump";tag_exterior_door = "research_outer";frequency = 1379;id_tag = "research_airlock";tag_interior_door = "research_inner";pixel_x = -25;pixel_y = 0;tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "research_pump"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Expedition Airlock";dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"qY" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "research_pump"},/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"qZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ra" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"rb" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Port";dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rc" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rd" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"re" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rf" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rh" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1;tag_south = 2;tag_west = 3},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"ri" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rj" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Starboard";dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rk" = (/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/device/antibody_scanner,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ro" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Quarantine Entrance";dir = 4;icon_state = "camera"},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rp" = (/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},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"rq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/junction/yjunction{icon_state = "pipe-y";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rs" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virology_airlock_interior";locked = 1;name = "Virology Interior Airlock";req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rt" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virology_airlock_control";name = "Virology Access Console";pixel_x = 26;pixel_y = 28;tag_exterior_door = "virology_airlock_exterior";tag_interior_door = "virology_airlock_interior"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ru" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rv" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "virology_airlock_control";name = "Virology Access Button";pixel_x = -26;pixel_y = 28;req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rw" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virology_airlock_exterior";locked = 1;name = "Virology Exterior Airlock";req_access = list(39)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "virology_airlock_control";name = "Virology Access Button";pixel_x = 0;pixel_y = -24;req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ry" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/sign/v,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rA" = (/obj/machinery/door/airlock/external{name = "Virology Access";req_access = list(39)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rC" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/tiled/white,/area/space)
+"rD" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/outpost/research/eva)
+"rE" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/outpost/research/eva)
+"rF" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/outpost/research/eva)
+"rG" = (/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "research_sensor";pixel_x = -25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "research_pump"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"rH" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"rI" = (/obj/structure/ore_box,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "research_pump"},/obj/structure/sign/vacuum{pixel_x = 32},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"rJ" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rK" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rL" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rM" = (/obj/machinery/power/emitter{anchored = 1},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rN" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rO" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"rP" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rT" = (/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory";req_access = list(39)},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rX" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rY" = (/obj/machinery/shower{dir = 1},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"rZ" = (/obj/machinery/shower{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sa" = (/obj/machinery/shower{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sb" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sc" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "virologyquar";name = "Virology Emergency Lockdown Control";pixel_x = -25;pixel_y = -5;req_access = list(40)},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/space)
+"se" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/space)
+"sf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"sg" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "research_inner";locked = 1;name = "Research Outpost External Access"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/outpost/research/eva)
+"sh" = (/obj/machinery/atmospherics/unary/freezer{dir = 4;icon_state = "freezer"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"si" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sj" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sk" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sl" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sm" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"sn" = (/obj/machinery/power/smes/buildable{RCon_tag = "Substation - Research (Sub-level)"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"so" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Research (Sub-level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"sp" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sq" = (/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},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"sr" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ss" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "virologyq_airlock_control";name = "Virology Quarantine Access Button";pixel_x = 32;pixel_y = 0;req_access = list(39)},/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virologyq_airlock_interior";locked = 1;name = "Virology Quarantine Airlock";req_access = list(39)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"st" = (/obj/turbolift_map_holder/aurora/medical,/turf/simulated/floor/tiled,/area/turbolift/medical_sub)
+"su" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/space)
+"sv" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/tiled/white,/area/space)
+"sw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/space)
+"sx" = (/obj/structure/closet/excavation,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sy" = (/obj/machinery/light/small{dir = 1},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sz" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"sB" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "research_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25;req_one_access = list(13,65)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sC" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Expedition Preparation"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sE" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"sF" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock"},/obj/machinery/door/airlock/glass_mining{name = "Loading area";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"sG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"sH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"sI" = (/obj/machinery/atmospherics/valve/digital/open,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sJ" = (/obj/machinery/button/remote/airlock{id = "riso1";name = "Door Bolt Control";pixel_x = -25;pixel_y = 0;specialfunctions = 4},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sK" = (/obj/machinery/button/remote/airlock{id = "riso2";name = "Door Bolt Control";pixel_x = 0;pixel_y = -25;specialfunctions = 4},/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sL" = (/obj/machinery/atmospherics/valve/digital/open,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sM" = (/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sN" = (/obj/machinery/button/remote/airlock{id = "riso3";name = "Door Bolt Control";pixel_x = 0;pixel_y = -25;specialfunctions = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sO" = (/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sP" = (/obj/machinery/atmospherics/valve/digital/open,/turf/simulated/floor/tiled,/area/outpost/research/isolation_monitoring)
+"sQ" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"sR" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"sS" = (/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/structure/table/standard,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 7;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Virology Emergency Phone";pixel_x = -6;pixel_y = 8},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sU" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sV" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sW" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology North"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"sY" = (/obj/machinery/disease2/diseaseanalyser,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"sZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ta" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_wing)
+"tc" = (/obj/machinery/door/airlock/external{name = "Patient Recovery Wing Access";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"td" = (/obj/structure/closet/excavation,/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"te" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"tg" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"th" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"ti" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tj" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_a)
+"tk" = (/obj/machinery/door/airlock/external{id_tag = "riso1";name = "Access Airlock";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a)
+"tl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_a)
+"tm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_a)
+"tn" = (/obj/machinery/door/airlock/external{id_tag = "riso2";name = "Access Airlock";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b)
+"to" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_b)
+"tp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_b)
+"tq" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_b)
+"tr" = (/obj/machinery/door/airlock/external{id_tag = "riso3";name = "Access Airlock";req_access = list(65)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c)
+"ts" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_c)
+"tt" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/isolation_c)
+"tu" = (/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"tv" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"tw" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"tx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "sl2";pixel_x = -26},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"ty" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "virologyquar";name = "Virology Emergency Lockdown Control";pixel_x = -25;pixel_y = 0;req_access = list(5)},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tz" = (/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tA" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tB" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"tD" = (/obj/machinery/computer/diseasesplicer,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tE" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Quarantine Airlock";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tF" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"tG" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"tH" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"tI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"tJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"tK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"tL" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access = list(5)},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"tM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"tN" = (/obj/structure/closet/excavation,/obj/machinery/light{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Expedition Storage";dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tR" = (/obj/machinery/door/airlock/glass_mining{name = "Equipment storage";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tU" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"tV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a)
+"tW" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a)
+"tX" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one";dir = 8;pixel_x = 22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_a)
+"tY" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b)
+"tZ" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b)
+"ua" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two";dir = 8;pixel_x = 22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_b)
+"ub" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c)
+"uc" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c)
+"ud" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three";dir = 8;pixel_x = 22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/outpost/research/isolation_c)
+"ue" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"uf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ug" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"uh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ui" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"uj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"uk" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ul" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl2i";locked = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"um" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "sl2";pixel_y = -26},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"un" = (/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1379;id_tag = "sl2p"},/obj/machinery/airlock_sensor{id_tag = "sl2s";pixel_y = -26},/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"uo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "sl2";pixel_y = 32;tag_airpump = "sl2p";tag_chamber_sensor = "sl2s";tag_exterior_door = "sl2o";tag_interior_door = "sl2i"},/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"up" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"uq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "sl2o";locked = 1},/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ur" = (/obj/structure/bed/padded,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"us" = (/obj/item/roller,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ut" = (/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},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"uu" = (/obj/machinery/disposal,/obj/effect/decal/warning_stripes,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/medical/virology)
+"uv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"uw" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ux" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"uy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"uz" = (/obj/machinery/disease2/isolator,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"uA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"uB" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"uC" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"uD" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"uE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"uF" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"uG" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"uH" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"uI" = (/turf/simulated/wall/r_wall,/area/medical/patient_a)
+"uJ" = (/turf/simulated/wall/r_wall,/area/medical/patient_b)
+"uK" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uL" = (/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uM" = (/obj/machinery/floodlight,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"uO" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/door/window{dir = 4;name = "Air Tank Access";req_one_access = list(47,10,24)},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uP" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uR" = (/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/machinery/status_display{layer = 4;pixel_x = 32;pixel_y = 0},/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"uS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"uT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"uU" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a)
+"uV" = (/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a)
+"uW" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Cell A";dir = 8},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a)
+"uX" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b)
+"uY" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b)
+"uZ" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Cell B";dir = 8},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b)
+"va" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c)
+"vb" = (/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c)
+"vc" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Isolation Cell C";dir = 8},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c)
+"vd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ve" = (/obj/machinery/camera/network/engineering_outpost{c_tag = "Research Sublevel - Cavern Entrance";dir = 4;icon_state = "camera"},/turf/simulated/floor/asteroid,/area/maintenance/sublevel)
+"vf" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Cell A";dir = 4;icon_state = "camera"},/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vh" = (/obj/machinery/door/window/westleft{name = "Virology Isolation Cell Alpha";req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vm" = (/obj/machinery/computer/centrifuge,/obj/item/weapon/storage/secure/safe{pixel_x = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vn" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virologyq_airlock_exterior";locked = 1;name = "Virology Quarantine Airlock";req_access = list(39)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "virologyq_airlock_control";name = "Virology Quarantine Access Button";pixel_x = -24;pixel_y = 0;req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"vo" = (/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/simulated/floor/plating,/area/medical/virology)
+"vp" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"vq" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"vr" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"vs" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"vt" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"vu" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoA_window_tint";pixel_y = 26},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"vv" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"vw" = (/turf/simulated/wall,/area/medical/patient_a)
+"vx" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"vy" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoB_window_tint";pixel_y = 26},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"vz" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"vA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vB" = (/obj/machinery/suspension_gen,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vC" = (/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vD" = (/obj/machinery/door/window{dir = 4;name = "Air Tank Access";req_one_access = list(47,10,24)},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vG" = (/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/green,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/outpost/research/eva)
+"vH" = (/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"vI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"vJ" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_a)
+"vK" = (/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a)
+"vL" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a)
+"vM" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_b)
+"vN" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b)
+"vO" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b)
+"vP" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c)
+"vQ" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c)
+"vR" = (/obj/structure/bed,/turf/simulated/floor/tiled/dark,/area/outpost/research/isolation_c)
+"vS" = (/obj/structure/crematorium{id = "slimemurder"},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"vT" = (/obj/machinery/button/crematorium{id = "slimemurder";pixel_x = -4;pixel_y = 4},/obj/structure/table/standard,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Waste Management"},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"vU" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology)
+"vV" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vW" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vX" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"vZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wb" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wc" = (/obj/machinery/smartfridge/secure/virology,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wd" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"we" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wf" = (/obj/structure/closet/secure_closet/personal/patient,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/item/clothing/shoes/white,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wg" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wh" = (/turf/simulated/wall,/area/medical/morgue)
+"wi" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"wj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"wk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"wl" = (/turf/simulated/wall/r_wall,/area/medical/patient_wing)
+"wm" = (/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"wn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"wo" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"wp" = (/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"wq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"wr" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"ws" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"wt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
+"wu" = (/obj/machinery/door/airlock/glass_research{name = "Xenoarchaeology Department";req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wv" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"ww" = (/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"wx" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"wy" = (/turf/simulated/wall,/area/medical/virology)
+"wz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"wB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"wC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"wD" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/machinery/microwave,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"wF" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/ramp,/area/medical/virology)
+"wG" = (/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"wH" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"wI" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"wJ" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"wK" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"wL" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"wM" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/pink/full,/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"wN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"wO" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"wP" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/pink/full,/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"wQ" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"wR" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/pink/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"wS" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"wT" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wV" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wW" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wX" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Camera Corridor 3"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wY" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"xa" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xb" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xc" = (/obj/machinery/door/window/eastleft,/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xd" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Quarantine"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"xf" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xg" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xh" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"xj" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xk" = (/obj/structure/morgue,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"xl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"xm" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xn" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"xo" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"xp" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"xq" = (/obj/machinery/newscaster{pixel_x = 30;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xr" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "isoA_window_tint"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_a)
+"xs" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "isoA_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "isoA_window_tint"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_a)
+"xt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute A"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_a)
+"xu" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "isoB_window_tint"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/patient_b)
+"xv" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Sub-Acute B"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_b)
+"xw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"xx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"xy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"xz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"xA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"xB" = (/obj/machinery/door/airlock/research{name = "Secure Disposals";req_access = list(55)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"xC" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Cell B";dir = 4;icon_state = "camera"},/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xE" = (/obj/machinery/door/window/westleft{name = "Virology Isolation Cell Beta";req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xF" = (/obj/machinery/vending/snack,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xG" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xH" = (/obj/item/weapon/folder/white,/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/white,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xI" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xJ" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xK" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xL" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"xM" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"xN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"xO" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xP" = (/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xQ" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"xR" = (/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xS" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xT" = (/obj/structure/closet/crate/freezer{name = "O- Blood Packs"},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xU" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xV" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xW" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Patient Wing Hallway East"},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xX" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"xY" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/patient_wing)
+"xZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/sign/a,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"ya" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/sign/b,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yc" = (/obj/machinery/light,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yd" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"ye" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yf" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yg" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yh" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway)
+"yi" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"yj" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Fore"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"yk" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"yl" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"ym" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"yn" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"yo" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio6";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"yp" = (/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"yq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"yr" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ys" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"yt" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"yu" = (/obj/structure/table/standard,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"yv" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"yw" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"yx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio6";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"yy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"yz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"yA" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"yB" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yC" = (/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/medical/morgue)
+"yD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yE" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yG" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;id_tag = null;name = "Patient Recovery Wing";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yI" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yN" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yQ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/patient_wing)
+"yR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yS" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/research/hallway)
+"yU" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/outpost/research/hallway)
+"yV" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"yW" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Camera Corridor 2";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"yX" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"yY" = (/obj/machinery/optable{name = "Xenobiology Operating Table"},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"yZ" = (/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"za" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = 29},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"zb" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"zc" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/westright{name = "Containment Pen";req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"zd" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"ze" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zg" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zh" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio6";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"zi" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 6";dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"zj" = (/obj/structure/bed/padded,/obj/item/clothing/under/color/white,/obj/item/clothing/shoes/white,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zk" = (/turf/simulated/wall,/area/medical/medbay4)
+"zl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"zm" = (/turf/simulated/wall,/area/medical/ward)
+"zn" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Morgue";dir = 8;icon_state = "camera"},/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"zo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zp" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/medical{name = "Staff Wing";req_access = list(5)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"zq" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"zr" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"zs" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"zt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"zu" = (/obj/machinery/door/airlock/multi_tile/glass{name = "Patient Ward";req_access = list(5)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"zw" = (/obj/effect/floor_decal/corner/mauve/full,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"zx" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"zy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"zz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"zA" = (/obj/item/toy/plushie/spider,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"zB" = (/obj/machinery/light,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"zC" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Camera Corridor 1";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"zD" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"zE" = (/obj/machinery/smartfridge/secure/extract,/obj/effect/floor_decal/corner/white/full,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"zF" = (/obj/machinery/disposal,/obj/machinery/vending/wallmed1{name = "Emergency NanoMed";pixel_x = 26;pixel_y = 0},/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"zG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"zH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"zI" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"zJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zK" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"zL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"zM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"zN" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio6";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"zP" = (/obj/structure/window/reinforced,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"zR" = (/obj/structure/flora/pottedplant/random,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"zS" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"zT" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zU" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zV" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zW" = (/obj/structure/bed/chair/comfy/teal,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"zX" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zY" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"zZ" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Aa" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Ab" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Ac" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Ad" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Ae" = (/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/simulated/floor/plating,/area/outpost/research/hallway)
+"Af" = (/obj/structure/bed/chair/comfy/teal{dir = 8;icon_state = "comfychair_preview"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Ag" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab";req_access = list(7)},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Ah" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Ai" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Aj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Ak" = (/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Al" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Am" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = 0;pixel_y = 29},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"An" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Ao" = (/obj/machinery/camera/network/research_outpost,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Ap" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Aq" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Cell C";dir = 4;icon_state = "camera"},/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Ar" = (/obj/structure/sink{pixel_y = 16},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/medical/virology)
+"As" = (/obj/structure/bed/chair,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/plating,/area/medical/virology)
+"At" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Au" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Av" = (/obj/machinery/light{dir = 8},/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Aw" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Ax" = (/obj/machinery/disposal,/obj/effect/decal/warning_stripes,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/wall/r_wall,/area/medical/virology)
+"Ay" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Az" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"AA" = (/turf/simulated/floor/tiled/white,/area/medical/ward)
+"AB" = (/obj/structure/bed/chair/wheelchair{icon_state = "wheelchair";dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"AC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"AD" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = -25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"AE" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"AF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"AG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"AH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"AI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"AJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"AK" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"AL" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall";pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"AM" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/medical/patient_wing)
+"AN" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"AO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"AP" = (/obj/structure/closet/l3closet/scientist,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel -Xenobiology Entrance"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"AQ" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"AR" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"AS" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"AT" = (/obj/machinery/newscaster{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"AU" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio5";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Starboard";dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"AV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"AW" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/medical/virology)
+"AX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/medical/virology)
+"AY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio5";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"AZ" = (/obj/machinery/door/window/eastleft{name = "Simian Storage";req_access = list(39)},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Ba" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Bb" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Bc" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Bd" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Be" = (/obj/structure/bed/chair/wheelchair{icon_state = "wheelchair";dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Bf" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Bg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Bh" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 4},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = -27},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Bi" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Bj" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 8},/obj/machinery/newscaster{pixel_x = 30;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Bk" = (/obj/structure/bed/chair/comfy/teal{icon_state = "comfychair_preview";dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Bl" = (/obj/machinery/vending/coffee,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing)
+"Bm" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Bn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Bo" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing)
+"Bp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing)
+"Bq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Br" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Bs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Bt" = (/obj/machinery/door/airlock/research{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "xeno_airlock_exterior";locked = 1;name = "Xenobiology External Airlock";req_access = list(55)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "xeno_airlock_control";name = "Xenobiology Access Button";pixel_x = 0;pixel_y = -24;req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Bu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Bv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Bw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Bx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"By" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Bz" = (/obj/machinery/door/airlock/research{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "xeno_airlock_interior";locked = 1;name = "Xenobiology Internal Airlock";req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BA" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BD" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2;pixel_y = 2},/obj/item/glass_jar,/obj/item/glass_jar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BF" = (/mob/living/carbon/slime,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"BG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"BH" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"BI" = (/turf/simulated/floor/plating,/area/medical/virology)
+"BJ" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio5";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"BK" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 5";dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"BL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"BM" = (/obj/structure/curtain,/turf/simulated/floor/tiled/white,/area/medical/ward)
+"BN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "virologyquar";name = "Virology Emergency Quarantine Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/virology)
+"BO" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"BP" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"BQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"BR" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"BS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"BT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing)
+"BU" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -27},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"BV" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing)
+"BW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"BX" = (/obj/structure/disposalpipe/junction,/obj/machinery/camera/network/medbay{c_tag = "Medbay Equipment Storage";dir = 1},/obj/machinery/light,/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/medical/patient_wing)
+"BY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"BZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Ca" = (/obj/machinery/shower{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = -32},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Cb" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Cd" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Ce" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/machinery/shower{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Cf" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/shower{dir = 1},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "xeno_airlock_control";name = "Xenobiology Access Button";pixel_x = 28;pixel_y = 8;req_access = list(55)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Cg" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Ch" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Ci" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xeno_airlock_control";name = "Xenobiology Access Console";pixel_x = -22;pixel_y = 8;tag_exterior_door = "xeno_airlock_exterior";tag_interior_door = "xeno_airlock_interior"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Port";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Cj" = (/turf/simulated/wall,/area/crew_quarters/medbreak)
+"Ck" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/gloves/latex,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Cl" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Cm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio5";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Cn" = (/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Co" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"Cp" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"Cq" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"Cr" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/medbay{c_tag = "Medical - Staff Area Hallway";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Cs" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Ct" = (/turf/simulated/wall/r_wall,/area/medical/ward)
+"Cu" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/patient_wing)
+"Cv" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"Cw" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Cx" = (/turf/simulated/wall/r_wall,/area/rnd/telesci)
+"Cy" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Cz" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview";dir = 8},/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = 27},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/light{dir = 4;status = 2},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"CA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"CB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"CC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room";req_one_access = list(7,29)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"CD" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"CE" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 5},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"CF" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"CG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"CH" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"CI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"CJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"CK" = (/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"CL" = (/turf/simulated/wall/r_wall,/area/rnd/storage)
+"CM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"CN" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/crew_quarters/medbreak)
+"CO" = (/turf/simulated/floor/tiled/dark,/area/rnd/telesci)
+"CP" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"CQ" = (/obj/machinery/door/airlock/research{name = "Toxins Storage";req_access = list(8)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/storage)
+"CR" = (/obj/machinery/door/airlock/research{name = "Toxins Storage";req_access = list(8)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/storage)
+"CS" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"CT" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "telescience";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/telesci)
+"CU" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel -Telescience"},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"CV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"CW" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"CX" = (/obj/structure/closet/bombcloset,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"CY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"CZ" = (/obj/structure/sink{pixel_y = 18},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Da" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Db" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"Dc" = (/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"De" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Df" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Dg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Dh" = (/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Di" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"Dj" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Dk" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio4";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"Dl" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Dm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio4";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Dn" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Do" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Dp" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Dq" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Dr" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_y = -32},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Ds" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Mixing Fore"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Dt" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Du" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Dv" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Dw" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"Dx" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Dy" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Dz" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Storage"},/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled,/area/rnd/storage)
+"DA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/camera/network/medbay{c_tag = "Medical - Patient Ward";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/ward)
+"DB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"DC" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"DD" = (/obj/machinery/telepad,/turf/simulated/floor/tiled/dark,/area/rnd/telesci)
+"DE" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"DF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"DG" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Telescience Teleporter";dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/telesci)
+"DH" = (/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"DI" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"DJ" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"DK" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "telescience";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/westright,/obj/machinery/door/window/eastleft,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/telesci)
+"DL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"DM" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"DN" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"DO" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"DP" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"DQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"DR" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"DS" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"DT" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio4";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/window/eastleft{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"DU" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 4";dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"DV" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/donut,/obj/structure/disposalpipe/junction/yjunction{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"DW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"DX" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"DY" = (/obj/machinery/atmospherics/unary/freezer,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"DZ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Ea" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Eb" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Ec" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"Ed" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Ee" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Ef" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Eg" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Eh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Ei" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Ej" = (/obj/machinery/door/airlock/glass_medical{name = "Staff Break Room";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Ek" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/sign/nosmoking_1{pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"El" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "xenobot_inj";pixel_y = 1;use_power = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Em" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"En" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Eo" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/rnd/telesci)
+"Ep" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "telescience";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Eq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Er" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Es" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Et" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"Eu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio3";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"Ev" = (/obj/machinery/door/window/northright{name = "Containment Pen";req_access = list(47)},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"Ew" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"Ex" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio2";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"Ey" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Aft";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"Ez" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"EA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"EB" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"EC" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"ED" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"EE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio1";name = "Containment Blast Doors";pixel_x = 0;pixel_y = 4;req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"EF" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology)
+"EG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio4";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"EH" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"EI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"EJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"EK" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/medical/medbay4)
+"EL" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"EM" = (/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"EN" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"EO" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"EP" = (/obj/structure/closet/hydrant{pixel_y = 32},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"EQ" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"ER" = (/turf/simulated/wall/r_wall,/area/medical/medbay4)
+"ES" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"ET" = (/obj/structure/table/glass,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 4;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Break Room Emergency Phone"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"EU" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"EV" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"EW" = (/obj/structure/table/rack,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/obj/machinery/camera/network/medbay{c_tag = "Medical - Secondary Storage"},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"EX" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"EY" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/mob/living/simple_animal/mouse,/turf/simulated/floor/tiled,/area/rnd/storage)
+"EZ" = (/turf/simulated/floor/tiled,/area/rnd/storage)
+"Fa" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Fb" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Fc" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Fd" = (/obj/machinery/atmospherics/unary/vent_pump{icon_state = "map_vent_in";dir = 8;use_power = 1;initialize_directions = 1;pump_direction = 0;external_pressure_bound = 0;internal_pressure_bound = 4000;pressure_checks = 2;external_pressure_bound_default = 0;internal_pressure_bound_default = 4000;pressure_checks_default = 2},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Fe" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Ff" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Fg" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Fh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Fi" = (/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/obj/machinery/computer/telescience,/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Fj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Fk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Fl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Fm" = (/obj/machinery/door/window/southright{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio3";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Fn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio2";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Fo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio2";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Fp" = (/obj/machinery/door/window/southright{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio2";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Fq" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"Fr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio1";name = "Containment Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Fs" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "Medical - Operating Theatre One"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"Ft" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"Fu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio1";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"Fv" = (/obj/machinery/door/window/southright{name = "Containment Pen";req_access = list(47)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "xenobio1";name = "Containment Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Fw" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Fx" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"Fy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Fz" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"FA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"FB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"FC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"FD" = (/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"FE" = (/turf/unsimulated/chasm_mask,/area/crew_quarters/medbreak)
+"FF" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"FG" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"FH" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"FI" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"FJ" = (/obj/machinery/recharge_station,/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medical - Break Room";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"FK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"FL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing)
+"FM" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"FN" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"FO" = (/obj/machinery/door/airlock/glass_medical{name = "Auxiliary Storage";req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"FP" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"FQ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/turf/simulated/mineral/random,/area/mine/unexplored)
+"FR" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"FS" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{icon_state = "intact";dir = 1},/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"FT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"FU" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"FV" = (/obj/structure/bed/chair/comfy/beige,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"FW" = (/obj/structure/table/reinforced,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/machinery/light,/obj/effect/floor_decal/corner/mauve/diagonal,/obj/effect/floor_decal/corner/mauve/diagonal{icon_state = "corner_white_diagonal";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"FX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"FY" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"FZ" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Ga" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/telesci)
+"Gb" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"Gc" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Gd" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Ge" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"Gf" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Gg" = (/obj/machinery/door/airlock/glass_medical{name = "Staff Smoking Lounge";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"Gh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Gi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"Gj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"Gk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/medbay4)
+"Gl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Gm" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/white/diagonal,/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"Gn" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Go" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Gp" = (/obj/machinery/washing_machine,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -27},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Gq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Gr" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Gs" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Gt" = (/obj/structure/closet/crate{icon_state = "crateopen";name = "Grenade Crate";opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/machinery/firealarm{dir = 1;pixel_y = -24},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/medical/medbay4)
+"Gu" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"Gv" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Gw" = (/obj/machinery/atmospherics/binary/pump{dir = 1;name = "CO2 to Connector"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Gx" = (/obj/structure/closet/bombcloset,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Gy" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"Gz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"GA" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"GB" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/medbreak)
+"GC" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
+"GD" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"GE" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
+"GF" = (/turf/simulated/wall,/area/crew_quarters/sleep/medical)
+"GG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"GH" = (/obj/structure/table/glass,/obj/item/weapon/material/ashtray/bronze,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 4;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Break Room Emergency Phone"},/obj/machinery/firealarm{dir = 1;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"GI" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/crew_quarters/medbreak)
+"GJ" = (/obj/machinery/door/airlock/medical{name = "Staff Dormitories";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"GK" = (/obj/structure/closet/l3closet/general,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/turf/simulated/floor/tiled,/area/medical/medbay4)
+"GL" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"GM" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GN" = (/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GO" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GP" = (/obj/machinery/door/airlock/medical{name = "Staff Hygiene Facilities";req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"GQ" = (/obj/structure/table/standard,/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = -5;pixel_y = 5},/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = 5},/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = -5},/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = -5;pixel_y = -5},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"GR" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GS" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GT" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GU" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringegun,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled,/area/medical/medbay4)
+"GV" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GW" = (/obj/machinery/atmospherics/binary/pump{dir = 4;icon_state = "map_off";name = "Mix out"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"GX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/storage)
+"GY" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"GZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Ha" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Hb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Hc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/storage)
+"Hd" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"He" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 1";dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Hf" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 2";dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Hg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Hh" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Hi" = (/obj/machinery/washing_machine,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Hj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Hk" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Xenobiology Cell 3";dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"Hl" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Hm" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/open,/area/mine/explored)
+"Hn" = (/turf/simulated/open,/area/mine/explored)
+"Ho" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"Hp" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"Hq" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";name = "Cubicle 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Hr" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/simulated/floor/plating,/area/rnd/mixing)
+"Hs" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1;frequency = 1441;icon_state = "map_injector";id = "co2_in";use_power = 1;pixel_y = 1},/turf/simulated/floor/airless/ceiling,/area/mine/unexplored)
+"Ht" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing)
+"Hu" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/obj/machinery/meter,/turf/simulated/floor/plating,/area/rnd/mixing)
+"Hv" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing)
+"Hw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Hx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Hy" = (/obj/machinery/button/remote/blast_door{id = "mixvent";name = "Mixing Room Vent Control";pixel_x = 25;pixel_y = 35;req_access = list(7)},/obj/machinery/button/ignition{id = "mixingsparker";pixel_x = 25;pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Hz" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"HA" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/storage)
+"HB" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/storage)
+"HC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"HD" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"HE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/rnd/storage)
+"HF" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HG" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HH" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"HJ" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"HK" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HL" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard";dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HM" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HN" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"HO" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"HP" = (/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"HQ" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"HR" = (/obj/machinery/firealarm{dir = 1;pixel_y = -24},/obj/machinery/camera/network/medbay{c_tag = "Medbay Equipment Storage";dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"HS" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"HT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"HU" = (/obj/machinery/door/blast/regular{id = "mixvent";name = "Mixer Room Vent"},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"HV" = (/obj/structure/closet/secure_closet/personal,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HW" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/turf/simulated/floor/plating,/area/rnd/mixing)
+"HX" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HY" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/machinery/light/small,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"HZ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/machinery/sparker{dir = 2;id = "mixingsparker";pixel_x = 25},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"Ia" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Ib" = (/obj/structure/bed,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/item/weapon/bedsheet/green,/obj/machinery/light/small,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/medical)
+"Ic" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"Id" = (/obj/machinery/door/airlock/medical{name = "Showers";req_access = newlist()},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Ie" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"If" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";name = "Cubicle 2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Ig" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1441;icon_state = "map_injector";id = "waste_in";use_power = 1},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"Ih" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Ii" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"Ij" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"Ik" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/rnd/mixing)
+"Il" = (/obj/structure/dispenser,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Im" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Mixing Aft";dir = 8},/obj/structure/sign/nosmoking_1{pixel_x = 32;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"In" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Io" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medbreak)
+"Ip" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 9},/obj/machinery/sparker{dir = 2;id = "mixingsparker";pixel_x = 25},/turf/simulated/floor/reinforced/airless,/area/rnd/mixing)
+"Iq" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Ir" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"Is" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/mixing)
+"It" = (/obj/structure/table/standard,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Iu" = (/obj/structure/table/standard,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Iv" = (/obj/structure/table/standard,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/item/device/transfer_valve,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Iw" = (/obj/machinery/vending/phoronresearch,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Ix" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Observation"},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Iy" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Iz" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced,/turf/simulated/floor/plating,/area/rnd/mixing)
+"IA" = (/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/rnd/mixing)
+"IB" = (/obj/structure/table/standard,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IC" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"ID" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "toxinsairlock_airlock";name = "exterior access button";pixel_x = 25;pixel_y = -25;req_one_access = list(13,65)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"IE" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"IF" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "toxinsairlock_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "toxinsrec_airlock";pixel_x = 0;pixel_y = -35;tag_airpump = "toxinsairlock_pump";tag_chamber_sensor = "toxinsairlock_sensor";tag_exterior_door = "toxinsairlock_outer";tag_interior_door = "toxinsairlock_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "toxinsairlock_sensor";pixel_x = 0;pixel_y = -25},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/rnd/mixing)
+"IG" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "toxinsairlock_outer";locked = 1;name = "Toxins External Access";req_access = list(10,13)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/rnd/mixing)
+"IH" = (/obj/item/target,/obj/item/target,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/syndicate,/obj/item/target/syndicate,/obj/structure/closet/crate{name = "Target Crate"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"II" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IJ" = (/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IL" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "toxinsairlock_inner";locked = 1;name = "Toxins External Access"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/rnd/mixing)
+"IM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IN" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IO" = (/obj/machinery/door/window/southright{dir = 8;name = "Toxins Launcher";req_access = list(8)},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/rnd/mixing)
+"IP" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IS" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"IT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"IU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IW" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Storage";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"IY" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"IZ" = (/obj/machinery/door/airlock/research{name = "Toxins Launch Room";req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Ja" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jb" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jc" = (/obj/structure/closet/bombcloset,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jd" = (/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Je" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "toxinsairlock_airlock";name = "interior access button";pixel_x = 0;pixel_y = -25;req_one_access = list(13,65)},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jf" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jg" = (/obj/structure/table/standard,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jh" = (/obj/structure/closet/bombcloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Ji" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jj" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jk" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/asteroid,/area/rnd/mixing)
+"Jl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/mixing)
+"Jm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/mixing)
+"Jn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/mixing)
+"Jo" = (/obj/structure/bed/chair,/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber.";layer = 4;name = "Test Chamber Telescreen";network = list("Toxins Test Area");pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jp" = (/obj/structure/bed/chair,/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber.";layer = 4;name = "Test Chamber Telescreen";network = list("Toxins Test Area");pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/button/remote/driver{id = "toxins_mass_driver";name = "Mass Driver button";pixel_x = 26;req_access = list(7)},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"Jq" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/mineral/random,/area/mine/unexplored)
+"Jr" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/asteroid,/area/rnd/mixing)
+"Js" = (/obj/structure/sign/securearea{name = "\improper CAUTION: BOMB RANGE"},/turf/simulated/wall/r_wall,/area/rnd/mixing)
+"Jt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Ju" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing)
+"Jv" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 1},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing)
+"Jw" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/mineral/random,/area/mine/unexplored)
+"Jx" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing)
+"Jy" = (/obj/machinery/light/small,/turf/simulated/floor/asteroid,/area/rnd/mixing)
+"Jz" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"JA" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"JB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"JC" = (/turf/simulated/wall/r_wall,/area/rnd/test_area)
+"JD" = (/obj/structure/disposalpipe/segment,/turf/simulated/mineral/random,/area/mine/unexplored)
+"JE" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing)
+"JF" = (/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
+"JG" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"JH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/mass_driver{id = "toxins_mass_driver"},/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/mixing)
+"JI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "BOMB RANGE";pixel_x = 32;pixel_y = 0},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"JJ" = (/obj/structure/sign/securearea{name = "\improper CAUTION: BOMB RANGE"},/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"JK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"JL" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 8},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"JM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "KEEP CLEAR: MEDICAL EXOSUIT PARKING";pixel_y = -32},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"JN" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/test_area)
+"JO" = (/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/rnd/test_area)
+"JP" = (/obj/structure/window/reinforced{dir = 5;health = 1e+007},/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
+"JQ" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Port";dir = 4},/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
+"JR" = (/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
+"JS" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Starboard";dir = 8},/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
+"JT" = (/obj/machinery/light/spot,/obj/machinery/camera/network/research_outpost{c_tag = "Research Sublevel - Toxins Testing Aft";dir = 1},/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
+"JU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/turret_protected/ai_upload_foyer)
+"JV" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"JW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled,/area/crew_quarters/medbreak)
+"JX" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"JY" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"JZ" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ka" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kb" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ke" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kf" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kg" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ki" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kl" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Km" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kn" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ko" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kr" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ks" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ku" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 1},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Ky" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
+"Kz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"KA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 4},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"KB" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"KC" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KD" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KE" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"KF" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"KG" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KH" = (/obj/turbolift_map_holder/aurora/vault,/turf/simulated/floor/tiled,/area/turbolift/vault_sub)
+"KI" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"KK" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"KL" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KM" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KN" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KO" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"KP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KQ" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KR" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KS" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"KT" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KU" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KV" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"KW" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KX" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"KY" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"KZ" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"La" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lb" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Lc" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Ld" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Le" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Lf" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Lg" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Lh" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Li" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Lj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Lk" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Ll" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lm" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Ln" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lo" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lp" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lq" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lr" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"Ls" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"Lu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "plating"},/area/bridge/aibunker)
+"Lv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"Lw" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"Lx" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"Ly" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"Lz" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LA" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LB" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LC" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LD" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LE" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LF" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LG" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LH" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LI" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LJ" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LK" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LL" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LM" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LN" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LO" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LP" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LQ" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LR" = (/obj/turbolift_map_holder/aurora/aiaccess,/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LS" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LT" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LU" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LV" = (/turf/simulated/floor/tiled,/area/turbolift/ai_sub)
+"LW" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"LX" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"LY" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"LZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Ma" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/mine/unexplored)
+"Mb" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/mine/unexplored)
+"Mc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/mine/unexplored)
+"Md" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Me" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Mf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Mg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Mh" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Mi" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mj" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Mk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Ml" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mm" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/newscaster{pixel_x = 30;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"Mo" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mp" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mq" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mr" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/obj/machinery/firealarm{dir = 1;pixel_y = -24},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Ms" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mt" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mu" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mv" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Mw" = (/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6)},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/morgue)
+"Mx" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway)
+"My" = (/turf/simulated/floor/tiled,/area/turbolift/research_maintenance)
+"Mz" = (/obj/turbolift_map_holder/aurora/research,/turf/simulated/floor/tiled,/area/turbolift/research_maintenance)
+"MA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"MB" = (/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"MC" = (/turf/simulated/floor{icon_state = "plating"},/area/turret_protected/ai_upload_foyer)
+"MD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ME" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"MF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"MG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"MH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"MI" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"MJ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"MK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"ML" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"MM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"MO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MP" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"MQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"MV" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored)
+"MW" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored)
+"MX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored)
+"MY" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/unexplored)
+"MZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Na" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Nb" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Nc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Nd" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Ne" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Nf" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Ng" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Nh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Ni" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology)
+"Nj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/virology)
+"Nk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"Nl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Nm" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Nn" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/door/firedoor,/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"No" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Np" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Nq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"Nr" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Ns" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/sublevel)
+"Nt" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/patient_wing)
+"Nu" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/patient_wing)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadleleadleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaafleleadleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagJXahajajajajajajamajajanajajaoaeaqapaearararararasararararararleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagatJYagagavagagatagJYavawaeaxagJYaeayKbaeazaAaBaCaDaEaFaGaHaIaJarleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagaKaLagagaMagagaKagaLaMaNaeaeaeaOaeaQauaeaRaSaTaUaTaTaVaWaXaYaZarleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebbbabdbcKcbfbgKcKebgbibfbjbkagblbmbnJYauaebobpbpbqbrbsbtbuaXbvbwararararararleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebxagbybzagagbzagagbzbyagbAbBagaMbCajbDKgaebEbFbGbHbIaTbtbJaXbKbLarbMbNbObParlelelebQleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRagbSbTbTbTbTbTbTbTbSagKhKiKjKkbUKjbVcUaebWbYbXbZbIaTcacbaXbKccarcdceaFaFarleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfcgagagagagchagagcgcicjckbeclcmaicncoaecpcqbrcrcsctcucvcvcwcxarcyczcAcBarleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecCcfagagagagagagagagagcicDbBaeaecFcEaeaeaecGcHaTcJcIcKaFcLcMcNcOaFcycPbNcBarleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecRcQagagagagagagagagagcibAbBJXajbDcTcWcVcXcYcZdadbdcdaddddddddddaFaFdeaFaFarcYcYcYcYcYcYleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfcgagagagagagagagagdfdgbBdhdiagdjagaudmdldndodpdndndqdndrdndsdtdndudndndqdndvdwdxdycYcYcYcYleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfagagagagagagagagagdzdAbBdBdidididicTdDdCdCdCdFdEdEdGdEdHdEdIdJdEdKdEdEdGdEdLdEdMdNdOdQdPdRleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedScQagagagagagagagagcgdTdUbBdVdiagagagagcXdWdYdXdZdndndqdndndndneadndndndndqdndndnebecdOeeeddRleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeefcfagagagagagagagagagcibAbBKnegehKocoagdmcYcYcYejeicYcYcYcYcYcYcYcYcYcYcYcYcYcYdoekelcYcYcYcYemleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeencQagagagagagagagagagcicDbBaeaeeoepaeaeaeeqesereteseseuevaaaalelelelelelelelecYdqewdqcYleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRcfcgagagcgagagagagcgcibAbBagagaKKpeyagaeezeseAeBeseCeCevaalelelelelelelelelecYdnebeDcYleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRageEeFeFeFeFeFeFeFeEagcjckbebebhKqbeeHeJeIeIeKeMeLeCeCevlelelelelelelelelelecYeNeOePcYeQeQeQeQeQeQeQeQeQeQeQeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebxagbyageSageSagageSbyagbAbBagagagJYagaMaeeTeVeUeWeLeCeCevlelelelelelelelelelecYeYeXfaeZfbfbfbfbfbKzfbfbfbfbfceQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefffebdfeKsfgKtKuKvKwbiKxfifhagagagJYagaMaefkfmfleLeLeCeCevlelelelelelelelelecYcYcYcYcYcYcYcYeQeQeQeQeQeQeQeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagfpagagaKagaMagagfpaKaNaeaeaeaefqagfraeevevevevevevevevlelelelelelelelelecYfsfsfsfsfsfscYleleleleaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagJYagagfxagfragagJYfxagaeaxfyaeaQagawaeaaaaaaaaaaaaaaaaaalelelelelelelelecYfsfsfsfsfsfscYleleleleaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeagagKnfCajajfFfEajajfGajajanajajanbDagagaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfsfsfsfsfsfscYleleaaaaaaaaaaeQKAeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfsfsfsfsfsfscYleleaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdlelelelefdfdfdfdfdfdaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeReReReReReReReReReReReRfdfdfJfJfJfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRaaeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYfKfsfsfsfsfscYleleaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdlelelelelelelelefdfdfdfdaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeReReReReReReReReReReReRfdfJfJfJfJfJfJfJfdfdfdfdfJfJfJfJfdfNfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYcYcYcYcYcYcYcYleleaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdlelelelelelelelelelefdfdfdaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeReRfdfdfdfdfdfdfdfdfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReRfQfQfQeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRnLnLnLnLnLnLeQeQeQeQeQeQeQeQeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdleleleabeRabeRablelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdeReReReReRfdfdlelelefdfdfdfJfJfJfJfJfSfTfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRKBnLnLnLnLnLnLnLnLnLnLnLnLnLnLfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdleleKCgagagagagaKDlelelefdfdaaaaaaaaaaeRfdfdfdfdfdeReReReReRfdlelelelelefdfdfJfJfJgbgchQgBgffJfJfJfJfJfJghgggiggfJfJgjfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReRfQfQfQeReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRnLnLnLnLnLnLKEnLnLnLnLnLnLnLKEfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdleleeRgagagagagaeRlelelefdfdaaaaaaaaaaeRfdfdfdfdfdeReRfdfdfdgrgqgsgqgtgugugvgvgvgvgwgxgBgygBgBgzgBgAgDgCgFgEgHgGgJgIgKfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRgLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReQeQeQeQeQeQeQeQeQeQeQeQeQeQeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdfdfdleleKCgagagagagaKDlelebQfdfdaaaaaaaaaaeRfdfdfdfdfdeReRfdfdlegWgXgYgZhagXhbhchehdgvhfhggBgBgBgBhhgBhihkhjhlfJhmfJfJfJhnfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRaaeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdleleleeRgagagagagaeRlelefdfdfdfdaaaaaaaaeRfdfdfdfdfdeReRfdlelehvhuhxhwhzhyhBhAhDhChEhFhGgBgBhHhJhIhLhKhNhMfJhOhPfJhRhQhSfJfJfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdleleleKCKHgagagagaKDlelefdfdfdfdaaaaaaaaeRfdfdfdfdfdeReRfdlelehZiaibicidiehZifigihgviiijikimilioiniqipisiriuitiwiviyixiAiziBfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdfdfdfdleleleKCKJfRgOfRKKKDlelefdfdfdaaaaaaaaaaeRfdfdfdfdfdeReRfdfdfdgvgvgviEgvgvgviFiGiHiJiIiIiIiLiKiNiMiPiOiRiQhOiSiTfJiViUiWfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdeRfdfdfdfdfdfdfdfdeRfdleleleKMKNKOKPKQlelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdeRiYiYiYiYgviZjajbjciZgvjdjehdgvjfhQgBgBgBgBjggBjhjjjijkfJjlfJfJfJjmfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQeQeQeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaaaleleleleleleleleaaaaaaaaaaaaaaaaaaleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdeRfPfPfPfPfPfPfPfPfPfPeRleleleleKRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYjrjqgvjsjtjujtjvgvjwjxJUgvjzjAhQgyhQgBjBgBjCjEjDjGjFjIjHjKjJjLfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQjMjNeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQfoeQaaaaaaaaleleleleleleleleleleleleleaaaaaaleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPfPfPfPfPfPfPfPfdleleleleKRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYjPjOjRjQjTjSjTjQjVjUjWjygvjXjYhQgBgefJfJfJfJfJfJghjZggggfJfJkafJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQkbkceQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQkdeQeQeQeQkekflelelelelelelelelelelelelelelelelelelekekgkfleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPfVfWfXfYKXfPfPleleleleleKRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYkhkigvjsjtkjjtjsgvgveRfJfJfJfJkkklfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJiXfJfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQkmkoknkokokokokokokokokokokokokokokokokokokokokokokokokqkpkskrkuktkwkvkxkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkzkykAleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPgkglgmgmgmLbfPfPabababababeRKOKDlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYiYiYgvkCkBkEkFkCgvgveRfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJfJjnjpfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQkGkGeQeQeQeQeQkDkHlelelelelelelelelelelelelelelelelelelekJkIkHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPgMgNgOgOgPgRgQgTgSLeLeLeLeLeLjeRlelelelefdfdfdaaaaaaaaaaeRfdfdfdfdfdfdiYiYiYiYgvgvgvkKgvgvgvgvfdfdfdeRfJfJfJfJfJfJfJfJfJfJfJfJfJfJjnjojojpfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRaaaaaaaalelelelebQleleleleleleleleaaaaaaaalelelelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPhohphqhqhqLkfPfPLlKMKMKMKMKMeRlelelelelelefdfdaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdeRgvgvgvkMgvgvgvgvfdfdfdfdfdfJfJfdfdjnjojojojojojojojojpfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleaaaaaaaaaaaaaaaaaaaaaaaalelelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPhThUhVhWKXfPfPLslelelelelelelelelelelelefdfdaaaaaaaaaaeRfdfdfdfdfdfdfdfdeRleleleKRkPkNleleleeRfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfPfPfPfPfPfPfPfPfPfPiClelelelelelelelelelelelelefdfdaaaaaaaaeRfdfdfdfdfdfdfdfdkRleleleKRkSMAabababkRfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdeRfPfPfPfPfPfPfPfPfPfPiClelelelelelelelelelelelelefdfdaaaaaaaaeRfdfdfdfdfdfdfdleleleleabLtkQkVkVLukXKDfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdeRfdfdfdfdfdjnjojojojplelelelelelelelelelelefdfdfdfdaaaaaaaaeRfdfdfdfdfdfdfdleleleKRLvkYMBMCLwMDlaKDfdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdiCfdfdfdfdlelelelelelelelelefdfdfdfdfdaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleKRLxLxLxLxLxMElaKDlefdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalblblblbaaaaaaaaaaaaaaaaaaaaaaaaaaaalekLleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdfdiCfdfdfdfdlelelelelelelefdfdfdfdfdfdaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleeRLxLxLxLxLxeRlaKDlefdfdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalblblcldlbaaaaaaaaaaaaaaaaaaaaaaaaaalelekLleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdfdfdfdfdiCfdfdfdfdfdfdfdlelelelefdfdfdaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleKRLxLxLxLxLxMFlaKDlelefdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoOleleleleleleleleaaaaaaaaaaaaaaleleleaaaaaaaaaaaaaalbkUlhlglbaaaaaaaaaaaaaaaaaaaaaaaalelelekLleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaaalelelelelelelelefdfdfdfdfdfdiCfdfdfdfdfdfdfdlefdfdfdfdfdfdaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdleleleeRLxLxLxLxLxeRlaKDlelefdfdfdfdfdfdiCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPleleleleleleleleleaaaaaaaaaaleleleleleaaaaaaaaaaaalblilllklbaaaaaaaaaaaaaaaaaaaaaalelelelekLleleleleleleaaaaaaaaaalelelelelelelelelelelelelelelelelelelelelelelelelefdiCfdfdfdfdfdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdleleleKRLRLxLxLxLxMGlaKDlnlnlnlnlnlnlnlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPleleleleleleleleleleaaaaaalelololololololololololololilmlplbaaaaaaaaaaaaaaaaaaaaaalelelelekLlelebQleleleleleleleleleleleleleleleleaaleleleleleleleleleleleleleleleleleLslefdfdfdfdfdfdfdfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdleleleKMeRKMeRKMKRlaMHlnlrlsltlulvlwlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelxlelelelelelelelelelelqlzlAlylolClDlBlFlElGlolilIlHlbaaaaaaaaaaaaaaaaaaaaaalelelekelJkflelelelelelelelelelelelelelelelelekekflelelelelelelelelelelelelelelelekelKlLeQeQeQeQeQeQeQfdaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdlNleleleleleleleKRlMlPlOlRlRlSlululQlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalUlVlelWlUlYlelelelelelelelelelTmamblZlomcmemdmgmhmflolblbmilbmkmkmkmkmkmkaaaaaaaaaalelelemlmjmnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmomnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmompoHmqmsmrmumtmxeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdeRlelefdlelelebQleKQeRlnlulumylumzmAlniCfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalUlelelelUlYlelelelelelelelelelTmambmvlomwmDmBmFmCmElomHmGmJmImKmkmNmOmLmkaaaaaaaaaaaalelekJkIkHlelelelelelelelelelelelelelelelelekJkHlelelelelelelelelelelelelelelelekJMIkHeQeQeQeQmMmxeQeQeQeQeQeQeQeQeQeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdlelelefdfdlnmRmSmQmPmUmTmVjpfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelemYmZlelelelelelelelelelTnanbncmXmWnendnfnfnfngninhnknjnmnlnnnqnomkaaaaaaaaaaaalelelekLleleleleleleaaaaaaaaaaleaaaaaaaaleleleleleleleaaaaaaaaaaleleleleleleleleleMJleaaaaaaeQkmnpMKnpnpnpnpnpnpnpfceQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdlefdfdfdlnlnlnnrlnlnlnlnfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaalelelelelelelelelelelelelelelensnvnwnxlontnznAnBnCnulonDnynEnHnFmknGnqnKmkaaaaaaaaaaaaaalelekLleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleMLleleaaaaeQnLnLMMeQeQeQeQeQeQeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaalUlVlelelelelelelelelelelelelelololololonMlolololonNlonQnPnRnHnSnVnVnVnVnVnVaaaaaaaaaaaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdfdfdnWnWnWnWnWaaaaaaaaaaaaaaleMNleleeQeQeQnTeQMOeQaaaaaaaaaaeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaalUlelelelelelelelelelelelelelelenUnYnXoanZoanXobnXoanXoanXocnHnFnVodogohoinVaaaaaaaaaaaalelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdeRfdfdnWojoeojnWaaaaaaaaaaaaaaleMPleleeQolokofeQMQeQaaaaaaaaaaeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaooopoqleleleleleleleleleleleleomoronotosototovouotowotoxosotozoyoBoAoEoCnVaaaaaaaaaaaalelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdadadlefdnWoGoGoGnWnWnWaaaaaaaaaakeoDoIoFoKoJoMoLeQMReQaaaaaaaaaaeQnIeQaaaaaaaaaaaaeRfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeQnJeQfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaoOaaleleoPoPleleleleleleleomoQoNoSoRoToRoVoUoToWoToXoToRoYnVoZpbpbpanVaaaaaaaaaaaalelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdeRpdpepfeRnWpcoGphpipgnWaaaaaaaalekJCnkHleeQeQeQpjeQMSeQeQaaaaaaaaeQnIeQaaaaaaaaaaaaeReReReReReReReReReReReReReReReReReReReReReReQpkeQeReReReReReReReReReReReReReReReReReReReReReReRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleomoroNplpopnpmpopppopqprprprprpmpoptpspwoinVaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfdadpxadfdnWpuoGpvpApynWaaaaaalelelepCpCpCpCpDpzpEMTMUpFeQaaaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleomoQoNnFpopIpJpKpGpHpNpOpPpPpPpPponVnVnVnVnVaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdeRpQeRfdnWpRpSpToGpgnWaaaaeRMVMWMXMYpLeReReReQeQeQeQLZMZleaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelepUpMpVlelepWoroNplpopXpYpZqapPpNqbqcpPpPpPpoaaaaaaaaaaaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWnWqdnWnWnWnWnWqenWnWnWnWnWnWgoMaMbMaqfeRqgqgqgqgqgeQLZeQleaaaaaaeQnIeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQnIeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleqkqlqmqlqkleqnoQoNqopoqpqqqsqrqtquqvqwqxqyqzpoaaaaaaaaaaaaaaaaaaaalelelekLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWqBqAqDqCqFqEqHqGqInWqJqKqLnWqNtzNatztznWqgqgqgqgqgeQLZNbleleaaaaeQqUfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbqVeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleqkqXqWqYqkleqnorqZraporbrcrdreqtrfrgqprhrirjpoaaaaaaaaaaaaaaaaaaaalelelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWrlrkrmrnrprorqrrrtrsrvrurxrwrzryNcNdtznWqgqgqgqgqgeQLZeQleleaaaaeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQeQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaalelerErDrFqkrGrHrIqkleqnoQoNnFporJrKrLpGrNrMpPpPrOpPpPpoaaaaeQeQeQeQeQaaaaaaaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWrPrQrRrSrTrUrWrVrXnWrZrYsanWscsbNeNfNgnWqgqgqgqgqgeQLZNhleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaleleqkqkqkqksfsgqlqkqkqnoroNplposhqssisjrKskrKrKrKslpPpoaaaaeQsmsnsoeQaaaaaaaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWnWsqspsrsqnWnWsqssnWnWnWnWnWnWNiNjMhNkMjnWstqgqgqgqgeQLZeQleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaleqksxsyszsAsBsDsCsFsEsHsGnFposJsIrNsKsMsLrNsNsOsPpPpoaaaaeQoLsRsQeQeReReRaalelekLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanWsSsTsUsVsWsYsXsZsUtasXleleaaleleuDMlvrMmwlwlwlwlwleQeQLZNlleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqktdtesztftgthtiqkqkoroNnStjtktltmtjtntotptqtrtstteQeQeQeQtueQtveQtwtweQeQeQeQtxleleaaaaaaaaaaaaaaaaaaaaaaaanWnWnWnWnWtytztAsVtBtDtCtEtAtFtCleleleleleuDMovrMpNmNntHtJtItLtKtMeQleleleleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaqktNtOtPtRtQtTtStUqkoQoNnFtjtVtWtXtjtYtZuatqubucudeQufueueuguhuiukujumuluounuqupleleaaaaaaaaaaaaaaaaaaaaaalesXurtzusutuuuvuwsVuxuzuyuAuBuCuyleleleleleuDMlNoNpySNqySuGuFeQNrNseQleleuIuIuIuIuIuJuJuJuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaqkuKuLuMuNuOuPuQuRqkuTuSpltjuUuVuWtjuXuYuZtqvavbvceQvdeQeQeQeQeQeQeQeQeQeQeQeQveleleaaaaaaaaaaaaaaaaaaaaleletCvftzvgvhvivivjvkvlvmnWnWvnvonWaaleleleleNtMrMstGtGvpMvvruFNuleleleleleuIvtvvvuvwvxvzvyuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleaaaaaaaaaaaaqkvAvBvCsAvDvEvFvGqkvHvIoYtjvJvKvLtjvMvNvOtqvPvQvReQvdeQvSvTvSvUaaaaaaaaaaaaaaaaleleaaaaaaaaaaaaaaaaaaaaleleuyvVvWvXutvYvZwawbwcwdsXwfwewgnWaaoOwhwhwhwhwhwhMwwhwhwiwkwjvsleleleleleuIwmwnwovwwpwqwruJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaqkqkqkwswtqkqkqkqkqnqnwuqnqnqneQeQeQeQeQeQeQeQeQeQeQvdeQwvwwwxvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelewywywywywytzwzsVwBwAwAwCwEwDwFnWnWnWwHwGwGwIwHwGwGwJwhwKwNwLwlaaaaleleleuIwMwQwOvwwPwSwRuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelelelelelelelelelelelelenUwTnXnXnXwUwVnXnXwWwXnZnXwYqneQeQeQeQufueueueueueuewZeQwwwwwwvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelesXurtzusuttzwzxaxexbxcxdtzxfxhxgxjnWxkwGwGwIwHwGwGxlwhxmvrxqwlwlwlxnxoxpuIxrxtxsvwxuxvxuuJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleomornHonoxovotxwxyxxxyxzxAplqneQeQeQeQvdeQeQeQeQeQeQeQeQxBvUvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleletCxCtzvgxEvixDxHtCxFtzxGxKxIxJtzxLnWwHwGwGxNxMwGwGxQwhvqvruFxOJVxUxPxRxSxTxVxZxWxXxVyaxVxYleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelelelelebQleleleleleleomornHyboXycoRoRoRoRMxyeygyfyhueueueyiwZeQvUykyjylvUynymywyoyxypypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleuyvVvWvXuttzyqyrtCystzxGytyuxGtzyvnWwHwGwGyzyyyyyyyAyCyByEyDyGyFyIyHyKyJyMyLyOyNySyPyVBSyQleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaleleleleleleleleomuTyRyWqnqnqnqnqnqnqnoroNplqneQeQeQeQeQeQvUyYyXzavUzbyZzdzczhypypzivUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelewywywywywytzzetzuyzftztztzzgtztzzjnWwHwGwGzlwHwGwGznwhzkzpzmzmzmzuzozmzmzmzxzqzrzsztzyzvwlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaaaaaleleleleleleleomzwzBzzqnMyMyMyMyMyqnzCoNnSqneQzAvUvUvUvUvUzEzDzFvUzbyZzdzKzOzGzHzIvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelesXurtzusutvYzJzPnWnWzLzMzNzQzLzMnWnWwHwGwGwIwHwGwGwIwhzRzSzmzUzTzXzVzYzUzmzWAcAazZAdAbAfxYleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleaaaalelelelelelelepWAgAeAhqnMyMyMyMyMyqnorAjAivUvUvUvUvUAkAmAlymymymAoApyZzdAnvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleletCAqtzvgxEviAtAsArsXAvAutzAwAyAxnWwhxkwGwGwIwHwGwGAzwhABzSzmADAAAGACAAALzmAEAFAMAHAIAJAKuHleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleaaaaleleleleleleaaqnANARAOqnMyMyMyMyMyqnoroNplvUASAPAQvUATyZyZyZyZyZyZyZyZAVAUAYypypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleuyvVvWvXuttzAZAWAXuyBcBatztzBdBbnWwhwHwGwGwIwHwGwGwIwhBeBgzmBhBfAGACBfBjzmBkBiBlBpBozsBmuHleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleaaleleleleleleleleleleleaaaaqnorBnBqqnMyMyMyMyMyqnorBrozBtBsBvBuBzByBwBwBxBDBEBABBBCBGzcBJypBFBKvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelenWnWnWnWnWtzBHAWBInWnWBLwAwABNnWnWwhwhwhwhwhwhwhwhwhwhABBPzmBMBMBQBOBMBMzmBRBUBTBXBVzsAfyQleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaqnBYyRBZqnMzMyMyMyMyqnBWCcCbvUCeCaCfvUCiyZyZCdCkClCgChyZzdzKCmzGzHzIvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelelenWBLwAwABNnWleleleleleleaaaaaaCjCpCoCqCjCjFECjABCrzmCwCsCyACCsCzCtwlwlwlCuwlwlwlwlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaaaaaaaaaaaaaaaqnCvoRCBqnqnqnqnqnqnqnCxCCCxvUvUvUvUvUCDyZyZCdCACECgChyZzdCFvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleaaaaaaaaCjCHCGCNCMCjCjCjCPzSzmADAACyCIAAALCtaaaaaaCJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaCKCKCKCKCKCKCKCKCKCKCLCLCQCLCRCLCLCLCOCOCOCTCSCVCUCXCWvUCZDgDayZyZyZyZyZyZCYyZzdDkDmypypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleaaaaaaleDbDcDdDeDfDnDhDiDjDozmDlDrDADwBfDlCtaaeRadDpadeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleaaCKDqDCDsDtCKDuDvDECKDxDxDyDzDFDBDBCLDGDDCODKDIDLDHDHDMvUDJDNDNDNDNDNDNDNDNDNDNDSzcDTypypDUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleleleleleleleDODPDQDRDVDXDWEjEeEkzmzmzmzmzmzmzmCtleleleleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaCKDYDZEaEbEcEdElEfCKDxEgEhEiEmDBEnCLEoCOCOCTDIEqEpEsErvUEtEvEuAnEwEvExEyEwEvEEyZEFEGzGzHzIvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelebQleleleleEzEAEAEBCjECEDETENDeEUEHEIEJEKELEMEWEOEPEQERaaleadleleadleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCKESEXFaEVEcEdFdEfCKFeDxEYEZFfFbFcCLCxCxCxCxFhFjFiFgDMvUFkFmFlvUFnFpFovUFrFvFuvUvUvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleFqFzFsFtCjFJEDDeFKFwDcFxEIFyFOFAFBFCFDFDEQERaaeRleadleeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFQFFFGFHFIFRCKFSFLFSCKFMDxDyEZDFFNFTCLaaaaaaCxFPFYFWGaFZvUFUypypvUFUypypvUFUypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleFqFVGbFXGgGlGhJWGmGcGdGeGfGpEKGtGiGjGkFDGuERaaaaaaadleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJqCKGnDqGoGvGqGrGsGwCKGxGEGCEZGGGyGzCLaaaaaaCxCxCxCxCxCxvUGAypypvUGABFypvUGAypypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleGBGHGDGIGFGJGFCjGPCjCjCjCjCjCjCjGQGUGKGKzkERaaaaaaeRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReRGLCKGMGNGOGVGWGRGSGTCKEZGZGXHcHbGYHdCLaaaaaaaaaaaaaaaaaavUHaHeypvUHaHfypvUHaHkypvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleGFGFGFGFGFHpHoCjHgHhHiHhHjHqHlCjERERERERERERaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQHsHrHuHtHuHvHxHwHCHyHDHcHEHzHAHBGYGYCLaaaaaaaaaaaaaaaaaavUvUvUvUvUvUvUvUvUvUvUvUvUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGFHGHFHKHHHMHLCjHIHJHNHRHQCjCjCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfQfQfQfQHUHOHPHZHWHSHTIaGSCKCLCLCLCLCLCLCLCLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGFHVIbHVIbHXHYCjIdCjCjCjHJIfHlCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQfQHUHOIgIcIkIeEVInImCKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGFGFGFGFGFGFGFCjHJIhHJCjCjCjCjCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfQfQfQfQHUIiIjIpHWIlGNIrIqCKCKCKCKCKCKCKCKCKCKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCjIoIoIoCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeRfUfQfQfQIsHtHtHtIzCKCKIACKCKIBItIuIvIwIxIyICCKCKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCjCjCjCjCjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeReReReReReRleleleleCKIIIMIHCKINIJIJIKIJIJIJIPIOISaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleCKCKCKIWIQIRIZIXIUIVJaIJIJIJJdCKIYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleIEIDIGIFILJeJfJbCKJcJhJgJjJiJoJoJpCKJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleeRJkITleCKCKCKCKCKCKCKCKCKCKCKCKJlJmJnCKJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleITleaaaaCKleleleCKaaaaleJsleleKRJvJuJwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleITleleleJrleleleJrleleleJrleleKRJxJtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleJAJzJzJzJzJzJzJzJzJzJzJzJzJzJzJBJEKDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalelelelebQleleleJyleleleJyleleleJyleleKRJHJGleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleJIJJaaaaleeRaaleleJJaaleleJKleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleleleleleleleaaaaaaaaaaaaaaaaleleleJLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleaaaaaaaaaaaaaaaaaaaaleleleJLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleleleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleleJLleaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaleJKJMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJNJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJOJOJOJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJOJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJFJFJFJFJFJFJFJFJFJFJFJFJFJFJFJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJPJQJFJFJFJFJFJRJFJFJFJFJFJSJPJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJFJFJFJFJFJFJFJPJFJFJFJFJFJFJFJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJFJFJFJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJFJTJFJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJFJPJFJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJCJCJCJCJCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-3.dmm b/maps/Aurora-MapDev/aurora-3.dmm
new file mode 100644
index 00000000000..76b4d9783cb
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-3.dmm
@@ -0,0 +1,5987 @@
+"aaa" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored)
+"aab" = (/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aac" = (/turf/simulated/wall,/area/maintenance/security_starboard)
+"aad" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aae" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaf" = (/obj/item/weapon/shovel{pixel_x = 8},/obj/item/weapon/shovel{pixel_x = -8},/obj/item/weapon/shovel,/obj/structure/table/rack,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aag" = (/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aah" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aai" = (/turf/simulated/floor/asteroid,/area/maintenance/security_starboard)
+"aaj" = (/obj/effect/decal/cleanable/generic,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aak" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aal" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aam" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aan" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "rich_command_airlock";name = "exterior access button";pixel_x = -25;pixel_y = -25;req_one_access = list(13,65)},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aao" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aap" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaq" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "rich_command_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aar" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aas" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aat" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aau" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aav" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "rich_command_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "rich_command_pump";tag_chamber_sensor = "rich_command_sensor";tag_exterior_door = "rich_command_outer";tag_interior_door = "rich_command_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "rich_command_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "rich_command_pump"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aax" = (/obj/structure/lattice,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aay" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaz" = (/obj/machinery/light/small/emergency{dir = 1},/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaA" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaB" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaC" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "rich_command_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaD" = (/obj/machinery/door/airlock/maintenance{name = "Armoury Access Lift";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaE" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aaF" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_chapel_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25;req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaH" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaK" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaM" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaN" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaO" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"aaP" = (/turf/simulated/mineral/random,/area/mine/unexplored)
+"aaQ" = (/turf/simulated/wall,/area/mine/unexplored)
+"aaR" = (/turf/simulated/floor/airless,/area/mine/unexplored)
+"aaS" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aaT" = (/turf/simulated/wall,/area/security/vacantoffice2)
+"aaU" = (/turf/simulated/wall,/area/security/brig)
+"aaV" = (/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
+"aaW" = (/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
+"aaX" = (/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos)
+"aaY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored)
+"aaZ" = (/obj/structure/bed/chair,/obj/item/weapon/handcuffs,/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/airless,/area/mine/unexplored)
+"aba" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abb" = (/obj/structure/table/standard,/obj/item/weapon/scalpel{desc = "Cut, cut, and once more cut. This one looks a little rusty. Perhaps its best not to cut yourself with this!";name = "rusty scalpel"},/obj/item/weapon/retractor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/airless,/area/mine/unexplored)
+"abc" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abf" = (/obj/structure/flora/pottedplant/random,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_y = 30},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"abi" = (/obj/structure/flora/pottedplant/random,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abj" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"abk" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abl" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"abm" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abo" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abp" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abq" = (/obj/effect/landmark{name = "carpspawn"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"abr" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
+"abs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
+"abt" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos)
+"abu" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abv" = (/obj/random/junk,/turf/simulated/floor/airless,/area/mine/unexplored)
+"abw" = (/obj/effect/decal/cleanable/vomit,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored)
+"abx" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/syringe,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored)
+"aby" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"abz" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"abB" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abC" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/landmark/start{name = "Internal Affairs Agent"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abD" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abE" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/landmark/start{name = "Security Cadet"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abF" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abG" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abH" = (/obj/machinery/door/airlock/glass_security{name = "Briefing Room";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abI" = (/turf/simulated/floor/tiled,/area/security/brig)
+"abJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"abK" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"abL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abM" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abN" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abO" = (/turf/simulated/wall,/area/maintenance/substation/security)
+"abP" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"abQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"abS" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{frequency = 1441;id_tag = "air_out"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
+"abT" = (/obj/machinery/atmospherics/unary/outlet_injector{frequency = 1441;id = "air_in"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
+"abU" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "air_sensor";output = 7},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos)
+"abV" = (/obj/machinery/atmospherics/unary/outlet_injector{frequency = 1441;id = "o2_in"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
+"abW" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{frequency = 1441;id_tag = "o2_out"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
+"abX" = (/obj/structure/table/rack,/obj/item/weapon/shovel,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored)
+"abY" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "o2_sensor"},/turf/simulated/floor/reinforced/oxygen,/area/engineering/atmos)
+"abZ" = (/obj/machinery/atmospherics/unary/outlet_injector{frequency = 1441;id = "n2_in"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos)
+"aca" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{frequency = 1441;id_tag = "n2_out"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos)
+"acb" = (/obj/structure/table/standard,/obj/item/weapon/folder/blue,/turf/simulated/floor/carpet,/area/security/vacantoffice2)
+"acc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"acd" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "n2_sensor"},/turf/simulated/floor/reinforced/nitrogen,/area/engineering/atmos)
+"ace" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acf" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acg" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ach" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aci" = (/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ack" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"acl" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Security Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acm" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"acn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"aco" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"acp" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"acq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"acr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/atmos)
+"acs" = (/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"act" = (/obj/structure/girder/displaced,/turf/simulated/floor/airless,/area/mine/unexplored)
+"acu" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid";name_tag = "Security Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acv" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Security"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acw" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/carpet,/area/security/vacantoffice2)
+"acx" = (/turf/simulated/floor/carpet,/area/security/vacantoffice2)
+"acy" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/security/vacantoffice2)
+"acz" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter{frequency = 1443;id = "mair_in_meter";name = "Mixed Air Tank In"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"acA" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter{frequency = 1443;id = "mair_out_meter";name = "Mixed Air Tank Out"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"acB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"acC" = (/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"acD" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/effect/landmark/start{name = "Head of Security"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"acE" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/machinery/camera/network/security{c_tag = "Security - Briefing Room";dir = 4;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"acF" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/landmark/start{name = "Warden"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"acG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/security{c_tag = "Security - Briefing Room";dir = 8;icon_state = "camera"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"acH" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acJ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"acK" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"acL" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"acM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"acN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acO" = (/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small,/obj/machinery/camera/network/security{c_tag = "Security - Security Substation";dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acP" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"acQ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acR" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/door/airlock/engineering{name = "Security Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"acS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acT" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"acU" = (/obj/structure/table/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,/area/maintenance/security_starboard)
+"acV" = (/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"acW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"acX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"acY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"acZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"ada" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"adb" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adc" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"add" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"ade" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"adf" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/mine/unexplored)
+"adg" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"adh" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/mine/unexplored)
+"adi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adj" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Security Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"adk" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adl" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"adm" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adn" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"ado" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adp" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adq" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adr" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Internal Affairs Agent"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"ads" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Detective"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adt" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adu" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/landmark/start{name = "Forensic Technician"},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adv" = (/obj/machinery/door/airlock/glass_security{name = "Briefing Room";req_access = list(1)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adw" = (/obj/item/weapon/wrench,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"adx" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"ady" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adz" = (/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"adB" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adC" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adD" = (/obj/item/stack/tile/floor,/obj/item/weapon/autopsy_scanner,/obj/machinery/light_construct{tag = "icon-tube-construct-stage1 (WEST)";icon_state = "tube-construct-stage1";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adE" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adF" = (/obj/machinery/atmospherics/binary/pump{name = "O2 to Connector"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adG" = (/obj/machinery/atmospherics/valve/digital/open{name = "Oxygen Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adH" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"adI" = (/obj/machinery/atmospherics/valve/digital/open{name = "Nitrogen Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adJ" = (/obj/machinery/atmospherics/binary/pump{name = "O2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adK" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adL" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adM" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "air_in";name = "Mixed Air Supply Control";output_tag = "air_out";pressure_setting = 2000;sensors = list("air_sensor" = "Tank")},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adN" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "o2_in";name = "Oxygen Supply Control";output_tag = "o2_out";sensors = list("o2_sensor" = "Tank")},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"adP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "n2_in";name = "Nitrogen Supply Control";output_tag = "n2_out";sensors = list("n2_sensor" = "Tank")},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"adQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adR" = (/obj/structure/barricade,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"adS" = (/obj/structure/morgue,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"adT" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/flora/pottedplant/random,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adU" = (/obj/item/bodybag,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"adV" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adW" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"adX" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"adY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"adZ" = (/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aea" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aeb" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aec" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aed" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aee" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/remains/mouse,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aef" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeg" = (/obj/machinery/disposal,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"aeh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aei" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aej" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aek" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ael" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aem" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aen" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeo" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aep" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeq" = (/obj/machinery/atmospherics/omni/mixer{active_power_usage = 7500;tag_east = 1;tag_east_con = 0.79;tag_south = 2;tag_west = 1;tag_west_con = 0.21},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aer" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"aes" = (/obj/machinery/atmospherics/unary/outlet_injector,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aet" = (/obj/structure/grille/broken,/obj/structure/lattice,/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/mine/unexplored)
+"aeu" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/mine/unexplored)
+"aev" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aew" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"aex" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aey" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/blue/diagonal,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"aez" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "n2o_in";name = "Nitrous Oxide Supply Control";output_tag = "n2o_out";sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeA" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/red,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeB" = (/turf/simulated/wall,/area/security/forensics_office)
+"aeC" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/turf/simulated/floor/plating,/area/security/vacantoffice2)
+"aeD" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aeE" = (/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aeF" = (/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aeG" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aeH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aeI" = (/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aeJ" = (/turf/simulated/floor/plating,/area/maintenance/civ)
+"aeK" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aeL" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/mine/unexplored)
+"aeM" = (/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"aeN" = (/obj/item/device/radio/intercom/locked{pixel_y = -32},/obj/machinery/newscaster{pixel_x = 27;pixel_y = -27},/obj/effect/floor_decal/corner/blue/diagonal,/obj/machinery/papershredder,/turf/simulated/floor/tiled,/area/security/vacantoffice2)
+"aeO" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"aeP" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aeQ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"aeR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/tiled,/area/security/brig)
+"aeS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"aeT" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aeV" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 4;frequency = 1441;icon_state = "map_vent_in";id_tag = "tox_out"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"aeW" = (/obj/machinery/atmospherics/valve/digital{dir = 4;name = "Phoron Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeX" = (/obj/machinery/atmospherics/binary/pump{dir = 4;name = "Phoron to Connector"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeY" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aeZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afa" = (/obj/machinery/atmospherics/omni/filter{name = "N2/O2 filter";tag_east = 1;tag_north = 4;tag_south = 2;tag_west = 3},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afb" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afc" = (/obj/machinery/atmospherics/omni/filter{name = "N2O Filter";tag_east = 7;tag_north = 0;tag_south = 1;tag_west = 2},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afd" = (/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
+"afe" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/mine/unexplored)
+"aff" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/simulated/floor/airless,/area/mine/unexplored)
+"afg" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"afh" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"afi" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "n2o_in";pixel_y = 1;use_power = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
+"afj" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/meter,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
+"afk" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"afl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"afm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"afn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"afo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"afp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"afq" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"afr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"afs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aft" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"afu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/brig)
+"afv" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"afw" = (/obj/item/bodybag,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"afx" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"afy" = (/obj/item/stack/tile/floor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"afz" = (/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records.";name = "Security Records"},/obj/machinery/camera/network/security{c_tag = "Security - Forensic Records"},/turf/simulated/floor/lino,/area/security/forensics_office)
+"afA" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"afB" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"afC" = (/turf/simulated/floor/tiled,/area/maintenance/civ)
+"afD" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"afE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"afF" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"afG" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"afH" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records.";name = "Medical Records"},/obj/machinery/light{dir = 4},/turf/simulated/floor/lino,/area/security/forensics_office)
+"afI" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"afJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"afK" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"afL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afM" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"afN" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"afO" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afP" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 10},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"afR" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"afS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/engineering/atmos)
+"afT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
+"afU" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"afV" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"afW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"afX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"afY" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "tox_in";name = "Phoron Supply Control";output_tag = "tox_out";sensors = list("tox_sensor" = "Tank")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"afZ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aga" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agb" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "N2O to Connector"},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agc" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 10},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"agd" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "n2o_sensor"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
+"age" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"agf" = (/obj/machinery/door/airlock/security{name = "Security Lockers";req_access = list(63)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/brig)
+"agg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"agh" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/brig)
+"agi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
+"agj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"agk" = (/obj/structure/disposalpipe/junction{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"agl" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"agm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"agn" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/brig)
+"ago" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"agp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"agq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/security/forensics_office)
+"agr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"ags" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"agt" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"agu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/security/brig)
+"agv" = (/turf/simulated/wall,/area/maintenance/civ)
+"agw" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"agx" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"agy" = (/obj/structure/table/reinforced,/obj/item/trash/tray,/obj/machinery/door/window/southleft,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"agz" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"agA" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/random/loot,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"agB" = (/obj/structure/table/reinforced,/obj/item/trash/tray,/obj/machinery/door/window/southright,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"agC" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"agD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"agE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"agF" = (/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/obj/effect/decal/cleanable/generic,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"agG" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/obj/machinery/light_construct{tag = "icon-tube-construct-stage1 (EAST)";icon_state = "tube-construct-stage1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"agH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agJ" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agK" = (/obj/machinery/atmospherics/valve/digital{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"agM" = (/turf/simulated/wall,/area/engineering/atmos)
+"agN" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"agO" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agP" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agQ" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1441;icon_state = "map_injector";id = "tox_in";use_power = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
+"agR" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"agS" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"agT" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"agU" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agV" = (/obj/structure/grille/broken,/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"agW" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"agX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"agY" = (/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Port Camera";dir = 8},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)";icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"agZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Starboard Camera";dir = 4},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aha" = (/obj/machinery/atmospherics/valve/digital{dir = 4;name = "N2O Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahb" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "N2O to Transit"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahc" = (/turf/simulated/wall/r_wall,/area/security/forensics_office)
+"ahd" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 8;frequency = 1441;icon_state = "map_vent_in";id_tag = "n2o_out"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
+"ahe" = (/obj/machinery/computer/security/telescreen{layer = 4;name = "Observation Screen";network = list("Interrogation");pixel_x = 0;pixel_y = -32},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/security/brig)
+"ahf" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 2;pixel_y = 5},/obj/item/weapon/pen,/obj/machinery/camera/network/security{c_tag = "Security - Interrogation Observation";dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"ahg" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{frequency = 1449;pixel_x = 27;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"ahh" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"ahi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"ahj" = (/obj/machinery/door/airlock/security{name = "Evidence Storage";req_access = list(1)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahk" = (/obj/random/toolbox,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ahl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ahm" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"ahn" = (/obj/machinery/door/airlock/security{name = "Evidence Storage";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"aho" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"ahp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Forensic Technician";req_access = list(4)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ahq" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ahr" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/civ)
+"ahs" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aht" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/plating,/area/maintenance/civ)
+"ahu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahv" = (/obj/machinery/atmospherics/binary/pump{name = "Air Mix to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahw" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahx" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahy" = (/obj/machinery/space_heater,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahz" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/forensics_office)
+"ahA" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/ramp/bottom,/area/security/forensics_office)
+"ahB" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"ahC" = (/obj/machinery/door/airlock/external,/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/maintenance/engineering)
+"ahD" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/security_starboard)
+"ahE" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"ahF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ahG" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ahH" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahI" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Evidence Lockers"},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahJ" = (/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahK" = (/obj/structure/filingcabinet/filingcabinet{desc = "A large cabinet with drawers. There seems to be a layer of dust covering it."},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahL" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ahN" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahO" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ahP" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/camera/network/security{c_tag = "Security - Evidence Lockers"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ahQ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 9;icon_state = "intact"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ahR" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"ahS" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"ahT" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ahU" = (/obj/item/weapon/stool/padded,/mob/living/simple_animal/mouse/gray,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ahV" = (/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"ahW" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"ahX" = (/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
+"ahY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 1";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"ahZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"aia" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Forensics Office"},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"aib" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aic" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aid" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aie" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"aif" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"aig" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aih" = (/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
+"aii" = (/obj/structure/barricade,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aij" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aik" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"ail" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 4;frequency = 1441;icon_state = "map_vent_in";id_tag = "waste_out"},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
+"aim" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/valve/digital{dir = 4;name = "Gas Release Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ain" = (/obj/machinery/atmospherics/binary/pump{dir = 4;icon_state = "map_off";name = "Mix out"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aio" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence{pixel_x = 7},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"aip" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aiq" = (/turf/simulated/floor/tiled,/area/security/forensics_office)
+"air" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ais" = (/obj/machinery/atmospherics/omni/filter{name = "CO2 Filter";tag_east = 5;tag_north = 2;tag_south = 1;tag_west = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ait" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "co2_in";pixel_y = 1;use_power = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
+"aiu" = (/obj/structure/table/glass,/obj/machinery/microscope,/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"aiv" = (/obj/machinery/dnaforensics,/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"aiw" = (/obj/machinery/door/airlock/security{name = "Interrogation";req_access = list(63)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/brig)
+"aix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aiy" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aiz" = (/obj/structure/table/standard,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aiA" = (/obj/item/weapon/stool/padded{desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?";name = "Tattered Stool"},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"aiB" = (/obj/structure/table/standard,/obj/item/trash/tray,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aiC" = (/obj/structure/table/standard,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aiD" = (/obj/structure/table/standard,/obj/effect/decal/remains/mouse,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aiE" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aiF" = (/obj/machinery/computer/med_data,/obj/machinery/requests_console{department = "Forensic Tech's Desk";departmentType = 5;pixel_x = -32},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"aiG" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"aiH" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aiI" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aiJ" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aiK" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/swabs{pixel_x = 5;pixel_y = 5},/obj/item/weapon/storage/box/slides{pixel_x = 2;pixel_y = 2},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"aiL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aiM" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
+"aiN" = (/turf/simulated/wall,/area/maintenance/engineering)
+"aiO" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aiP" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aiQ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aiR" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aiS" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aiT" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/turf/simulated/floor/tiled,/area/security/brig)
+"aiU" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "waste_sensor";output = 63},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
+"aiV" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "waste_in";name = "Gas Mix Tank Control";output_tag = "waste_out";sensors = list("waste_sensor" = "Tank")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aiW" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"aiX" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"aiY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aiZ" = (/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"aja" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajb" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "CO2 to Connector"},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajc" = (/obj/item/weapon/stool/padded,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ajd" = (/obj/item/weapon/stool/padded,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aje" = (/obj/machinery/air_sensor{frequency = 1441;id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
+"ajf" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ajg" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"ajh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Interrogation";dir = 4;network = list("Brig","Interrogation")},/turf/simulated/floor/tiled,/area/security/brig)
+"aji" = (/obj/item/device/radio/intercom{broadcasting = 1;frequency = 1449;listening = 0;pixel_x = 27;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"ajj" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajl" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajm" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajn" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajo" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajp" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ajq" = (/obj/machinery/door/window/westleft{name = "Forensics Operating Theatre";req_access = list(4)},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"ajr" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"ajs" = (/obj/structure/sign/vacuum{pixel_y = 32},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ajt" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aju" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ajv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ajw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ajx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ajy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ajz" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"ajA" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{icon_state = "intact";dir = 1},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ajB" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1441;icon_state = "map_injector";id = "waste_in";use_power = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos)
+"ajC" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ajD" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/valve/digital{dir = 4;name = "Gas Mix Inlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajE" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "Mix In"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajF" = (/obj/machinery/computer/security,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ajG" = (/obj/machinery/atmospherics/valve/digital{dir = 4;name = "CO2 Outlet Valve"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajH" = (/obj/machinery/atmospherics/binary/pump{dir = 8;name = "CO2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajI" = (/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/briefcase/crimekit,/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ajJ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"ajK" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 8;frequency = 1441;icon_state = "map_vent_in";id_tag = "co2_out"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
+"ajL" = (/obj/structure/sign/securearea{name = "\improper CAUTION";pixel_x = 32},/obj/item/stack/cable_coil,/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ajM" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ajN" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/maintenance/civ)
+"ajO" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/wood,/area/maintenance/civ)
+"ajP" = (/obj/item/stack/tile/floor,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ajQ" = (/obj/item/stack/rods,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"ajR" = (/turf/simulated/wall/r_wall,/area/engineering/engine_waste)
+"ajS" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/wall/r_wall,/area/engineering/engine_waste)
+"ajT" = (/turf/simulated/wall/r_wall,/area/engineering/drone_fabrication)
+"ajU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajV" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"ajX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"ajY" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ajZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aka" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"akb" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"akc" = (/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen/blue{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red,/obj/structure/table/standard,/obj/machinery/alarm{dir = 1;pixel_y = -25},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"akd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"ake" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"akf" = (/obj/machinery/photocopier,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"akg" = (/obj/structure/table/glass,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel{desc = "Cut, cut, and once more cut. This one is extra shiny!";name = "shiny scalpel"},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"akh" = (/obj/machinery/optable,/obj/machinery/button/windowtint{id = "FT Op";pixel_x = 0;pixel_y = -28},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"aki" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"akj" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"akk" = (/turf/simulated/wall/r_wall,/area/security/brig)
+"akl" = (/turf/simulated/floor/wood,/area/maintenance/civ)
+"akm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akn" = (/obj/structure/grille,/obj/item/weapon/material/shard,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"ako" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akq" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akr" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aks" = (/obj/item/stack/rods,/obj/item/weapon/material/shard{icon_state = "small"},/obj/machinery/door/firedoor,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akt" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aku" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akv" = (/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"akw" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"akx" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/black,/obj/machinery/light{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Waste Handling"},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"aky" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/black,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"akz" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"akA" = (/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"akB" = (/obj/machinery/drone_fabricator,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"akC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"akD" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"akE" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"akF" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441;input_tag = "co2_in";name = "Carbon Dioxide Supply Control";output_tag = "co2_out";sensors = list("co2_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"akG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/corner/black{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"akH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"akI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"akJ" = (/obj/structure/bed,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/plating,/area/security/brig)
+"akK" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/newscaster{pixel_x = 27},/turf/simulated/floor/plating,/area/security/brig)
+"akL" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"akM" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"akN" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"akO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"akP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"akQ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"akR" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"akS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"akT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"akU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/civ)
+"akV" = (/obj/item/weapon/storage/toolbox,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akW" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/wood,/area/maintenance/civ)
+"akX" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ)
+"akY" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"akZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"ala" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"alb" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"alc" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{icon_state = "map";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"ald" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"ale" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"alf" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alg" = (/obj/machinery/computer/drone_control,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"alh" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"ali" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"alj" = (/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring)
+"alk" = (/obj/machinery/atmospherics/omni/filter{name = "Plasma Filter";tag_east = 0;tag_north = 2;tag_south = 1;tag_west = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"all" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alm" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aln" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"alo" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alp" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2";dir = 2},/turf/simulated/floor/tiled,/area/security/brig)
+"alq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"als" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alt" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"alu" = (/turf/simulated/wall/r_wall,/area/maintenance/security_starboard)
+"alv" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"alw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/security/brig)
+"alx" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aly" = (/turf/simulated/wall/r_wall,/area/security/main)
+"alz" = (/turf/simulated/wall,/area/security/range)
+"alA" = (/obj/item/stack/tile/wood,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/civ)
+"alB" = (/obj/machinery/atmospherics/unary/heat_exchanger{icon_state = "intact";dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"alC" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/maintenance/civ)
+"alD" = (/obj/item/stack/material/wood,/obj/random/loot,/turf/simulated/floor/wood,/area/maintenance/civ)
+"alE" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ)
+"alF" = (/obj/structure/grille/broken,/obj/item/stack/rods,/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"alG" = (/obj/effect/decal/cleanable/dirt,/obj/item/stack/rods,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ)
+"alH" = (/obj/machinery/atmospherics/unary/heat_exchanger,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"alI" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"alJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"alK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = 0;pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/drone_fabrication)
+"alL" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Aft Camera";dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alM" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alN" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alO" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map";dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"alP" = (/turf/simulated/floor/plating,/area/engineering/atmos)
+"alQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos)
+"alR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/engineering/atmos)
+"alS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Maintenance - Atmospherics"},/turf/simulated/floor/plating,/area/engineering/atmos)
+"alT" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"alU" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Solitary 2";dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/security/brig)
+"alV" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"alW" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/range)
+"alX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"alY" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/sensor{name = "Powernet Sensor - Master Grid";name_tag = "Master"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"alZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"ama" = (/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"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"amb" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Drone Fabrication";dir = 8},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"amc" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"amd" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid";name_tag = "Atmospherics Subgrid"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/engineering/atmos)
+"ame" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc/super{name = "north bump";pixel_y = 24},/turf/simulated/floor/plating,/area/engineering/atmos)
+"amf" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"amg" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"amh" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"ami" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"amj" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"amk" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/storage)
+"aml" = (/turf/simulated/wall/r_wall,/area/security/armoury)
+"amm" = (/obj/structure/table/standard,/obj/item/weapon/paper,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/brig)
+"amn" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/security/brig)
+"amo" = (/turf/simulated/wall,/area/security/main)
+"amp" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance Access";req_access = list(12,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos)
+"amq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"amr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"ams" = (/obj/machinery/vending/security,/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"amt" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"amu" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"amv" = (/obj/structure/table/standard,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/machinery/recharger/wallcharger{pixel_y = 24},/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/simulated/floor/tiled,/area/security/main)
+"amw" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/machinery/recharger/wallcharger{pixel_y = 24},/turf/simulated/floor/tiled,/area/security/main)
+"amx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/main)
+"amy" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"amz" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"amA" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"amB" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"amC" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range)
+"amD" = (/turf/simulated/floor/tiled,/area/security/range)
+"amE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"amF" = (/obj/structure/table/woodentable,/turf/simulated/floor/plating,/area/maintenance/civ)
+"amG" = (/obj/item/stack/tile/wood,/turf/simulated/floor/plating,/area/maintenance/civ)
+"amH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/wood,/area/maintenance/civ)
+"amI" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ)
+"amJ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ)
+"amK" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"amL" = (/obj/item/stack/tile/floor,/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"amM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"amN" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"amO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"amP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"amQ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"amR" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"amS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"amT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"amU" = (/obj/structure/table/standard,/obj/item/clothing/glasses/sunglasses{pixel_x = 4;pixel_y = 4},/obj/item/clothing/glasses/sunglasses{pixel_x = 1;pixel_y = 1;pixel_z = 0},/obj/item/clothing/glasses/sunglasses{pixel_x = -2;pixel_y = -2},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range)
+"amV" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/security/range)
+"amW" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/practiceshells{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/practiceshells{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/practiceshells{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/box/practiceshells{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/box/practiceshells,/obj/item/weapon/storage/box/practiceshells,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range)
+"amX" = (/obj/structure/table/standard,/obj/item/clothing/ears/earmuffs{pixel_x = 4;pixel_y = 4},/obj/item/clothing/ears/earmuffs{pixel_x = 1;pixel_y = 1},/obj/item/clothing/ears/earmuffs{pixel_x = -2;pixel_y = -2},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/range)
+"amY" = (/obj/structure/table/glass,/obj/item/device/mass_spectrometer{pixel_x = 3},/obj/item/device/reagent_scanner{pixel_x = -3},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"amZ" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"ana" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"anb" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"anc" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication/Engine Waste Handling";req_one_access = list(10,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"and" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"ane" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"anf" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"ang" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"anh" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"ani" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"anj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"ank" = (/obj/machinery/pipedispenser/disposal,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anl" = (/obj/machinery/pipedispenser,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anm" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos)
+"ann" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"ano" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication";req_one_access = list(10,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"anp" = (/obj/machinery/cell_charger,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/atmos)
+"anr" = (/obj/structure/table/standard,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/structure/fireaxecabinet{pixel_x = 32},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"ans" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos)
+"ant" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/random/junk,/turf/simulated/floor/plating,/area/engineering/atmos)
+"anu" = (/obj/machinery/power/smes/buildable{charge = 2e+006;RCon_tag = "Substation - Atmospherics"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/engineering/atmos)
+"anv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"anw" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/engineering/atmos)
+"anx" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"any" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/main)
+"anz" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/main)
+"anA" = (/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/engineering/atmos)
+"anB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"anC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/security/forensics_office)
+"anD" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"anE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/obj/machinery/meter,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anF" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anG" = (/obj/item/stack/tile/wood,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/civ)
+"anH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ)
+"anI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"anJ" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ)
+"anK" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"anL" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/civ)
+"anM" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable,/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"anO" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;name = "Security";sortType = "Security"},/turf/simulated/floor/tiled,/area/security/brig)
+"anP" = (/obj/machinery/door/airlock/glass_security{name = "Briefing Room";req_access = list(1)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/main)
+"anQ" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"anR" = (/obj/machinery/door/airlock/maintenance{req_access = list(10,12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"anS" = (/obj/machinery/door/airlock/glass_security{name = "Firing Range";req_access = list(1)},/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/main)
+"anT" = (/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records.";name = "Security Records"},/turf/simulated/floor/lino,/area/security/forensics_office)
+"anU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/range)
+"anV" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/security{c_tag = "Security - Firing Range Starboard";dir = 8},/turf/simulated/floor/tiled,/area/security/range)
+"anW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"anX" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anY" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"anZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"aoa" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 5},/obj/machinery/meter,/obj/machinery/door/window/brigdoor/westleft{dir = 1;icon_state = "leftsecure";name = "Engine Waste";req_access = newlist();req_one_access = list(10,24)},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"aob" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aoc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aod" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aoe" = (/obj/structure/closet/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aof" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/atmos/storage)
+"aog" = (/obj/machinery/atmospherics/binary/pump{dir = 1;name = "Waste Pump"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/westleft{dir = 1;icon_state = "leftsecure";name = "Engine Waste";req_access = newlist();req_one_access = list(10,24)},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"aoh" = (/obj/structure/closet/bombclosetsecurity,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoi" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoj" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable,/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"aok" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/brigdoor/westleft{dir = 1;icon_state = "leftsecure";name = "Engine Waste";req_access = newlist();req_one_access = list(10,24)},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"aol" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"aom" = (/obj/machinery/atmospherics/unary/freezer{dir = 1;icon_state = "freezer"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aon" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aoo" = (/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/energy/rifle/laser,/obj/item/weapon/gun/energy/rifle/laser,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aop" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aoq" = (/obj/machinery/atmospherics/unary/heater{icon_state = "heater";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"aor" = (/obj/item/weapon/stool/padded,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"aos" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"aot" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"aou" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2;name = "Air to Ports"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aov" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2;name = "Air to Supply"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aow" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aox" = (/obj/structure/table/rack,/obj/item/device/magnetic_lock/security{pixel_x = -3;pixel_y = 4},/obj/item/device/magnetic_lock/security{pixel_x = -3;pixel_y = 4},/obj/item/device/magnetic_lock/security{pixel_x = -3;pixel_y = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoy" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Armoury Fore"},/obj/structure/table/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = -4;pixel_y = 4},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty{pixel_x = 4;pixel_y = -4},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/range)
+"aoA" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft{name = "Riot Gear Storage"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoB" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/security/range)
+"aoC" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/range)
+"aoD" = (/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = 22},/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/camera/network/security{c_tag = "Armoury - Riot Storage"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoE" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aoF" = (/obj/item/weapon/stool/padded,/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aoG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aoH" = (/obj/machinery/recharger/wallcharger{pixel_x = 5;pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aoI" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 9";dir = 9;icon_state = "camera"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aoJ" = (/obj/effect/decal/cleanable/generic,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aoK" = (/turf/simulated/wall/r_wall,/area/engineering/engine_room)
+"aoL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
+"aoM" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/main)
+"aoN" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/main)
+"aoO" = (/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aoP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aoQ" = (/turf/simulated/wall/r_wall,/area/engineering/storage)
+"aoR" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/engineering/storage)
+"aoS" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/plating,/area/engineering/storage)
+"aoT" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/closet/crate/solar,/turf/simulated/floor/plating,/area/engineering/storage)
+"aoU" = (/obj/machinery/power/port_gen/pacman/mrs,/obj/machinery/light{dir = 1},/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Hard Storage"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aoV" = (/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/engineering/storage)
+"aoW" = (/obj/machinery/shield_gen,/turf/simulated/floor/plating,/area/engineering/storage)
+"aoX" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aoY" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aoZ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/main)
+"apa" = (/obj/machinery/door/airlock/glass_security{name = "Firing Range";req_access = list(1)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/main)
+"apb" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"apc" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/range)
+"apd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/security/range)
+"ape" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/security{c_tag = "Security - Forensic's Office";dir = 8},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"apf" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/maintenance/civ)
+"apg" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aph" = (/obj/machinery/door/blast/regular{tag = "icon-pdoor1 (WEST)";name = "Engine Waste Handling Access";icon_state = "pdoor1";dir = 8;layer = 3.3;id = "EngineEmitterPortWest"},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"api" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/door/blast/regular{tag = "icon-pdoor1 (WEST)";name = "Engine Waste Handling Access";icon_state = "pdoor1";dir = 8;layer = 3.3;id = "EngineEmitterPortWest"},/turf/simulated/floor/plating,/area/engineering/engine_waste)
+"apj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apk" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apl" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"apm" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4;name = "Supply to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"apn" = (/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"apo" = (/obj/machinery/atmospherics/pipe/manifold/visible/blue{icon_state = "map";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"app" = (/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"apq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/maintenance/security_starboard)
+"apr" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aps" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/main)
+"apt" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"apu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"apv" = (/turf/simulated/floor/tiled,/area/security/main)
+"apw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apx" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance";req_access = list(12,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"apy" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/practice,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/range)
+"apz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/range)
+"apA" = (/obj/structure/table/woodentable,/obj/item/stack/material/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ)
+"apB" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apC" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/maintenance/civ)
+"apD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apE" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ)
+"apF" = (/obj/machinery/light/spot,/turf/simulated/floor/asteroid,/area/bridge)
+"apG" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"apH" = (/turf/simulated/floor/plating,/area/engineering/engine_room)
+"apI" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apJ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"apK" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"apL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"apM" = (/turf/simulated/wall/r_wall,/area/engineering/engine_smes)
+"apN" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/eastleft{name = "Riot Gear Storage"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"apO" = (/obj/structure/closet/crate,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil/super_capacity,/obj/item/weapon/smes_coil/super_capacity,/obj/item/weapon/smes_coil/super_io,/obj/item/weapon/smes_coil/super_io,/turf/simulated/floor/plating,/area/engineering/storage)
+"apP" = (/turf/simulated/floor/plating,/area/engineering/storage)
+"apQ" = (/obj/machinery/shieldgen,/turf/simulated/floor/plating,/area/engineering/storage)
+"apR" = (/turf/simulated/open,/area/turbolift/engineering_station)
+"apS" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"apT" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"apU" = (/obj/structure/noticeboard{desc = "A board for pinning important notices upon. This board seems a little chipped around the corners. Maybe it just needs to be noticed.";pixel_x = -32},/obj/machinery/newscaster{pixel_x = -27;pixel_y = -27},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Equipment Storage";dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/main)
+"apV" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/main)
+"apW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/main)
+"apX" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/main)
+"apY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/security/range)
+"apZ" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aqa" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/maintenance/civ)
+"aqb" = (/obj/structure/disposalpipe/segment,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aqc" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aqd" = (/obj/structure/table/rack,/obj/random/handgun,/obj/random/handgun,/obj/random/handgun,/obj/random/handgun,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aqe" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{icon_state = "map";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aqf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aqg" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors.";id = "EngineEmitterPortWest";name = "Engine Room Blast Doors";pixel_x = 0;pixel_y = 25;req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aqh" = (/obj/structure/window/reinforced,/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"aqi" = (/obj/structure/window/reinforced,/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"aqj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"aqk" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_smes)
+"aql" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqm" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/main)
+"aqn" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/security/main)
+"aqo" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{pixel_x = 28},/turf/simulated/floor/tiled,/area/security/main)
+"aqp" = (/obj/effect/floor_decal/industrial/loading,/turf/simulated/floor/tiled,/area/security/range)
+"aqq" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aqr" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqs" = (/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/civ)
+"aqt" = (/turf/simulated/wall/r_wall,/area/bridge)
+"aqu" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqv" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1;name = "Scrubber to Waste"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;name = "Atmospherics";sortType = "Atmospherics"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqy" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aqz" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/eastleft{name = "Riot Gear Storage"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aqA" = (/turf/simulated/mineral,/area/mine/unexplored)
+"aqB" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aqC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/main)
+"aqD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/main)
+"aqE" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/civ)
+"aqF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"aqG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"aqH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"aqI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/bridge)
+"aqJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"aqK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/bridge)
+"aqL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/engineering/storage)
+"aqM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/storage)
+"aqN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/engineering/storage)
+"aqO" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/engineering/storage)
+"aqP" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqQ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqR" = (/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqS" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqT" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aqU" = (/obj/machinery/atmospherics/omni/filter{tag_east = 4;tag_north = 2;tag_south = 1;tag_west = 0;use_power = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aqV" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aqW" = (/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aqX" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0;tag_north = 2;tag_south = 1;tag_west = 4;use_power = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aqY" = (/obj/machinery/power/smes/buildable{charge = 1e+007;cur_coils = 4;input_attempt = 1;input_level = 500000;output_attempt = 1;output_level = 500000;RCon_tag = "Engine - Main"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/engineering/engine_smes)
+"aqZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 25},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"ara" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"arb" = (/obj/structure/table/reinforced,/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/device/multitool{pixel_x = 5},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"arc" = (/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ard" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"are" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = 3},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"arf" = (/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/engineering/engine_smes)
+"arg" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1;name = "Ports to Waste"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arh" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"ari" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arj" = (/obj/machinery/requests_console{department = "Atmospherics";departmentType = 4;name = "Atmos RC";pixel_x = 0;pixel_y = 28},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"ark" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Locker Room";req_access = list(12,24)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"arm" = (/obj/structure/closet/secure_closet/guncabinet{req_access = list(2)},/obj/item/weapon/gun/projectile/shotgun/pump,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"arn" = (/obj/structure/table/standard,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aro" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/item/device/pipe_painter,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arp" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 50;pixel_x = 5;pixel_y = 5},/obj/item/stack/material/glass{amount = 50},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arq" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment,/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"arr" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ars" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = -3;pixel_y = 3},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"art" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = -3;pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = -3;pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = 3;pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aru" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"arv" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/main)
+"arw" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/security/main)
+"arx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donut,/turf/simulated/floor/tiled,/area/security/main)
+"ary" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"arz" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/maintenance/civ)
+"arA" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/plating,/area/maintenance/civ)
+"arB" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Armoury Section";req_access = list(3)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"arC" = (/obj/structure/largecrate/animal/cow,/turf/simulated/floor/plating,/area/maintenance/civ)
+"arD" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/civ)
+"arE" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Solitary 1";dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/plating,/area/security/brig)
+"arF" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"arG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"arH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
+"arI" = (/obj/structure/closet/wardrobe/red,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/main)
+"arJ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main)
+"arK" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"arL" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"arM" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"arN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/main)
+"arO" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/main)
+"arP" = (/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"arQ" = (/obj/machinery/door/window/westleft{name = "Firing Range Access";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/range)
+"arR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"arS" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/status_display{pixel_y = 32},/obj/item/weapon/wrench,/obj/item/device/multitool,/obj/item/weapon/book/manual/security_space_law,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"arT" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"arU" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge)
+"arV" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arW" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"arX" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Fore"},/obj/structure/fireaxecabinet{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"arY" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/status_display{pixel_y = 32},/obj/item/weapon/paper{desc = "A few notes scratched out by the last CMO before they departed the station.";info = "\[i]\[center]To the incoming CMO of Exodus:\[/i]\[/center]\[br]\[br]I wish you and your crew well. Do take note:\[br]\[br]\[br]The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.\[br]\[br]I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.\[br]\[br]The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.\[br]\[br]Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.\[br]\[br]There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.\[br]\[br]The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.\[br]\[br]The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.\[br]\[br]Emergency Cryo bags are beside the emergency entrance, along with a kit.\[br]\[br]Spare paper cups for the reception are on the left side of the reception desk.\[br]\[br]I've fed Runtime. She should be fine.\[br]\[br]\[br]\[center]That should be all. Good luck!\[/center]";name = "Outgoing CMO's Notes"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/book/manual/security_space_law,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"arZ" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"asa" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge)
+"asb" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"asc" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"asd" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/button/remote/airlock{id = "engine_electrical_maintenance";name = "Door Bolt Control";pixel_x = -25;pixel_y = 5;req_access = list(10);specialfunctions = 4},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"ase" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"asf" = (/obj/structure/table/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,/area/maintenance/engineering)
+"asg" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ash" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"asi" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"asj" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Camera Corridor 4";dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ask" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asl" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engineering/storage)
+"asm" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/plating,/area/engineering/storage)
+"asn" = (/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/meter{frequency = 1443;id = "dloop_atm_meter";name = "Distribution Loop"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aso" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asq" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/meter{frequency = 1443;id = "wloop_atm_meter";name = "Waste Loop"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"asr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/security/main)
+"ass" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"ast" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/security/main)
+"asu" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"asv" = (/obj/structure/target_stake,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range)
+"asw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"asx" = (/obj/structure/target_stake,/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range)
+"asy" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmosphrics Maintenance";dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"asz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"asA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asD" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Armoury Section";req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"asE" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"asF" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/main)
+"asG" = (/turf/simulated/floor/tiled,/area/bridge)
+"asH" = (/obj/item/device/radio/beacon,/turf/simulated/floor/tiled,/area/bridge)
+"asI" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/security/main)
+"asJ" = (/obj/machinery/camera/network/security{c_tag = "Security - Firing Range Aft";dir = 1},/turf/simulated/floor/tiled,/area/security/range)
+"asK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"asL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"asM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"asN" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"asO" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"asP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"asQ" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"asR" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/bridge)
+"asS" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge)
+"asT" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"asU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge)
+"asV" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled,/area/bridge)
+"asW" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Fore";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"asX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"asY" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"asZ" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"ata" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"atb" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plating,/area/engineering/storage)
+"atc" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atd" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"ate" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "engine_electrical_maintenance";locked = 1;name = "Electrical Maintenance";req_access = list(10)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_smes)
+"atf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/camera/network/engineering{c_tag = "Engineering - SMES Room";dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"atg" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"ath" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"ati" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"atj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"atk" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"atl" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access";req_access = list(11)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
+"atm" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"atn" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ato" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/engineering/storage)
+"atp" = (/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/engineering/storage)
+"atq" = (/obj/structure/closet/secure_closet/guncabinet,/obj/effect/decal/warning_stripes,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"atr" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/plating,/area/engineering/storage)
+"ats" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{icon_state = "intact-scrubbers";dir = 6},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"att" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atu" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{icon_state = "intact-supply";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atv" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atw" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/main)
+"atx" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/main)
+"aty" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/main)
+"atz" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/structure/disposalpipe/segment,/obj/machinery/light,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Storage";dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atA" = (/obj/structure/cable/green,/obj/machinery/power/apc/super{name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atB" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/device/flashlight,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/device/gps/engineering,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atC" = (/obj/structure/dispenser/oxygen{phorontanks = 10},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"atD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"atE" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"atF" = (/obj/structure/closet/secure_closet/guncabinet,/obj/effect/decal/warning_stripes,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/flashshells{pixel_x = -2;pixel_y = 2},/obj/item/weapon/storage/box/beanbags{pixel_x = -4;pixel_y = 4},/obj/item/weapon/storage/box/beanbags{pixel_x = -4;pixel_y = 4},/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"atG" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atH" = (/obj/structure/closet/secure_closet/guncabinet,/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/shotgunshells{pixel_x = 4;pixel_y = -4},/obj/item/weapon/storage/box/shotgunshells{pixel_x = 4;pixel_y = -4},/obj/item/weapon/storage/box/shotgunammo{pixel_x = 2;pixel_y = -2},/obj/item/weapon/storage/box/shotgunammo{pixel_x = 2;pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"atI" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"atJ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"atK" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage";req_access = list(1)},/turf/simulated/floor/tiled,/area/security/main)
+"atL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"atM" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/bridge)
+"atN" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/bridge)
+"atO" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/bridge)
+"atP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Equipment Storage";req_access = list(1)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/main)
+"atQ" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atS" = (/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"atT" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"atU" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"atV" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atW" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atX" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atY" = (/obj/machinery/door/airlock/glass_command{name = "Command Maintenance";req_access = list(19)},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"atZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge)
+"aua" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"aub" = (/obj/machinery/computer/security/engineering,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"auc" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"aud" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge)
+"aue" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"auf" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/engineering/atmos/storage)
+"aug" = (/obj/machinery/power/smes/buildable{charge = 2e+006;input_attempt = 1;input_level = 100000;output_attempt = 1;output_level = 200000;RCon_tag = "Engine - Core"},/obj/structure/cable/orange{icon_state = "0-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"auh" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aui" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access";req_access = list(11)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"auj" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"auk" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = 0;pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring)
+"aul" = (/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage";req_access = list(11)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/storage)
+"aum" = (/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage";req_access = list(11)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/storage)
+"aun" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"auo" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/storage)
+"aup" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"auq" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aur" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics";req_access = list(24)},/turf/simulated/floor/tiled,/area/engineering/atmos/storage)
+"aus" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aut" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"auu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"auv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"auw" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aux" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"auy" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"auz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"auA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/camera/network/command{c_tag = "Security - Corridor Camera 8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"auD" = (/turf/simulated/wall,/area/lawoffice)
+"auE" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"auF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"auG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"auH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"auI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"auJ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{desc = "Talk... listen through this.";name = "Station Intercom (Brig Radio)";pixel_x = 0;pixel_y = 25;wires = 7},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"auM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"auN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"auO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auQ" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"auR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"auS" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"auT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"auU" = (/obj/effect/floor_decal/corner/yellow/full,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"auV" = (/obj/structure/sign/securearea{name = "\improper DANGER: REACTOR VENT SHAFT"},/turf/simulated/wall/r_wall,/area/engineering/engine_waste)
+"auW" = (/obj/machinery/computer/power_monitor,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"auX" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"auY" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge)
+"auZ" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area/engineering/engine_room)
+"ava" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/computer/communications,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"avb" = (/obj/machinery/computer/message_monitor,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"avc" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/tiled,/area/bridge)
+"avd" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"ave" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge)
+"avf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"avg" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avh" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/obj/item/modular_computer/console/preset/medical,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"avi" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avj" = (/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"avk" = (/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"avl" = (/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"avm" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avn" = (/obj/machinery/light{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Corridor Camera 2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avo" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avp" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"avq" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/monitoring)
+"avr" = (/obj/machinery/computer/security/engineering,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"avs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"avt" = (/obj/structure/cable/orange{icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"avu" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"avv" = (/obj/machinery/computer/general_air_control/supermatter_core{frequency = 1438;input_tag = "cooling_in";name = "Engine Cooling Control";output_tag = "cooling_out";pressure_setting = 100;sensors = list("engine_sensor" = "Engine Core")},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"avx" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avy" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"avz" = (/turf/simulated/wall/r_wall,/area/engineering/foyer)
+"avA" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_personal,/obj/item/device/flashlight,/obj/item/device/gps/engineering,/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"avB" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_personal,/obj/item/device/flashlight,/obj/item/device/gps/engineering,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"avC" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"avD" = (/turf/simulated/wall/r_wall,/area/engineering/locker_room)
+"avE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"avF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avH" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"avI" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"avJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"avK" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 32},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"avL" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/brig)
+"avM" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"avN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"avO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"avP" = (/obj/machinery/computer/sentencing/courtroom{pixel_y = 28},/turf/simulated/floor/tiled,/area/security/brig)
+"avQ" = (/obj/machinery/camera/network/security{c_tag = "Security - Processing"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"avR" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avS" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "engineering_dock_outer";locked = 1;name = "Engineering Dock Airlock";req_access = list(13)},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"avT" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"avU" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Monitoring"},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"avV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"avW" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"avX" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"avY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"avZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig)
+"awa" = (/obj/item/device/radio/intercom{broadcasting = 0;frequency = 1475;listening = 1;name = "Station Intercom (Security)";pixel_x = 0;pixel_y = 22},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Atmospherics Entrance"},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"awb" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"awc" = (/obj/machinery/hologram/holopad,/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Armoury Aft";dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"awd" = (/turf/simulated/floor/carpet,/area/lawoffice)
+"awe" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/lawoffice)
+"awf" = (/turf/simulated/floor/wood,/area/lawoffice)
+"awg" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"awh" = (/turf/simulated/wall,/area/hallway/primary/starboard)
+"awi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/hand_labeler{pixel_x = 4;pixel_y = 2},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/brig)
+"awj" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/asteroid,/area/bridge)
+"awk" = (/turf/simulated/wall,/area/bridge)
+"awl" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red{pixel_x = -3;pixel_y = -3},/obj/item/device/camera{pixel_x = 3;pixel_y = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"awm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"awn" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/security/brig)
+"awo" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"awp" = (/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
+"awq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 7";dir = 1},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"awr" = (/turf/simulated/open,/area/engineering/engine_waste)
+"aws" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"awt" = (/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
+"awu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"awv" = (/obj/structure/closet/lawcloset,/obj/item/weapon/storage/briefcase{pixel_x = 3;pixel_y = 2},/obj/item/weapon/storage/briefcase,/turf/simulated/floor/wood,/area/lawoffice)
+"aww" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"awx" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]";name = "Armory Inventory"},/obj/item/device/taperecorder,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Port";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"awy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"awz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"awA" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"awB" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awC" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "bridge blast";name = "Bridge Lockdown";pixel_x = 0;pixel_y = 0;req_access = list(19)},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"awD" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awE" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/item/device/paicard,/obj/item/weapon/aicard,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Starboard";dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"awF" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/asteroid,/area/bridge)
+"awG" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "EngineVent";name = "Reactor Vent";p_open = 0},/turf/simulated/floor/airless,/area/engineering/engine_waste)
+"awH" = (/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room)
+"awI" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4;frequency = 1438;icon_state = "map_injector";id = "cooling_in";name = "Coolant Injector";pixel_y = 1;power_rating = 30000;use_power = 1;volume_rate = 700},/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room)
+"awJ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"awK" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "engine_access_hatch";locked = 1;req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"awL" = (/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"awM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"awN" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awO" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"awQ" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"awR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awV" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"awW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"awX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"awY" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"awZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"axa" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"axb" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"axc" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"axd" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"axe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"axf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"axg" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"axh" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"axi" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/item/device/pipe_painter,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"axj" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig)
+"axk" = (/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig)
+"axl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig)
+"axm" = (/obj/machinery/computer/atmos_alert,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"axn" = (/turf/simulated/wall,/area/security/prison)
+"axo" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 5},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"axp" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"axq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"axr" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"axs" = (/turf/simulated/floor/tiled/ramp/bottom,/area/security/brig)
+"axt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/brig)
+"axu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Armory";req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"axv" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled,/area/security/brig)
+"axw" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 9},/obj/item/weapon/pen{pixel_x = 3;pixel_y = 7},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"axx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"axy" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
+"axz" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{pixel_x = 28},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"axA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison)
+"axB" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"axC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit";name = "Brig Exit";req_access = list(2)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
+"axD" = (/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"axE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison)
+"axF" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/northright{id = "Cell 1";name = "Cell 1";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"axG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/banner,/turf/simulated/floor/tiled,/area/bridge)
+"axH" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/northright{id = "Cell 2";name = "Cell 2";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"axI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge)
+"axJ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"axK" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/windowtint{id = "IAA Cubicle 1";pixel_x = -24;pixel_y = -7},/turf/simulated/floor/carpet,/area/lawoffice)
+"axL" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 1"},/turf/simulated/floor/carpet,/area/lawoffice)
+"axM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen{pixel_x = 2;pixel_y = 2},/obj/item/weapon/pen/blue{pixel_x = 1;pixel_y = 1},/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/lawoffice)
+"axN" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/open,/area/engineering/engine_waste)
+"axO" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 4;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 8;id = "iaa"},/turf/simulated/floor/plating,/area/lawoffice)
+"axP" = (/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room)
+"axQ" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red{desc = "A red folder. You can make out a small scribble in the top right corner. It reads Top Secret.";pixel_x = -3},/obj/machinery/button/windowtint{id = "iaa";pixel_x = 8;pixel_y = 8},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 4";dir = 8},/turf/simulated/floor/wood,/area/lawoffice)
+"axR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"axS" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"axT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"axU" = (/obj/machinery/computer/security,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"axV" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"axW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/banner,/turf/simulated/floor/tiled,/area/bridge)
+"axX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"axY" = (/obj/effect/floor_decal/corner/purple/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"axZ" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aya" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1";id = "EngineVent";name = "Reactor Vent";p_open = 0},/turf/simulated/floor/asteroid,/area/engineering/engine_room)
+"ayb" = (/obj/machinery/air_sensor{frequency = 1438;id_tag = "engine_sensor";output = 63},/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room)
+"ayc" = (/obj/machinery/mass_driver{icon_state = "mass_driver";dir = 8;id = "enginecore"},/obj/machinery/power/supermatter{layer = 4},/turf/simulated/floor/greengrid/nitrogen,/area/engineering/engine_room)
+"ayd" = (/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "SupermatterPort";layer = 2.7;name = "Reactor Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aye" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/orange{icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"ayf" = (/obj/machinery/power/emitter{anchored = 1;dir = 8;icon_state = "emitter";id = "EngineEmitter";state = 2},/obj/structure/cable/orange{icon_state = "0-4"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"ayg" = (/obj/structure/cable/orange{icon_state = "1-8"},/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"ayh" = (/obj/structure/cable/orange{icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"ayi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Monitoring";dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayj" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"ayk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayl" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors.";id = "EngineBlast";name = "Engine Monitoring Room Blast Doors";pixel_x = 0;pixel_y = -3;req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port.";id = "SupermatterPort";name = "Reactor Blast Doors";pixel_x = -6;pixel_y = 7;req_access = list(10)},/obj/machinery/button/remote/emitter{desc = "A remote control-switch for the engine emitter.";id = "EngineEmitter";name = "Engine Emitter";pixel_x = 6;pixel_y = 7;req_access = list(10)},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aym" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayn" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayo" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"ayq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"ayr" = (/obj/machinery/door/airlock/glass_engineering{name = "Engine Monitoring Room";req_access = list(11)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ays" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"ayt" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayv" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"ayw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ayx" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ayy" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayz" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ayA" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayB" = (/turf/simulated/wall,/area/security/armoury)
+"ayC" = (/obj/machinery/computer/prisoner,/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_y = 30},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ayD" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayE" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayF" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayG" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe{pixel_x = 8},/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe{pixel_x = -8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Corridor Camera 1";dir = 8},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"ayH" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"ayI" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"ayJ" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"ayK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"ayL" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"ayM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"ayN" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/brig)
+"ayO" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{icon_state = "map";dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"ayP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ayQ" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"ayR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ayS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/machinery/camera/network/security{c_tag = "Security - Armoury Entrance"},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ayT" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/laserproof{pixel_x = -2;pixel_y = 2},/obj/item/clothing/suit/armor/laserproof{pixel_x = 2;pixel_y = -2},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft{name = "Ablative Armour Storage"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light/small/emergency{dir = 8},/obj/item/clothing/head/helmet/ablative,/obj/item/clothing/head/helmet/ablative,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ayU" = (/obj/machinery/flasher/portable,/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"ayV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/camera/network/security{c_tag = "Security - Holding Cell";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"ayW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Processing";req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"ayX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/security/prison)
+"ayY" = (/obj/structure/bed,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/sign/nosmoking_1{pixel_x = 32},/turf/simulated/floor/tiled,/area/security/prison)
+"ayZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aza" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled,/area/security/brig)
+"azb" = (/turf/simulated/floor/plating,/area/security/brig)
+"azc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/security/brig)
+"azd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Processing";req_access = list(1)},/turf/simulated/floor/tiled,/area/security/brig)
+"aze" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 1"},/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/lawoffice)
+"azf" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"azg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/wood,/area/lawoffice)
+"azh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/lawoffice)
+"azi" = (/obj/structure/window/reinforced/polarized{id = "IAA's Office"},/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/wood,/area/lawoffice)
+"azj" = (/obj/machinery/light{dir = 4;status = 2},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig)
+"azk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"azl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison)
+"azm" = (/turf/simulated/open,/area/turbolift/vault_station)
+"azn" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/southright{name = "Brig N2O Access";req_access = list(3)},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig)
+"azo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled,/area/security/prison)
+"azp" = (/obj/machinery/flasher{id = "permentryflash";name = "Floor mounted flash";pixel_x = 0},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/security/prison)
+"azq" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/security{c_tag = "Security - Cell 1";dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"azr" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge)
+"azs" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/security{c_tag = "Security - Cell 2";dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"azt" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/plating,/area/security/brig)
+"azu" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 1"},/obj/structure/filingcabinet/chestdrawer,/obj/machinery/light/small{dir = 8},/obj/machinery/requests_console{department = "Internal Affairs";departmentType = 5;pixel_x = -32},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 3";dir = 4},/turf/simulated/floor/carpet,/area/lawoffice)
+"azv" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 1"},/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 1"},/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/carpet,/area/lawoffice)
+"azw" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 8;id = "iaa"},/turf/simulated/floor/plating,/area/lawoffice)
+"azx" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"azy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"azz" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"azA" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"azB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azD" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/bridge)
+"azE" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/bridge)
+"azF" = (/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"azG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azI" = (/obj/machinery/computer/robotics,/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"azJ" = (/obj/machinery/atmospherics/unary/vent_pump/engine{dir = 4;external_pressure_bound = 100;external_pressure_bound_default = 0;frequency = 1438;icon_state = "map_vent_in";id_tag = "cooling_out";initialize_directions = 1;pressure_checks = 1;pressure_checks_default = 1;pump_direction = 0;use_power = 1},/turf/simulated/floor/greengrid/nitrogen{icon = 'icons/turf/flooring/plating.dmi';icon_state = "plating"},/area/engineering/engine_room)
+"azK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azL" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 10},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"azM" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked";id_tag = "engine_access_hatch";locked = 1;req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"azN" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"azO" = (/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Power";name_tag = "Engine Power"},/obj/structure/cable/orange,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"azP" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Output";name_tag = "Engine Output"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"azQ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azR" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Corridor Camera 3";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"azT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"azU" = (/turf/simulated/floor/tiled,/area/engineering/foyer)
+"azV" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/engineering)
+"azW" = (/turf/simulated/wall,/area/maintenance/substation/engineering)
+"azX" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"azY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"azZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAa" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAc" = (/turf/simulated/floor/asteroid,/area/syndicate_station/caverns)
+"aAd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAe" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/brig)
+"aAf" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/brig)
+"aAg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig)
+"aAh" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/security/brig)
+"aAi" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/brig)
+"aAj" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAl" = (/obj/item/weapon/shovel{pixel_x = 8},/obj/item/weapon/shovel{pixel_x = -8},/obj/item/weapon/shovel,/obj/structure/table/rack,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAm" = (/obj/machinery/computer/general_air_control{frequency = 1441;name = "Tank Monitor";sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/machinery/requests_console{department = "Atmospherics";departmentType = 4;name = "Atmos RC";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"aAn" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/brig)
+"aAo" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"aAp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/security/prison)
+"aAq" = (/obj/machinery/computer/general_air_control{frequency = 1443;level = 3;name = "Distribution and Waste Monitor";sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Engine Waste")},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"aAr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aAs" = (/turf/simulated/floor/tiled,/area/security/prison)
+"aAt" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aAu" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aAv" = (/obj/machinery/recharge_station,/turf/simulated/floor/greengrid,/area/security/brig)
+"aAw" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/security/brig)
+"aAx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/brig)
+"aAy" = (/obj/machinery/recharger/wallcharger{pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aAz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aAA" = (/obj/machinery/door/window/brigdoor/southright{dir = 4;icon_state = "rightsecure";name = "Distribution Post";req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aAB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/lawoffice)
+"aAC" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/lawoffice)
+"aAD" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/bulletproof{pixel_x = -2;pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2;pixel_y = -2},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastleft{name = "Bulletproof Armour Storage"},/obj/structure/window/reinforced{dir = 1},/obj/item/clothing/head/helmet/ballistic,/obj/item/clothing/head/helmet/ballistic,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aAE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aAF" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder)
+"aAG" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder)
+"aAH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder)
+"aAI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aAJ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig)
+"aAK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aAL" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled,/area/security/brig)
+"aAM" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison)
+"aAN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
+"aAO" = (/obj/structure/toilet{dir = 4;pixel_y = 5},/turf/simulated/floor/tiled,/area/security/prison)
+"aAP" = (/obj/structure/closet/secure_closet/brig{id = "Cell 1";name = "Cell 1 Locker"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aAQ" = (/obj/structure/closet/secure_closet/brig{id = "Cell 2";name = "Cell 2 Locker"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aAR" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "IAA Cubical 2"},/obj/structure/filingcabinet/chestdrawer,/obj/machinery/light/small{dir = 8},/obj/machinery/requests_console{department = "Internal Affairs";departmentType = 5;pixel_x = -32},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 2";dir = 4},/turf/simulated/floor/carpet,/area/lawoffice)
+"aAS" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "IAA Cubical 2"},/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 2"},/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/carpet,/area/lawoffice)
+"aAT" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/engineering/engine_waste)
+"aAU" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "IAA Cubical 2"},/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/lawoffice)
+"aAV" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aAW" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_x = 3;pixel_y = 3},/obj/item/device/taperecorder,/turf/simulated/floor/wood,/area/lawoffice)
+"aAX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aAY" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/computer/security/engineering,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aAZ" = (/obj/effect/floor_decal/corner/blue/full,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge)
+"aBa" = (/obj/machinery/computer/prisoner,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aBb" = (/obj/machinery/recharger/wallcharger{pixel_x = 6;pixel_y = -32},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/bridge)
+"aBc" = (/obj/structure/closet/radiation,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aBd" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge)
+"aBe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/bridge)
+"aBf" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aBg" = (/obj/machinery/light_switch{pixel_y = -20},/obj/structure/sign/nosmoking_1{pixel_y = -36},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/bridge)
+"aBh" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Bridge";departmentType = 5;name = "Bridge RC";pixel_y = -30},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aBi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"aBj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"aBk" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aBl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/atmos/monitoring)
+"aBm" = (/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aBn" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aBo" = (/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/purple{icon_state = "corner_white";dir = 9},/obj/item/modular_computer/console/preset/research,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aBp" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aBq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port.";id = "SupermatterPort";name = "Reactor Blast Doors";pixel_x = -25;pixel_y = -5;req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors.";id = "EngineBlast";name = "Engine Monitoring Room Blast Doors";pixel_x = -25;pixel_y = 5;req_access = list(10)},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aBr" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/maintenance/engineering)
+"aBs" = (/obj/structure/cable/orange{icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aBt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{name = "Engine Monitoring Room Blast Doors";icon_state = "pdoor0";dir = 2;opacity = 0;density = 0;id = "EngineBlast"},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"aBu" = (/obj/item/device/radio/intercom{layer = 4;name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aBv" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aBw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aBx" = (/obj/machinery/newscaster{layer = 3.3;pixel_x = 0;pixel_y = -27},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aBy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aBz" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aBA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"aBB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aBC" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/tiled,/area/security/brig)
+"aBD" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage";req_one_access = list(11,24)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aBE" = (/turf/simulated/wall,/area/security/warden)
+"aBF" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aBG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aBH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aBI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aBJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/security/warden)
+"aBK" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aBL" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"aBM" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/engine_monitoring)
+"aBN" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Monitoring Room";req_access = list(24)},/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring)
+"aBO" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Engineering"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aBP" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engineering Subgrid";name_tag = "Engineering Subgrid"},/obj/machinery/alarm{pixel_y = 22},/obj/machinery/light/small{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engineering Substation"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aBQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE";pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/engineering)
+"aBR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/bed/chair/office/dark,/obj/machinery/recharger/wallcharger{pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aBS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/lawoffice)
+"aBT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aBU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/steel_reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aBV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/emps{pixel_x = -2;pixel_y = 2},/obj/item/weapon/storage/box/flashbangs{pixel_x = 2;pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aBW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aBX" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aBY" = (/obj/machinery/door/airlock/highsecurity{name = "Vault Elevator"},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"aBZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aCa" = (/turf/simulated/wall/r_wall,/area/teleporter)
+"aCb" = (/obj/machinery/door/airlock/maintenance{req_access = list(20)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/teleporter)
+"aCc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge)
+"aCd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge)
+"aCe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aCf" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aCg" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/warden)
+"aCh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Warden's Office";req_access = list(3)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aCi" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/warden)
+"aCj" = (/obj/machinery/door/firedoor,/obj/structure/table/steel_reinforced,/obj/item/weapon/paper_bin{pixel_x = 5},/obj/item/weapon/pen,/obj/machinery/door/window/brigdoor/southright{name = "Warden's Desk";req_access = list(3)},/obj/machinery/door/window/brigdoor/northleft{name = "Warden's Desk"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/warden)
+"aCk" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry";name = "Brig Entry";req_access = list(2)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aCl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/prison)
+"aCm" = (/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/rods,/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aCn" = (/turf/simulated/floor/tiled,/area/engineering/storage)
+"aCo" = (/obj/machinery/door/blast/regular{id = "Cell 1";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aCp" = (/obj/machinery/door/blast/regular{id = "Cell 2";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aCq" = (/obj/machinery/vending/engivend,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aCr" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aCs" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aCt" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/windowtint{id = "IAA Cubicle 2";pixel_x = -24;pixel_y = 7},/turf/simulated/floor/carpet,/area/lawoffice)
+"aCu" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "IAA Cubical 2"},/turf/simulated/floor/carpet,/area/lawoffice)
+"aCv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "iaa"},/obj/structure/window/reinforced/polarized{dir = 4;id = "iaa"},/obj/structure/window/reinforced/polarized{id = "iaa"},/turf/simulated/floor/plating,/area/lawoffice)
+"aCw" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{anchored = 0;department = "Internal Affairs"},/turf/simulated/floor/wood,/area/lawoffice)
+"aCx" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aCy" = (/obj/machinery/papershredder,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCz" = (/obj/machinery/vending/snack,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCA" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/machinery/camera/network/civilian_west{c_tag = "Vault - Secure Lift";dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/shuttle/lifts/placeholder)
+"aCB" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge)
+"aCC" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aCD" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aCE" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aCF" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{icon_state = "map";dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aCG" = (/obj/structure/cable/orange,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aCH" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aCI" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aCJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aCK" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aCL" = (/obj/structure/table/standard,/obj/machinery/cell_charger{pixel_y = 4},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aCM" = (/obj/machinery/vending/tool,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aCN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCO" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Lobby Fore"},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"aCQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"aCR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"aCS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/brig)
+"aCT" = (/obj/machinery/requests_console{announcementConsole = 0;department = "Engineering";departmentType = 4;name = "Engineering RC";pixel_x = 0;pixel_y = 28},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCU" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCV" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCW" = (/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aCX" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/machinery/computer/station_alert/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCY" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aCZ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aDa" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aDb" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aDc" = (/obj/machinery/computer/arcade,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aDd" = (/obj/machinery/door/airlock/engineering{name = "Engineering Substation";req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/substation/engineering)
+"aDe" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aDf" = (/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aDg" = (/obj/machinery/door/airlock/engineering{name = "Engineering Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aDh" = (/obj/structure/toilet{pixel_y = 5},/turf/simulated/floor/tiled,/area/security/prison)
+"aDi" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"aDj" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aDk" = (/obj/machinery/door/firedoor,/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/southright{name = "Armoury Distribution";req_access = list(2)},/obj/machinery/door/window/brigdoor/southright{dir = 1;icon_state = "rightsecure";name = "Armoury Distribution";req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aDl" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 2"},/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/carpet,/area/lawoffice)
+"aDm" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 2"},/turf/simulated/floor/carpet,/area/lawoffice)
+"aDn" = (/obj/structure/window/reinforced/polarized{id = "IAA Cubical 2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/lawoffice)
+"aDo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/lawoffice)
+"aDp" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass_security{name = "Armory";req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aDq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
+"aDr" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/security/armoury)
+"aDs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aDt" = (/obj/machinery/door/blast/regular{id = "armoury";name = "Emergency Access"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"aDu" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Holding Cell";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig)
+"aDv" = (/turf/simulated/floor/tiled,/area/teleporter)
+"aDw" = (/obj/structure/table/standard,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/item/weapon/hand_tele,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/teleporter)
+"aDx" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled,/area/teleporter)
+"aDy" = (/obj/item/device/radio/beacon,/obj/machinery/camera/network/command{c_tag = "Bridge - Teleporter"},/turf/simulated/floor/tiled,/area/teleporter)
+"aDz" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/teleporter)
+"aDA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/clipboard,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]";name = "Armory Inventory"},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aDB" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/teleporter)
+"aDC" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/grass,/area/bridge)
+"aDD" = (/turf/simulated/floor/grass,/area/bridge)
+"aDE" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aDF" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/button/remote/airlock{id = "prisonentry";name = "Entry Doors";pixel_x = -28;pixel_y = 26;req_access = list(2)},/obj/machinery/button/flasher{id = "permentryflash";name = "entry flash";pixel_x = 28;pixel_y = 26;req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/button/remote/airlock{id = "prisonexit";name = "Entry Doors";pixel_x = -28;pixel_y = 36;req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aDG" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/security/prison)
+"aDH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden)
+"aDI" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/security/prison)
+"aDJ" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge)
+"aDK" = (/obj/item/device/radio/intercom{desc = "Talk... listen through this.";name = "Station Intercom (Brig Radio)";pixel_x = 0;pixel_y = 25;wires = 7},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aDL" = (/obj/machinery/computer/arcade,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aDM" = (/obj/structure/table/standard,/obj/machinery/librarycomp,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aDN" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aDO" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison)
+"aDP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aDQ" = (/turf/simulated/wall/r_wall,/area/engineering/engine_airlock)
+"aDR" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/prison)
+"aDS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/prison)
+"aDT" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/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/simulated/floor/plating,/area/engineering/engine_airlock)
+"aDU" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
+"aDV" = (/obj/structure/closet/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aDW" = (/obj/structure/sink{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/security{c_tag = "Security - Cell 3";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/prison)
+"aDX" = (/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/glass/phoronrglass{amount = 20},/obj/item/stack/material/plastic{amount = 50},/obj/item/stack/material/plastic{amount = 50},/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aDY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aDZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aEa" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/lawoffice)
+"aEb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{desc = "It opens and closes. Bring your relationship affairs here.";name = "Internal Affairs";req_access = list(38)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
+"aEc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aEd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEe" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aEf" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEg" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/teleporter)
+"aEh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"aEi" = (/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
+"aEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/bridge)
+"aEk" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aEl" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
+"aEm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"aEn" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aEo" = (/obj/effect/floor_decal/corner/paleblue/full,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aEp" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Aft";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aEq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aEr" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aEs" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aEt" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aEu" = (/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{id_tag = "engine_room_airlock";name = "Engine Room Airlock";pixel_x = -24;tag_airpump = "engine_airlock_pump";tag_chamber_sensor = "eng_al_c_snsr";tag_exterior_door = "engine_airlock_exterior";tag_exterior_sensor = "eng_al_ext_snsr";tag_interior_door = "engine_airlock_interior";tag_interior_sensor = "eng_al_int_snsr"},/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aEv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aEw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aEx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aEy" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/security/warden)
+"aEz" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aEA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aEB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aEC" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aED" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aEE" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEI" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEJ" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aEK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
+"aEL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "E.V.A. Maintenance";req_access = list(12,18)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aEM" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Camera Corridor 5";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aEN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aEO" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aEP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/banner,/turf/simulated/floor/wood,/area/lawoffice)
+"aEQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/papershredder,/turf/simulated/floor/wood,/area/lawoffice)
+"aER" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/lawoffice)
+"aES" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/brig)
+"aET" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aEU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aEV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aEW" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/teleporter)
+"aEX" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/teleporter)
+"aEY" = (/obj/machinery/shieldwallgen,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/teleporter)
+"aEZ" = (/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"aFa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aFb" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aFc" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/bridge)
+"aFd" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aFe" = (/obj/machinery/button/remote/blast_door{id = "Cell 1";name = "Cell 1 Door";pixel_x = -38;pixel_y = 15;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 2";name = "Cell 2 Door";pixel_x = -38;pixel_y = 7;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 3";name = "Cell 3 Door";pixel_x = -38;pixel_y = -1;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 4";name = "Cell 4 Door";pixel_x = -28;pixel_y = 15;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Cell 5";name = "Cell 5 Door";pixel_x = -28;pixel_y = 7;req_access = list(3)},/obj/machinery/button/remote/blast_door{id = "Brig Lockdown";name = "Brig Lockdown";pixel_x = -28;pixel_y = -1;req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aFf" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aFg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden)
+"aFh" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aFi" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
+"aFj" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/prison)
+"aFk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison)
+"aFl" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison)
+"aFm" = (/obj/machinery/door/blast/regular{dir = 1;id = "Cell 3";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aFn" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/eastright{id = "Cell 3";name = "Cell 3";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aFo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/security/prison)
+"aFp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aFq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aFr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/wood,/area/lawoffice)
+"aFs" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/lawoffice)
+"aFt" = (/obj/structure/table/woodentable,/obj/item/weapon/folder{pixel_x = 5;pixel_y = 5},/obj/item/weapon/folder/blue{pixel_y = 5},/obj/item/weapon/folder/red{pixel_x = -5;pixel_y = 5},/obj/item/weapon/folder/white{pixel_x = 5},/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/denied{pixel_x = -3;pixel_y = 4},/obj/item/weapon/stamp/internalaffairs,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/security{c_tag = "Internal Affairs - Camera 1";dir = 8},/turf/simulated/floor/wood,/area/lawoffice)
+"aFu" = (/obj/machinery/atm{pixel_x = -32},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Internal Affairs Entrance";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aFv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aFw" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/teleporter)
+"aFx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/teleporter)
+"aFy" = (/obj/machinery/shieldwallgen,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/teleporter)
+"aFz" = (/obj/structure/flora/ausbushes/ppflowers,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/grass,/area/bridge)
+"aFA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"aFB" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/bridge)
+"aFC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"aFD" = (/obj/structure/flora/ausbushes/ywflowers,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/grass,/area/bridge)
+"aFE" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1;dir = 4;icon_state = "circ-off"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aFF" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{icon_state = "intact";dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aFG" = (/obj/machinery/atmospherics/valve/digital{dir = 1;icon_state = "map_valve0";name = "Emergency Cooling Valve 1";tag = "icon-map_valve0 (NORTH)"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aFH" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aFI" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379;icon_state = "door_closed";id_tag = "engine_airlock_interior";locked = 0;name = "Engine Airlock Interior";req_access = list(11)},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aFJ" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379;icon_state = "door_closed";id_tag = "engine_airlock_exterior";locked = 0;name = "Engine Airlock Exterior";req_access = list(11)},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aFK" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2;frequency = 1379;id = "tox_airlock_pump"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aFL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aFM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aFN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aFO" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aFP" = (/obj/machinery/door/airlock/maintenance_hatch{icon_state = "door_closed";locked = 0;name = "Engine Access";req_one_access = list(11)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aFQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aFR" = (/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aFS" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/machinery/camera/network/engineering{c_tag = "Engineering - EVA Storage";dir = 4},/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aFT" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/security/brig)
+"aFU" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aFV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage";req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aFW" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aFX" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aFY" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aFZ" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGa" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGb" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGc" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGd" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/effect/landmark/start{name = "Engineering Apprentice"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGe" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGf" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{dir = 2;icon_state = "pipe-j1s";name = "Engineering";sortType = "Engineering"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGg" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -2;pixel_y = 5},/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aGh" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGi" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Hardsuits";req_one_access = list(5)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGk" = (/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGl" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGm" = (/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Hardsuits";req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGo" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGp" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/security,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/security,/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aGq" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/security/prison)
+"aGr" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/security/prison)
+"aGs" = (/obj/structure/table/standard,/obj/item/weapon/newspaper,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aGt" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aGu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGw" = (/obj/structure/bed,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled,/area/security/prison)
+"aGx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/brig)
+"aGy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{name = "HoS Office";sortType = "HoS Office"},/turf/simulated/floor/tiled,/area/security/brig)
+"aGA" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/brig)
+"aGC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 4";dir = 1},/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/brig)
+"aGD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGF" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard)
+"aGG" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aGH" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter)
+"aGI" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/teleporter)
+"aGJ" = (/obj/machinery/teleport/hub,/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/teleporter)
+"aGK" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/teleporter)
+"aGL" = (/obj/machinery/shieldwallgen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/teleporter)
+"aGM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"aGN" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/bridge)
+"aGO" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/grass,/area/bridge)
+"aGP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig)
+"aGQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aGR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aGS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aGT" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge)
+"aGU" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/newscaster{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aGV" = (/obj/structure/closet/secure_closet/warden,/obj/item/device/megaphone,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/obj/item/device/multitool,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aGW" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aGX" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor/southleft{name = "Brig Delivery Door";req_access = newlist()},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aGY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden)
+"aGZ" = (/obj/machinery/flasher{id = "permflash";name = "Floor mounted flash";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aHa" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "d_n2_in";use_power = 1},/turf/simulated/floor/tiled,/area/security/prison)
+"aHb" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3";name = "Cell 3 Locker"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/security/prison)
+"aHc" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig)
+"aHd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aHe" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aHf" = (/obj/structure/table/standard,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aHl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/lawoffice)
+"aHm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{desc = "It opens and closes. Bring your relationship affairs here.";name = "Internal Affairs";req_access = list(38)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/lawoffice)
+"aHn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice)
+"aHo" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice)
+"aHp" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHq" = (/obj/structure/table/gamblingtable,/obj/item/weapon/book/manual/supermatter_engine,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/newscaster{pixel_y = -27},/turf/simulated/floor/wood,/area/lawoffice)
+"aHs" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/door/window/westleft{name = "Internal Affairs Desk";req_access = list(38)},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "iaa_desk";name = "IAA Privacy Shutters";opacity = 0},/turf/simulated/floor/wood,/area/lawoffice)
+"aHt" = (/obj/machinery/light_switch{pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/teleporter)
+"aHu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"aHv" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aHw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aHx" = (/obj/structure/table/reinforced,/obj/item/clothing/head/welding,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aHy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aHz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"aHA" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aHB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aHC" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Command Deck Entrance";dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aHD" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hos)
+"aHE" = (/obj/machinery/atmospherics/valve/digital{tag = "icon-map_valve0 (NORTH)";name = "Emergency Cooling Valve 2";icon_state = "map_valve0";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aHF" = (/obj/machinery/power/generator{anchored = 1},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aHG" = (/obj/machinery/power/generator{anchored = 1},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aHH" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aHI" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aHJ" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aHK" = (/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "eng_al_c_snsr";pixel_x = -25;pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Engine Airlock";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aHL" = (/turf/simulated/wall/r_wall,/area/security/lobby)
+"aHM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"aHN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/engineering/engine_airlock)
+"aHO" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/plating,/area/engineering/storage)
+"aHP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage";req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor/northleft{name = "Security Office"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig)
+"aHR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aHS" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHU" = (/obj/item/weapon/stool/padded,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHV" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aHX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1;pixel_y = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aHZ" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aIa" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aIb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aIc" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aId" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aIe" = (/obj/structure/table/standard,/obj/item/toy/blink,/turf/simulated/floor/tiled,/area/security/prison)
+"aIf" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/security,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/security,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aIg" = (/obj/structure/reagent_dispensers/water_cooler,/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/floor/tiled,/area/security/prison)
+"aIh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 8;id = "HoS Windows"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
+"aIi" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aIj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 4;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
+"aIk" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aIl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
+"aIm" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 8;id = "HoS Windows"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
+"aIn" = (/obj/machinery/door/airlock/command{desc = "It opens and closes. It does not look very robust.";id_tag = "HoSdoor";name = "Head of Security";req_access = list(58)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hos)
+"aIo" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{dir = 4;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
+"aIp" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "HoS Windows"},/obj/structure/window/reinforced/polarized{id = "HoS Windows"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
+"aIq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer";layer = 2.8;name = "Security Wing";req_access = list(63)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/lobby)
+"aIr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer";layer = 2.8;name = "Security Wing";req_access = list(63)},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/lobby)
+"aIs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/lobby)
+"aIt" = (/turf/simulated/wall/r_wall,/area/bridge/meeting_room)
+"aIu" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/brig)
+"aIv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
+"aIw" = (/obj/machinery/door/firedoor,/obj/machinery/door/window/brigdoor/northright{name = "Security Office"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig)
+"aIx" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
+"aIy" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
+"aIz" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aIA" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aIB" = (/obj/machinery/atmospherics/pipe/manifold/visible/green,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aIC" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aID" = (/obj/machinery/recharger/wallcharger{pixel_x = -32;pixel_y = -6},/obj/structure/reagent_dispensers/peppertank{pixel_x = -30;pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aIE" = (/obj/machinery/button/flasher{id = "permflash";name = "Brig flashes";pixel_x = 28;pixel_y = 28;req_access = list(2)},/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aIF" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring)
+"aIG" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aIH" = (/obj/machinery/door/airlock/glass_security{name = "Warden's Office";req_access = list(3)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/warden)
+"aII" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled,/area/security/prison)
+"aIJ" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aIK" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/security/prison)
+"aIL" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/prison)
+"aIM" = (/obj/item/device/radio/intercom/locked{pixel_x = -27},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Corridor Camera 3";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aIN" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aIO" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aIP" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Teleport Access";req_access = list(17)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/teleporter)
+"aIQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"aIR" = (/obj/structure/table/gamblingtable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aIS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"aIT" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aIU" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/bridge)
+"aIV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"aIW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"aIX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aIY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"aIZ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aJa" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aJb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"aJc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"aJd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"aJe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/meeting_room)
+"aJf" = (/obj/structure/bookcase/manuals,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/tiled,/area/security/lobby)
+"aJg" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 10},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aJh" = (/obj/machinery/atmospherics/binary/circulator{anchored = 1;dir = 8;icon_state = "circ-off"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aJi" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/engine_monitoring)
+"aJj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'";icon_state = "radiation";name = "RADIOACTIVE AREA";pixel_x = 0;pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_airlock)
+"aJk" = (/obj/structure/banner,/turf/simulated/floor/tiled,/area/security/lobby)
+"aJl" = (/obj/structure/table/standard,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3;pixel_y = 0},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aJm" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_2{pixel_x = 0;pixel_y = -30},/turf/simulated/floor/tiled,/area/engineering/storage)
+"aJn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"aJo" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/machinery/door/window/southleft{dir = 1;name = "Engineering Hardsuits";req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aJp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/security{c_tag = "Security - Lobby Desk"},/turf/simulated/floor/tiled,/area/security/brig)
+"aJq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"aJr" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{dir = 1;name = "Engineering Hardsuits";req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aJs" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southleft{dir = 1;name = "Engineering Hardsuits";req_access = list(11)},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aJt" = (/obj/machinery/suit_cycler,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/storage)
+"aJu" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aJv" = (/obj/machinery/newscaster{pixel_x = -27},/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aJw" = (/obj/item/weapon/stool/padded,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/obj/effect/landmark/start{name = "Chief Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aJx" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aJy" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/tiled,/area/security/prison)
+"aJz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
+"aJA" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/prison)
+"aJB" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aJC" = (/obj/structure/table/standard,/obj/item/weapon/dice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aJD" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aJE" = (/obj/structure/bookcase/manuals/engineering,/obj/item/weapon/book/manual/atmospipes,/obj/item/weapon/book/manual/engineering_guide,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aJF" = (/obj/machinery/requests_console{department = "EVA";pixel_x = -32;pixel_y = 0},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2;pixel_y = -1},/obj/item/device/multitool,/obj/machinery/camera/network/security{c_tag = "EVA - Port Camera";dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aJG" = (/obj/structure/table/reinforced,/obj/machinery/camera/network/security{c_tag = "EVA - Starboard Camera";dir = 8},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aJH" = (/obj/machinery/suit_cycler/security,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aJI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/papershredder,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aJJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aJK" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJL" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJM" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJN" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJO" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJQ" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJR" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aJS" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aJT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/banner,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aJU" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby)
+"aJV" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 5},/obj/item/weapon/pen,/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor/tiled,/area/security/lobby)
+"aJW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aJX" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aJY" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
+"aJZ" = (/obj/machinery/computer/secure_data,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"aKa" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig)
+"aKb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -25},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aKc" = (/obj/machinery/door/airlock/glass_security{name = "Warden's Office";req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/security/brig)
+"aKd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/westleft{name = "Brig Delivery Door";req_access = list(3)},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aKe" = (/turf/simulated/wall,/area/bridge/meeting_room)
+"aKf" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/device/radio/intercom{pixel_y = -28},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aKh" = (/obj/machinery/photocopier,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/requests_console{department = "Warden's Desk";departmentType = 5;pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aKi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/disposal/deliveryChute{desc = "A chute for big and small packages alike! You see something shiny inside. Maybe you should take a look?";dir = 8;name = "disposal inlet"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Warden's Office";dir = 1},/turf/simulated/floor/tiled/dark,/area/security/warden)
+"aKj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/warden)
+"aKk" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison)
+"aKl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/prison)
+"aKm" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aKn" = (/obj/structure/toilet{pixel_x = 0;pixel_y = 5},/turf/simulated/floor/tiled,/area/security/prison)
+"aKo" = (/obj/structure/sink{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/security{c_tag = "Security - Cell 4";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/prison)
+"aKp" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aKq" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "";layer = 2.8;name = "Security Starboard Entrance";req_access = list(63)},/turf/simulated/floor/tiled,/area/security/brig)
+"aKr" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aKs" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge)
+"aKt" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aKu" = (/obj/machinery/door/airlock/glass_command{id_tag = "sbridgedoor";name = "Bridge";req_access = list(19)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"aKv" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge)
+"aKw" = (/turf/simulated/wall/r_wall,/area/maintenance/research_port)
+"aKx" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aKy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge)
+"aKz" = (/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aKA" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge)
+"aKB" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge)
+"aKC" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Corridor Camera 3"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge)
+"aKD" = (/obj/structure/noticeboard{pixel_y = 32},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge)
+"aKE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/bridge)
+"aKF" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"aKG" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aKH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aKI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aKJ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKK" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKL" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKM" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKN" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aKO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aKP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aKR" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aKS" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aKT" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aKU" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aKV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aKW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aKX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aKY" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/device/flashlight/heavy,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aKZ" = (/obj/machinery/newscaster{pixel_x = -27},/turf/simulated/floor/tiled,/area/security/lobby)
+"aLa" = (/turf/simulated/floor/tiled,/area/security/lobby)
+"aLb" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aLc" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact";dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aLd" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{icon_state = "map";dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aLe" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aLf" = (/obj/machinery/atmospherics/pipe/zpipe/up/supply,/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aLg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig)
+"aLh" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/cable{icon_state = "11-2"},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/research_port)
+"aLi" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aLj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/prison)
+"aLk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/prison)
+"aLl" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aLm" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLo" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/landmark/start{name = "Engineering Apprentice"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLq" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLs" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLt" = (/obj/structure/bookcase/manuals/engineering,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aLv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLx" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLy" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aLz" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aLA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aLB" = (/obj/structure/table/reinforced,/obj/structure/extinguisher_cabinet{pixel_x = 25;pixel_y = 0},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aLC" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aLD" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aLE" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/window/eastleft{name = "Security Office Windoor";req_access = list(63)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig)
+"aLF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aLG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/bridge)
+"aLH" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the brig foyer.";id = "BrigFoyer";name = "Brig Foyer Doors";pixel_x = -28;pixel_y = 7},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aLI" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig)
+"aLJ" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aLK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/security/prison)
+"aLL" = (/obj/machinery/door/blast/regular{dir = 1;id = "Cell 4";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aLM" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/eastright{id = "Cell 4";name = "Cell 4";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aLN" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/brig)
+"aLP" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLQ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLR" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine,/obj/machinery/light_switch{pixel_x = -22},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aLS" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLT" = (/obj/structure/bed/chair/office/dark,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aLU" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aLV" = (/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aLW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aLX" = (/turf/simulated/wall/r_wall,/area/bridge/ailobby)
+"aLY" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 5},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aLZ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 4},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aMa" = (/obj/machinery/atmospherics/pipe/manifold/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aMb" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aMc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/junction/yjunction{icon_state = "pipe-y";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMe" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMf" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aMg" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMh" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aMi" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/chief)
+"aMj" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMn" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMo" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aMp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "HoP Office";sortType = "HoP Office"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aMq" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge)
+"aMr" = (/obj/machinery/computer/guestpass{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aMs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aMt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aMu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aMv" = (/obj/machinery/light{dir = 4},/obj/machinery/computer/guestpass{pixel_x = 32},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aMw" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aMx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aMy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aMz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/bridge)
+"aMA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aMB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aMC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/bridge)
+"aMD" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aME" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aMF" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aMG" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aMH" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aMI" = (/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aMJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aMK" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aML" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine radiator viewport shutters.";id = "EngineRadiatorViewport";name = "Engine Radiator Viewport Shutters";pixel_x = 0;pixel_y = -25;req_access = list(10)},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aMM" = (/obj/machinery/atmospherics/binary/pump/high_power{icon_state = "map_off";dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aMO" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aMP" = (/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 25},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aMQ" = (/obj/machinery/power/apc/high{dir = 1;name = "north bump";pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aMR" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/brig)
+"aMS" = (/obj/structure/table/rack,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aMT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aMU" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/papershredder,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aMV" = (/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aMW" = (/obj/structure/urinal{pixel_y = 32},/obj/item/toy/figure/warden,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aMX" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aMY" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/obj/structure/window/reinforced/polarized{dir = 8;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aMZ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/secure_closet/engineering_personal,/obj/item/device/flashlight,/obj/item/device/gps/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aNa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/security/prison)
+"aNb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/security/prison)
+"aNc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/security/prison)
+"aNd" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aNe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aNf" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hardsuits";req_one_access = list(11,24)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aNg" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3;pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/obj/structure/table/reinforced,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aNh" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aNi" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aNj" = (/obj/machinery/computer/secure_data,/obj/structure/sign/goldenplaque{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Head of Security's Office";dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aNk" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/blue{pixel_x = -5},/obj/item/weapon/pen/red,/obj/item/weapon/stamp/hos{pixel_x = -5;pixel_y = 7},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aNl" = (/obj/structure/bed/chair/comfy/red{dir = 4},/obj/machinery/button/remote/blast_door{id = "Security Lockdown";name = "Security Lockdown";pixel_x = 38;pixel_y = 38;req_access = list(58)},/obj/machinery/button/remote/airlock{id = "HoSdoor";name = "Office Door";pixel_x = 27;pixel_y = 38},/obj/machinery/button/windowtint{id = "HoS Windows";pixel_x = 26;pixel_y = 28;req_access = list(58)},/obj/machinery/button/remote/blast_door{id = "armoury";name = "Armoury Shutters";pixel_x = 38;pixel_y = 28;req_access = list(58)},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aNm" = (/obj/structure/table/woodentable,/obj/item/device/megaphone,/obj/item/device/radio,/obj/item/device/taperecorder,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aNn" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNp" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby)
+"aNq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby)
+"aNr" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/lobby)
+"aNs" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNt" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aNu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aNv" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/window/eastright{name = "Security Office Windoor";req_access = list(63)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/brig)
+"aNw" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{id = "visitdoor";name = "Visitation Access";pixel_x = -28;pixel_y = -7},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aNx" = (/obj/structure/filingcabinet,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aNy" = (/obj/machinery/door/airlock{desc = "It opens and closes. A repulsive smell eminates from the door.";name = "Brig Toilet"},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aNz" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/item/weapon/soap/nanotrasen,/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aNA" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/security/prison)
+"aNB" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/security/prison)
+"aNC" = (/obj/machinery/flasher{id = "permflash";name = "Floor mounted flash";pixel_x = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aND" = (/obj/structure/closet/secure_closet/brig{id = "Cell 4";name = "Cell 4 Locker"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/security/prison)
+"aNE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"aNF" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aNG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNH" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "";layer = 2.8;name = "Security Starboard Entrance";req_access = list(63)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"aNI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNJ" = (/obj/structure/toilet{dir = 4},/obj/structure/window/reinforced/tinted,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aNK" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aNL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNM" = (/obj/item/device/radio/intercom{pixel_y = -27},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNO" = (/obj/structure/sign/directions/medical{dir = 8;icon_state = "direction_med";pixel_y = -24},/obj/structure/sign/directions/science{dir = 8;icon_state = "direction_sci";pixel_x = 0;pixel_y = -30},/obj/structure/sign/directions/engineering{dir = 8;icon_state = "direction_eng";pixel_x = 0;pixel_y = -38},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNP" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aNT" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge)
+"aNU" = (/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aNV" = (/obj/machinery/door/airlock/glass_command{id_tag = "sbridgedoor";name = "Bridge";req_access = list(19)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aNW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aNX" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aNY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"aNZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"aOa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"aOb" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aOd" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/turf/simulated/floor/tiled,/area/bridge)
+"aOe" = (/obj/machinery/door/airlock/command{name = "Head of Staff Preparation";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aOf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aOh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aOi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aOj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aOk" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aOl" = (/obj/machinery/keycard_auth{pixel_x = -28},/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aOm" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aOn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos)
+"aOo" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aOp" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/cups,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aOq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby)
+"aOr" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/structure/curtain/open/shower,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aOs" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "EngineRadiatorViewport";name = "Engine Radiator Viewport Shutter";opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aOt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "EngineRadiatorViewport";name = "Engine Radiator Viewport Shutter";opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"aOu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aOv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aOw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/tiled,/area/security/brig)
+"aOx" = (/obj/machinery/photocopier,/obj/machinery/recharger/wallcharger{pixel_y = -26},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"aOy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/machinery/recharger/wallcharger{pixel_y = -26},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"aOz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aOA" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aOB" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aOC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aOD" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Chief Engineer's Desk";departmentType = 6;name = "Chief Engineer RC";pixel_x = -34;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aOE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
+"aOF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aOG" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/tiled,/area/security/prison)
+"aOH" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/security/prison)
+"aOI" = (/obj/machinery/newscaster{pixel_x = 27},/turf/simulated/floor/tiled,/area/security/prison)
+"aOJ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 8;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aOK" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOM" = (/turf/simulated/wall,/area/security/detectives_office)
+"aON" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Lobby Aft";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOO" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Engineering Break Room";sortType = "Engineering Break Room"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOP" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOQ" = (/obj/item/device/radio/intercom{dir = 0;name = "Station Intercom (General)";pixel_x = 27},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aOS" = (/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = -30},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1;pixel_y = -1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aOT" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aOU" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"aOV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "E.V.A.";req_one_access = list(18)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aOW" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aOX" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby)
+"aOY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby)
+"aOZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aPa" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
+"aPb" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aPc" = (/obj/machinery/computer/station_alert,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/security/brig)
+"aPd" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_y = -32},/obj/effect/floor_decal/corner/blue/full,/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled,/area/security/brig)
+"aPe" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 3;pixel_y = 6},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/security/brig)
+"aPf" = (/obj/structure/toilet{desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. It has stains on the seat. Ew.";dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aPg" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aPh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aPi" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aPj" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aPk" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aPl" = (/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aPm" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aPn" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Communal Bathroom";dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aPo" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/security/prison)
+"aPp" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aPq" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aPr" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/tiled,/area/security/prison)
+"aPs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aPt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/brig)
+"aPu" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aPv" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aPw" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "detdoor";name = "Detective";req_access = list(4)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aPx" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aPy" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aPz" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aPA" = (/turf/simulated/wall,/area/engineering/foyer)
+"aPB" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aPC" = (/obj/machinery/atm{pixel_x = -32},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aPD" = (/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aPE" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/command{name = "Head of Personnel";req_access = list(57)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aPF" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aPG" = (/obj/machinery/suit_cycler/medical,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aPH" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aPI" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aPJ" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "captaindoor";name = "Captain's Office";req_access = list(20)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aPK" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "cap"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aPL" = (/obj/item/device/radio/intercom{pixel_y = -28},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aPM" = (/obj/machinery/newscaster{pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aPN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aPO" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"aPP" = (/obj/structure/extinguisher_cabinet{pixel_x = 30},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aPQ" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine{department = "Head of Security"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aPR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
+"aPS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aPT" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/security/lobby)
+"aPU" = (/turf/simulated/wall/r_wall,/area/security/prison)
+"aPV" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aPW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aPX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aPY" = (/obj/machinery/door/airlock{name = "Brig Showers"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aPZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled/white,/area/security/prison)
+"aQa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aQb" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1},/turf/simulated/floor/tiled,/area/security/prison)
+"aQc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/simulated/floor/tiled,/area/security/prison)
+"aQd" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aQe" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/seed_storage,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aQf" = (/obj/machinery/button/remote/driver{id = "enginecore";name = "Emergency Core Eject";pixel_x = -20;pixel_y = 0},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief)
+"aQg" = (/obj/structure/table/standard,/obj/item/weapon/stamp/ce,/obj/item/clothing/glasses/welding/superior,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/item/clothing/glasses/meson,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aQh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 8;id = null},/obj/structure/window/reinforced/polarized,/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aQi" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/camera/network/engineering{c_tag = "Engineering - Chief Engineer's Office";dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aQj" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQk" = (/obj/structure/coatrack,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aQl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQm" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction{sortType = "CE Office";name = "CE Office"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQn" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQo" = (/obj/machinery/papershredder,/turf/simulated/floor/lino,/area/security/detectives_office)
+"aQp" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/lino,/area/security/detectives_office)
+"aQq" = (/obj/machinery/computer/security,/turf/simulated/floor/lino,/area/security/detectives_office)
+"aQr" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aQs" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aQt" = (/turf/simulated/wall,/area/maintenance/maintcentral)
+"aQu" = (/obj/structure/table/rack,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQv" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQw" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aQx" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQy" = (/obj/machinery/button/remote/blast_door{id = "Singuloth";name = "Engineering delivery Control";pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQz" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aQA" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = -7},/obj/item/stack/cable_coil{pixel_x = 3;pixel_y = -7},/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aQB" = (/obj/machinery/disposal,/obj/machinery/keycard_auth{pixel_x = 24},/obj/machinery/computer/guestpass{pixel_y = 32},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aQC" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aQD" = (/obj/structure/table/woodentable,/obj/item/weapon/pinpointer,/obj/item/weapon/disk/nuclear,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aQE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aQF" = (/obj/structure/closet/secure_closet/hos,/obj/item/device/multitool,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aQG" = (/obj/machinery/photocopier,/obj/machinery/requests_console{announcementConsole = 1;department = "Head of Security's Desk";departmentType = 5;name = "Head of Security RC";pixel_x = 0;pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aQH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aQI" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/device/flashlight/lamp/green{pixel_x = -6;pixel_y = 10},/obj/item/weapon/storage/secure/safe{pixel_x = 5;pixel_y = -30},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos)
+"aQJ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/lobby)
+"aQK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aQL" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aQM" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/prison)
+"aQN" = (/obj/item/toy/prize/deathripley{desc = "This is Johnny 5. Is he alive?";name = "Johnny 5"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison)
+"aQO" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/prison)
+"aQP" = (/obj/structure/sink{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/security{c_tag = "Security - Cell 5";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled,/area/security/prison)
+"aQQ" = (/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aQR" = (/obj/machinery/lapvend,/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aQS" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aQT" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aQU" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aQV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/woodentable,/obj/item/weapon/folder/red{pixel_x = 3;pixel_y = 2},/obj/item/weapon/folder/red,/obj/item/device/taperecorder,/turf/simulated/floor/lino,/area/security/detectives_office)
+"aQW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aQX" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera{name = "detectives camera";desc = "A one use - polaroid camera. 30 photos left.";pixel_x = 0;pixel_y = 0;pictures_left = 30},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aQY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aQZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aRa" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure";dir = 4;icon_state = "rightsecure";name = "Head of Personnel's Desk";req_access = list(57)},/obj/machinery/door/window/northleft{dir = 8;icon_state = "left";name = "Reception Window"},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "hop_office_desk";name = "HoP Office Privacy Shutters";opacity = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRb" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "hop_office_desk";name = "Desk Privacy Shutter";pixel_x = 32;pixel_y = 36},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRc" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/requests_console{announcementConsole = 1;department = "Head of Personnel's Desk";departmentType = 5;name = "Head of Personnel RC";pixel_x = 0;pixel_y = 30},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRd" = (/obj/machinery/button/windowtint{id = "hop";pixel_x = 5;pixel_y = 24},/obj/machinery/light_switch{pixel_x = -5;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRe" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/camera/network/command{c_tag = "Bridge - Captain's Office"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aRf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aRg" = (/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aRh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aRi" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/light_switch{pixel_y = 24},/obj/item/toy/figure/captain,/obj/structure/flora/pottedplant/random,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aRj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aRk" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Corridor Camera 2";dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"aRl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aRm" = (/obj/machinery/conveyor{backwards = 1;id = "Engie Delivery"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aRn" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aRo" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aRp" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Conference Room";dir = 1},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aRq" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aRr" = (/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/tiled,/area/security/lobby)
+"aRs" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Bathroom";dir = 1},/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aRt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby)
+"aRu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/security/lobby)
+"aRv" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aRw" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby)
+"aRx" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{icon_state = "intact";dir = 9},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aRy" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/security/prison)
+"aRz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/security/prison)
+"aRA" = (/obj/structure/window/reinforced/tinted/frosted,/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled/white,/area/security/prison)
+"aRB" = (/obj/structure/window/reinforced/tinted/frosted,/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/item/toy/figure/hos,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled/white,/area/security/prison)
+"aRC" = (/obj/machinery/keycard_auth{pixel_x = -24;pixel_y = 0},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core.";id = "EngineVent";name = "Engine Ventillatory Control";pixel_x = -24;pixel_y = 10;req_access = list(10)},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts.";id = "engine_access_hatch";name = "Engine Hatch Bolt Control";pixel_x = -24;pixel_y = -10;req_access = list(10);specialfunctions = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aRD" = (/obj/structure/table/standard,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/device/radio/off,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aRE" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/button/windowtint{pixel_x = 26;pixel_y = -20;range = 9},/obj/machinery/button/remote/airlock{id = "CEdoor";name = "Office Door Control";pixel_x = 36;pixel_y = -20;req_access = list(56)},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aRF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aRG" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aRH" = (/turf/simulated/floor/wood,/area/security/detectives_office)
+"aRI" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/command{id_tag = "CEdoor";name = "Chief Engineer";req_access = list(56)},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aRJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/woodentable,/obj/item/weapon/hand_labeler,/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aRK" = (/turf/simulated/floor/lino,/area/security/detectives_office)
+"aRL" = (/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aRM" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aRN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aRO" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aRP" = (/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aRQ" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aRR" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aRS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aRT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aRU" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aRV" = (/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRX" = (/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aRY" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/structure/sign/nosmoking_2{pixel_x = 32},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aRZ" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aSa" = (/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aSb" = (/obj/machinery/computer/security/engineering{name = "Drone Monitoring Cameras"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSc" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/obj/machinery/computer/station_alert/engineering,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSd" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSe" = (/obj/machinery/conveyor_switch/oneway{id = "Engie Delivery";name = "Engineering Conveyor"},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSf" = (/obj/machinery/door/airlock{name = "Private Restroom"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/bridge/ailobby)
+"aSg" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aSh" = (/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aSi" = (/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aSj" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aSk" = (/obj/machinery/suit_cycler/engineering,/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "E.V.A. Cycler Access";req_one_access = list(18)},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSm" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aSn" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/head/helmet/space/skrell/black,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/black,/obj/item/clothing/head/helmet/space/skrell/white,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/skrell/white,/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSo" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aSq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "visit_blast";name = "Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/lobby)
+"aSr" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8;name = "Visitation Window";req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aSs" = (/obj/machinery/door/blast/regular{dir = 1;id = "Cell 5";name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aSt" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/window/brigdoor/eastright{id = "Cell 5";name = "Cell 5";req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison)
+"aSu" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/security/brig)
+"aSv" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 3";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aSw" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aSx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aSy" = (/obj/machinery/suit_cycler/mining,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSA" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/machinery/button/windowtint{id = "Detective";pixel_x = -28;pixel_y = 8},/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aSB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSC" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/loading,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aSD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aSE" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aSF" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 1;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
+"aSG" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aSH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{base_state = "rightsecure";dir = 8;icon_state = "rightsecure";req_access = list(57)},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aSI" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aSJ" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 1;id = "cap"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aSK" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aSL" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge)
+"aSM" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/gps/engineering,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aSN" = (/obj/machinery/light,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/chief)
+"aSO" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 8;id = null},/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aSP" = (/obj/structure/table/rack,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/item/weapon/rig/ce/equipped,/obj/item/clothing/mask/breath,/turf/simulated/floor/wood,/area/crew_quarters/heads/chief)
+"aSQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aST" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aSU" = (/obj/structure/closet/crate,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aSV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aSW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aSX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aSY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/engineering/foyer)
+"aSZ" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/security/prison)
+"aTa" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/plating,/area/engineering/foyer)
+"aTb" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/security/prison)
+"aTc" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engineering/foyer)
+"aTd" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "Engineering Desk";req_access = list(32)},/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aTe" = (/obj/machinery/conveyor{backwards = 1;id = "Engie Delivery"},/obj/structure/plasticflaps,/obj/machinery/door/blast/shutters{id = "Singuloth";name = "Engineering delivery"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aTf" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aTg" = (/obj/structure/dispenser/oxygen,/obj/machinery/camera/network/security{c_tag = "EVA - Aft Camera";dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aTh" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/rig/unathi,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aTi" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/lino,/area/security/detectives_office)
+"aTj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aTk" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aTl" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aTm" = (/obj/structure/table/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,/area/maintenance/maintcentral)
+"aTn" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aTo" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aTp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aTq" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aTr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aTs" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aTt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aTu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aTv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/engineering)
+"aTw" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/security/lobby)
+"aTx" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aTy" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/item/weapon/hand_tele,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aTz" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aTA" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aTB" = (/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aTC" = (/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Lobby";dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/lobby)
+"aTD" = (/obj/machinery/alarm{dir = 1;pixel_y = -25},/turf/simulated/floor/tiled,/area/security/lobby)
+"aTE" = (/obj/machinery/door/airlock{id_tag = "visitdoor";name = "Visitation Area";req_access = list(63)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/lobby)
+"aTF" = (/obj/machinery/button/remote/blast_door{id = "visit_blast";name = "Privacy Shutters";pixel_x = 8;pixel_y = -24},/obj/machinery/light/small{dir = 4},/obj/machinery/camera/network/security{c_tag = "Security - Visitor's Visitation";dir = 8},/turf/simulated/floor/tiled,/area/security/lobby)
+"aTG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Prisoner's Visitation";dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
+"aTH" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
+"aTI" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Brig Lockdown";name = "Brig Lockdown Door";opacity = 0},/obj/machinery/door/airlock{name = "Visitation Area"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/prison)
+"aTJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/security/prison)
+"aTK" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light,/obj/machinery/camera/network/security{c_tag = "Security - Communal Aft";dir = 1},/turf/simulated/floor/tiled,/area/security/prison)
+"aTL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTM" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTN" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTP" = (/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTQ" = (/obj/structure/table/standard,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/head/greenbandana,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison)
+"aTR" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTS" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aTT" = (/obj/structure/closet/crate/trashcart,/obj/item/toy/figure/secofficer{pixel_x = -3;pixel_y = -1},/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash{pixel_x = -4;pixel_y = -2},/obj/item/weapon/storage/bag/trash{pixel_x = -9;pixel_y = 2},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/prison)
+"aTU" = (/obj/structure/closet/secure_closet/brig{id = "Cell 5";name = "Cell 5 Locker"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/security/prison)
+"aTV" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"aTW" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/security/detectives_office)
+"aTX" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/foyer)
+"aTY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aTZ" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aUa" = (/obj/machinery/camera/network/security{c_tag = "Security - Firing Range Starboard";dir = 8},/turf/simulated/floor/carpet,/area/security/detectives_office)
+"aUb" = (/obj/item/device/radio/intercom{pixel_x = -27},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aUc" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/engineering/foyer)
+"aUd" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
+"aUe" = (/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aUf" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/megaphone,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aUg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aUh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/sign/securearea,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aUi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aUj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/sign/securearea,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aUk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aUl" = (/turf/simulated/wall,/area/hallway/primary/port)
+"aUm" = (/turf/simulated/wall,/area/hallway/primary/central_one)
+"aUn" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aUo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aUp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/lobby)
+"aUq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge)
+"aUr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aUs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"aUt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/bridge)
+"aUu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/filingcabinet,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aUv" = (/obj/structure/noticeboard{pixel_x = 32},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aUw" = (/obj/machinery/door/airlock/glass_command{name = "Level B Lift"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aUx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/starboard)
+"aUy" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aUz" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aUA" = (/obj/structure/closet/secure_closet/hop,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aUB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"aUC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aUD" = (/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station";req_access = list(16)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aUE" = (/obj/structure/table/woodentable,/obj/item/device/eftpos{eftpos_name = "Captain EFTPOS scanner"},/obj/item/weapon/material/ashtray/glass,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aUF" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 8;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aUG" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aUH" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aUI" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green,/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aUJ" = (/obj/machinery/door/airlock/glass_command{name = "Level B Lift"},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aUK" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4;id = null},/obj/structure/window/reinforced/polarized{dir = 1;id = null},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
+"aUL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aUM" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aUN" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/wall/r_wall,/area/engineering/foyer)
+"aUO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUQ" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUR" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUS" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/wall/r_wall,/area/engineering/foyer)
+"aUT" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUU" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUV" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aUW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "E.V.A.";req_one_access = list(18)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
+"aUX" = (/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aUY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aUZ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aVa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aVb" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aVc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
+"aVd" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aVe" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aVf" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVg" = (/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVh" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{desc = "It opens and closes. Hazardous lifeforms ahead. Caution advised!";name = "Security Lobby"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/lobby)
+"aVi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/double/map/left{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/double/map/right{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVk" = (/obj/machinery/newscaster{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{desc = "It opens and closes. Hazardous lifeforms ahead. Caution advised!";name = "Security Lobby"},/turf/simulated/floor/tiled,/area/security/lobby)
+"aVm" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVn" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVo" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "Security Lockdown";name = "Security Blast Door";opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "";layer = 2.8;name = "Security Aft Entrance";req_access = list(63)},/turf/simulated/floor/tiled,/area/security/brig)
+"aVp" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aVq" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVr" = (/obj/item/device/radio/intercom{pixel_y = 27},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVs" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVt" = (/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 2"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVu" = (/obj/effect/floor_decal/corner/blue{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVv" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVw" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aVx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aVy" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aVz" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Captain's Desk";departmentType = 5;name = "Captain RC";pixel_x = -30;pixel_y = 0},/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aVA" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/med_data,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aVB" = (/obj/machinery/button/windowtint{id = "cap";pixel_x = 24;pixel_y = 0},/obj/effect/landmark/start{name = "Captain"},/obj/structure/bed/chair/office/bridge{icon_state = "bridge";dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aVC" = (/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "captaindoor";name = "Office Door Control";pixel_x = 15;pixel_y = 30;req_access = list(20)},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the starboard bridge doors.";id = "sbridgedoor";name = "Bridge Door Control";pixel_x = 15;pixel_y = 39;req_access = list(20)},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aVD" = (/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/item/weapon/book/manual/security_space_law,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aVE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light,/turf/simulated/floor/lino,/area/security/detectives_office)
+"aVF" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aVG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aVH" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aVI" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aVJ" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"aVK" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"aVL" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aVM" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aVN" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/item/toy/figure/corgi,/obj/item/device/megaphone,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aVO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aVP" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aVQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/civilian_west{c_tag = "Port Corridor - Engineering Entrance"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aVR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aVS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aVT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aVU" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aVV" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aVW" = (/turf/simulated/wall,/area/crew_quarters/heads/cryo)
+"aVX" = (/obj/structure/bed/chair{dir = 1},/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aVY" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aVZ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aWa" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aWb" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aWc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aWd" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aWe" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aWf" = (/obj/structure/sign/directions/security{dir = 1;icon_state = "direction_sec";pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aWg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWj" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aWk" = (/obj/structure/table/woodentable,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/machinery/light,/turf/simulated/floor/wood,/area/security/detectives_office)
+"aWl" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Detective"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Detective"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aWm" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/security/detectives_office)
+"aWn" = (/obj/machinery/photocopier,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/requests_console{department = "Detective's Desk";departmentType = 5;pixel_y = -32},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aWo" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/lino,/area/security/detectives_office)
+"aWp" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aWq" = (/obj/structure/sign/nosmoking_1{pixel_y = -32},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/camera/network/civilian_west{c_tag = "Bridge - Head of Personnel Processing";dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aWr" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aWs" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
+"aWt" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aWu" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Head of Personnel Desk";dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aWv" = (/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Captain's Intercom";pixel_x = -27;pixel_y = -3},/obj/machinery/computer/communications,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aWw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aWx" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigar,/obj/item/weapon/flame/lighter/zippo,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aWy" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "cap"},/obj/structure/window/reinforced/polarized{id = "cap"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aWz" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"aWA" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/camera/network/command{c_tag = "Bridge - AI Core Lift";dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aWB" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/machinery/camera/network/command{c_tag = "Bridge - AI Core Lift";dir = 1},/turf/simulated/floor/tiled/dark,/area/bridge/ailobby)
+"aWC" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aWD" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aWE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/engineering/foyer)
+"aWF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWH" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWK" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aWL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aWM" = (/turf/simulated/wall,/area/maintenance/substation/command)
+"aWN" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aWO" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/command)
+"aWP" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Port Corridor - Camera 2";dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aWQ" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/foyer)
+"aWR" = (/obj/machinery/vending/cart,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aWS" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aWT" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aWU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aWV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aWW" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aWX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aWY" = (/obj/machinery/suit_cycler/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aWZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXa" = (/obj/machinery/door/airlock/glass,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXb" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXc" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXd" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXe" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXf" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aXg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/ailobby)
+"aXh" = (/obj/machinery/door/airlock/external,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/bridge/ailobby)
+"aXi" = (/turf/simulated/wall,/area/bridge/ailobby)
+"aXj" = (/obj/machinery/door/airlock/maintenance{req_access = list(16)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/ailobby)
+"aXk" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXl" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXm" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aXo" = (/obj/machinery/door/airlock/glass,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXp" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXs" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXt" = (/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance";req_access = list(4)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/detectives_office)
+"aXu" = (/obj/machinery/door/airlock/engineering{name = "Command Substation";req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"aXv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXw" = (/obj/structure/window/reinforced/polarized{id = "hop"},/obj/structure/window/reinforced/polarized{dir = 4;id = "hop"},/obj/structure/window/reinforced/polarized{dir = 8;id = "hop"},/obj/structure/grille,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
+"aXx" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "hopdoor";name = "Head of Personnel";req_access = list(57)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aXy" = (/obj/machinery/newscaster/security_unit{pixel_x = -32},/obj/item/weapon/card/id/captains_spare,/obj/item/weapon/storage/secure/safe{pixel_x = 5;pixel_y = -35},/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aXz" = (/obj/machinery/keycard_auth{pixel_x = 0;pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aXA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aXB" = (/obj/machinery/door/window{base_state = "right";dir = 4;icon_state = "right";name = "Captain's Desk Door";req_access = list(20)},/obj/machinery/status_display{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aXC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXD" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aXE" = (/obj/machinery/door/airlock/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXF" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aXH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"aXI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"aXJ" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"aXK" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo)
+"aXL" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo)
+"aXM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aXN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aXO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aXP" = (/obj/machinery/newscaster{layer = 3.3;pixel_x = 0;pixel_y = -27},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aXQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aXR" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aXS" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXT" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway";req_one_access = list(10)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aXU" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXV" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXW" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXX" = (/obj/machinery/camera/network/civilian_west{c_tag = "Port Corridor - Camera 1";dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/port)
+"aXY" = (/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aXZ" = (/obj/structure/sign/directions/engineering{dir = 8;icon_state = "direction_eng";pixel_x = -32;pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aYa" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aYb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aYc" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aYd" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Security Entrance";dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aYe" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aYf" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYg" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYh" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYi" = (/turf/simulated/open,/area/turbolift/ai_station)
+"aYj" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/shuttle/lifts/placeholder)
+"aYk" = (/turf/simulated/wall/r_wall,/area/maintenance/maintcentral)
+"aYl" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYp" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYq" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aYr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aYs" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aYt" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aYu" = (/obj/machinery/atm{pixel_y = -32},/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aYv" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aYw" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aYx" = (/turf/simulated/wall/r_wall,/area/assembly/robotics)
+"aYy" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aYz" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central_one)
+"aYA" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aYB" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aYC" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aYD" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Command Subgrid";name_tag = "Command Subgrid"},/obj/structure/sign/electricshock{pixel_x = 32},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"aYE" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"aYF" = (/obj/machinery/door/window/brigdoor{base_state = "rightsecure";dir = 4;icon_state = "rightsecure";name = "Head of Personnel's Desk";req_access = list(57)},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aYG" = (/turf/simulated/wall,/area/storage/emergency)
+"aYH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aYI" = (/turf/simulated/wall,/area/medical/icu)
+"aYJ" = (/turf/simulated/wall,/area/medical/emt)
+"aYK" = (/obj/machinery/photocopier,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aYL" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters";req_access = list(20)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aYM" = (/obj/structure/window/reinforced,/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo)
+"aYN" = (/obj/structure/window/reinforced,/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo)
+"aYO" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aYP" = (/turf/simulated/wall,/area/medical/exam_room)
+"aYQ" = (/turf/simulated/wall,/area/medical/temp_morgue)
+"aYR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aYS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aYT" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/foyer)
+"aYU" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"aYV" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/foyer)
+"aYW" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"aYX" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"aYY" = (/obj/machinery/computer/ordercomp,/obj/machinery/light_switch{pixel_x = 32},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"aYZ" = (/obj/structure/displaycase,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aZa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aZb" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/engineering/foyer)
+"aZc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"aZd" = (/obj/structure/flora/ausbushes/ywflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/crew_quarters/captain)
+"aZe" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/tiled,/area/bridge)
+"aZf" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aZg" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/item/device/radio/intercom{pixel_y = -32},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aZh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"aZi" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/port)
+"aZj" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aZk" = (/obj/structure/closet/secure_closet/personal/cabinet,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aZl" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"aZm" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aZn" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"aZo" = (/turf/simulated/wall,/area/storage/tech)
+"aZp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aZq" = (/turf/simulated/wall,/area/maintenance/research_port)
+"aZr" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aZs" = (/turf/simulated/wall,/area/assembly/robotics)
+"aZt" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"aZu" = (/obj/machinery/camera/network/research{c_tag = "Research - Robotics Morgue"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"aZv" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"aZw" = (/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"aZx" = (/obj/machinery/vending/coffee,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aZy" = (/obj/machinery/vending/cigarette,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aZz" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aZA" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage";req_one_access = list(12,47)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/emergency)
+"aZB" = (/obj/machinery/door/blast/shutters{id = "emtshutter";name = "EMT Garage Door"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/emt)
+"aZC" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{id = "emtshutter";name = "EMT Garage Door"},/turf/simulated/floor/plating,/area/medical/emt)
+"aZD" = (/turf/simulated/floor/tiled/dark,/area/turbolift/main_station)
+"aZE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"aZF" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"aZG" = (/obj/machinery/door/blast/shutters{density = 0;dir = 1;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/medical{name = "EMT Hallway Access";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/emt)
+"aZH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"aZI" = (/obj/machinery/door/blast/shutters{density = 0;dir = 1;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay3)
+"aZJ" = (/obj/machinery/vending/snack,/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"aZK" = (/obj/machinery/door/blast/shutters{density = 0;dir = 1;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/obj/machinery/door/airlock/multi_tile/glass{id_tag = "CONSdoor";name = "Consultation Wing";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay3)
+"aZL" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency)
+"aZM" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aZN" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Command"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"aZO" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Bridge Substation";dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"aZP" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"aZQ" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/icu)
+"aZR" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/curtain/black{pixel_x = 32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/space/void/captain,/obj/item/clothing/head/helmet/space/void/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"aZS" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/icu)
+"aZT" = (/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"aZU" = (/turf/simulated/floor/plating,/area/medical/emt)
+"aZV" = (/obj/machinery/door/airlock/command{name = "Cryogenic Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/cryo)
+"aZW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aZX" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"aZY" = (/obj/machinery/light_switch{pixel_x = -24;pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"aZZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"baa" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{pixel_x = 25;pixel_y = 25},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"bab" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Tech Storage";req_access = list(23)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech)
+"bac" = (/obj/structure/closet/secure_closet/medical1,/obj/item/device/radio/intercom{pixel_y = 22},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bad" = (/obj/structure/bed/chair/wheelchair,/obj/machinery/firealarm{pixel_y = 27},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bae" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"baf" = (/obj/machinery/door/airlock/research{desc = "It opens and closes. Leads to the Robotics Morgue";name = "Robotics Morgue";req_access = list(29)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"bag" = (/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bah" = (/obj/machinery/button/windowtint{id = "CybGlass";pixel_x = 0;pixel_y = 26},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bai" = (/obj/structure/table/standard,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/item/weapon/cautery,/obj/item/weapon/circular_saw,/obj/item/weapon/retractor,/obj/item/weapon/scalpel,/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber Starboard";dir = 8;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/obj/item/weapon/surgicaldrill,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"baj" = (/obj/machinery/optable{desc = "Used for advanced medical procedures, such as removing brains for cyborgification. Also used to repair unlawed synthetics.";name = "Robotics Operating Table"},/obj/item/device/radio/intercom{pixel_y = 27},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bak" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bal" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Command Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"bam" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"ban" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bao" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/hop,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bap" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"baq" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/item/device/radio/intercom{pixel_x = 28;pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency)
+"bar" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/storage/emergency)
+"bas" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bat" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/structure/curtain/black{pixel_x = 32},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bau" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"bav" = (/obj/structure/flora/ausbushes/ppflowers,/mob/living/simple_animal/corgi/fox/Chauncey,/turf/simulated/floor/grass,/area/crew_quarters/captain)
+"baw" = (/obj/structure/table/woodentable,/obj/item/weapon/cigbutt/cigarbutt,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/tiled,/area/bridge)
+"bax" = (/obj/machinery/bodyscanner{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu)
+"bay" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"baz" = (/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/button/remote/blast_door{id = "ICUshutters";name = "ICU Shutters Control";pixel_x = 0;pixel_y = 36;req_access = list(5)},/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu)
+"baA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/shuttle/lifts/placeholder)
+"baB" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"baC" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"baD" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/icu)
+"baE" = (/obj/effect/decal/cleanable/blood/oil,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology Morgue";dir = 4;icon_state = "camera"},/turf/simulated/floor/plating,/area/medical/emt)
+"baF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"baG" = (/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/glass_medical{name = "EMT Garage Access";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"baH" = (/obj/machinery/vending/assist,/turf/simulated/floor/plating,/area/storage/tech)
+"baI" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/emt)
+"baJ" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"baK" = (/obj/machinery/button/remote/airlock{id = "FOREdoor";name = "MedBay Fore Entrance Control";pixel_x = -25;pixel_y = 24;req_access = list(40)},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"baL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/storage/tech)
+"baM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/storage/tech)
+"baN" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/obj/structure/window/reinforced/polarized{id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room)
+"baO" = (/obj/item/device/radio/intercom{pixel_y = -27},/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"baP" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"baQ" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"baR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"baS" = (/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"baT" = (/obj/structure/morgue{icon_state = "morgue1";dir = 2},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"baU" = (/obj/structure/morgue{icon_state = "morgue1";dir = 2},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"baV" = (/obj/machinery/door/airlock/engineering{name = "Command Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"baW" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"baX" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"baY" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled/dark,/area/turbolift/main_station)
+"baZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"bba" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"bbb" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bbc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/item/device/radio/intercom{pixel_y = -27},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"bbd" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency)
+"bbe" = (/obj/machinery/space_heater,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency)
+"bbf" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bbg" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "hopdoor";name = "Office Door Control";pixel_x = -26;pixel_y = 17;req_access = list(57)},/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bbh" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"bbi" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bbj" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled,/area/medical/icu)
+"bbk" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/newscaster/security_unit{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bbl" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/medical/emt)
+"bbm" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/medical/emt)
+"bbn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = 24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bbo" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/camera/network/command{c_tag = "AI Core - Lift";dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"bbp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech)
+"bbq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
+"bbr" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
+"bbs" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/tech)
+"bbt" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/storage/tech)
+"bbu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/storage/tech)
+"bbv" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/device/analyzer/plant_analyzer,/obj/item/device/healthanalyzer,/obj/item/device/analyzer,/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/storage/tech)
+"bbw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bbx" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"bby" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bbz" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bbA" = (/obj/structure/table/standard,/obj/item/device/mmi,/obj/item/device/mmi,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bbB" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bbC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bbD" = (/obj/structure/table/woodentable,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/sign/nosmoking_2{pixel_y = -32},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bbE" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bbF" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bbG" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 1";dir = 1},/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"bbH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bbI" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency)
+"bbJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"bbK" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/crew_quarters/captain)
+"bbL" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"bbM" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/button/remote/blast_door{id = "CHE2shutters";name = "ICU Shutters";pixel_x = -38;pixel_y = 0;req_access = list(5)},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu)
+"bbN" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu)
+"bbO" = (/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge)
+"bbP" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/medical/icu)
+"bbQ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bbR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/medical/icu)
+"bbS" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"bbT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"bbU" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/lifts/placeholder)
+"bbV" = (/obj/machinery/button/remote/blast_door{id = "emtshutter";name = "Garage Shutters Control";pixel_x = -28;pixel_y = 7;req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bbW" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/emt)
+"bbX" = (/obj/machinery/camera/network/engineering{c_tag = "Engineering - Secure Technical Storage"},/turf/simulated/floor/tiled,/area/storage/tech)
+"bbY" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bbZ" = (/turf/simulated/floor/plating,/area/storage/tech)
+"bca" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/storage/tech)
+"bcb" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/sign/ex,/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bcc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bcd" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bce" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Examination Room";req_access = list(5)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bcf" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcg" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bch" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bci" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bcj" = (/obj/machinery/alarm/cold{dir = 8;icon_state = "alarm0";pixel_x = 25;pixel_y = 0;tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bck" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bcl" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Head of Personnel's Office";dir = 1},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bcm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bcn" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bco" = (/obj/machinery/button/windowtint{id = "hop";pixel_y = -24;range = 9},/obj/machinery/requests_console{announcementConsole = 1;department = "Head of Personnel's Desk";departmentType = 5;name = "Head of Personnel RC";pixel_x = 30;pixel_y = -30},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "hop_office_desk";name = "Desk Privacy Shutter";pixel_x = 0;pixel_y = -36},/obj/machinery/account_database,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bcp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bcq" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/turbolift/main_station)
+"bcr" = (/obj/machinery/computer/security/mining,/obj/machinery/atm{pixel_x = 32},/obj/item/weapon/storage/secure/safe{pixel_x = 5;pixel_y = -28},/turf/simulated/floor/wood,/area/crew_quarters/heads/hop)
+"bcs" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/camera/network/command{c_tag = "AI Core - Beta Core 2";dir = 1},/obj/machinery/atm{pixel_y = -32},/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bct" = (/turf/simulated/wall/r_wall,/area/medical/chemistry)
+"bcu" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/obj/structure/closet/secure_closet/captains,/obj/structure/curtain/black{pixel_x = 32},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bcv" = (/obj/machinery/light_switch{pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/light,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"bcw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"bcx" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bcy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bcz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/storage/tech)
+"bcA" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bcB" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1;pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2;pixel_y = -2},/turf/simulated/floor/tiled,/area/storage/tech)
+"bcC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'";icon_state = "shock";name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech)
+"bcD" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3;pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3;pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/tech)
+"bcE" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/secure_data{pixel_x = -2;pixel_y = 2},/obj/item/weapon/circuitboard/security{pixel_x = 1;pixel_y = -1},/obj/item/weapon/circuitboard/skills{pixel_x = 4;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"bcF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech)
+"bcG" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bcH" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bcI" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1;pixel_y = -1},/obj/item/device/multitool,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/storage/tech)
+"bcJ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bcL" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcM" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcN" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcO" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/random/junk,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bcQ" = (/obj/machinery/door/airlock/maintenance{req_access = list(57)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
+"bcR" = (/obj/machinery/door/airlock/maintenance{req_access = list(20)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"bcS" = (/obj/structure/closet/secure_closet/medical2{req_access = list(29)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bcT" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bcU" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bcV" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bcW" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bcX" = (/obj/structure/sign/directions/security{dir = 1;icon_state = "direction_sec";pixel_y = 32},/turf/simulated/wall,/area/storage/emergency)
+"bcY" = (/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker";pixel_x = -32;pixel_y = 0},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/bed/roller,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bcZ" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bda" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bdb" = (/obj/machinery/iv_drip,/obj/structure/window/reinforced{dir = 1},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bdc" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_x = -32;pixel_y = 0},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bdd" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bde" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bdf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "Medical - Examination Office";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bdg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bdh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 1;id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room)
+"bdi" = (/obj/structure/table/woodentable,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 1;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Examination Room Emergency Phone";pixel_x = 5;pixel_y = -4},/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bdj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Temporary Morgue";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bdk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bdl" = (/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Morgue Maintenance";req_access = list(6);req_one_access = newlist()},/obj/machinery/door/firedoor,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled,/area/medical/temp_morgue)
+"bdm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bdn" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bdo" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bdp" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bdq" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bdr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge)
+"bds" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/turf/simulated/floor/tiled,/area/bridge)
+"bdt" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bdu" = (/obj/machinery/disposal,/obj/machinery/camera/network/command{c_tag = "Bridge - Command Dormitories";dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/heads/cryo)
+"bdv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/storage/tech)
+"bdw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tech)
+"bdx" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/crew{pixel_x = -1;pixel_y = 1},/obj/item/weapon/circuitboard/communications{pixel_x = 5;pixel_y = -5},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/tiled,/area/storage/tech)
+"bdy" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Tech Storage";req_access = list(19,23)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tech)
+"bdz" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"bdA" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2;pixel_y = 2},/obj/item/weapon/circuitboard/security/engineering,/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"bdB" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1;pixel_y = -1},/obj/item/clothing/gloves/yellow,/obj/item/device/t_scanner,/obj/item/clothing/glasses/meson,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech)
+"bdC" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bdD" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bdE" = (/obj/machinery/conveyor{backwards = 4;desc = "A conveyor belt. Used to ferry synthetic bodies to the surgery lab.";dir = 8;id = "RobotSurg"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bdF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/conveyor{backwards = 5;dir = 10;icon_state = "conveyor0";id = "RobotSurg"},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bdG" = (/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bdH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bdI" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bdJ" = (/obj/machinery/conveyor{backwards = 4;desc = "A conveyor belt. Used to ferry synthetic bodies to the surgery lab.";dir = 8;id = "RobotSurg"},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bdK" = (/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/obj/machinery/conveyor{backwards = 4;desc = "A conveyor belt. Used to ferry synthetic bodies to the surgery lab.";dir = 8;id = "RobotSurg"},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bdL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bdM" = (/obj/machinery/computer/crew,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bdN" = (/obj/machinery/conveyor{backwards = 10;dir = 5;id = "RobotSurg"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bdO" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bdP" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bdQ" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/structure/window/reinforced/polarized{id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bdR" = (/obj/structure/extinguisher_cabinet{pixel_x = 32},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 6";dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bdS" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 7";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bdT" = (/obj/item/device/radio/intercom{pixel_x = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bdU" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/medical/exam_room)
+"bdV" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bdW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bdX" = (/obj/structure/table/rack,/obj/item/clothing/accessory/stethoscope,/obj/item/device/flashlight/pen,/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bdY" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer/adv,/obj/item/device/radio/intercom{pixel_y = 26},/obj/machinery/camera/network/medbay{c_tag = "Medical - Chemistry North"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bdZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/temp_morgue)
+"bea" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"beb" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer/adv,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bec" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry)
+"bed" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bee" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bef" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beh" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/vending/wallmed1{pixel_y = 32},/obj/machinery/camera/network/medbay{c_tag = "Medical - Main Storage"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bei" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bej" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bek" = (/obj/machinery/door/airlock/maintenance{req_access = list(20)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bel" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/adv,/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bem" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/heads/cryo)
+"ben" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beo" = (/obj/structure/closet,/obj/item/weapon/bikehorn,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bep" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/fire,/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = 30},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"beq" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/firstaid/o2,/obj/machinery/firealarm{dir = 2;pixel_y = 24},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"ber" = (/turf/simulated/floor/tiled,/area/storage/tech)
+"bes" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/storage/tech)
+"bet" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Intensive Care Unit";dir = 4;icon_state = "camera"},/obj/machinery/sleeper{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"beu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/icu)
+"bev" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bew" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bex" = (/obj/machinery/conveyor{backwards = 1;id = "RobotSurg"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bey" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/emt)
+"bez" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"beA" = (/obj/item/weapon/stool/padded,/obj/machinery/camera/network/medbay{c_tag = "Medical - EMT Quarters";dir = 6;icon_state = "camera"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"beB" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/emt)
+"beC" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"beD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"beE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room)
+"beF" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"beG" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/machinery/button/windowtint{id = "ExamR";pixel_x = -14;pixel_y = 28;req_access = list(5)},/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"beH" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -1;pixel_y = 7},/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"beI" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"beJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Autopsy Laboratory";req_access = list(6,5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"beK" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"beM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"beN" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"beO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beP" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beQ" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beR" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"beS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"beT" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge)
+"beU" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"beV" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2;pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1;pixel_y = -1},/turf/simulated/floor/tiled,/area/storage/tech)
+"beW" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"beX" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/cloning{pixel_x = 0},/obj/item/weapon/circuitboard/clonescanner,/obj/item/weapon/circuitboard/clonepod,/obj/item/weapon/circuitboard/scan_consolenew,/obj/item/weapon/circuitboard/med_data{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"beY" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/circuitboard/unary_atmos/heater,/obj/item/weapon/circuitboard/unary_atmos/cooler{pixel_x = 3;pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"beZ" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bfa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfb" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/research{desc = "It opens and closes. ";name = "Cyborgification Bay";req_access = list(29)},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bfc" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CybGlass"},/obj/structure/window/reinforced/polarized{id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bfd" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CybGlass"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CybGlass"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bfe" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bff" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bfg" = (/obj/machinery/chem_master,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bfh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "CHEshutters";name = "Chemistry Privacy Shutters";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/chemistry)
+"bfi" = (/obj/machinery/chemical_dispenser/full,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bfj" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/temp_morgue)
+"bfk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bfl" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bfm" = (/obj/structure/table/standard,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bfn" = (/turf/simulated/wall,/area/medical/genetics_cloning)
+"bfo" = (/obj/machinery/chemical_dispenser/full,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bfp" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bfq" = (/obj/effect/decal/cleanable/dirt,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bfr" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry)
+"bfs" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bft" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/emergency{dir = 1},/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bfu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bfv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bfw" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bfx" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bfy" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bfz" = (/obj/item/weapon/aicard,/obj/item/weapon/aiModule/reset,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech)
+"bfA" = (/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/wirecutters,/obj/structure/table/steel,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech)
+"bfB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Medical Lockers";req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bfC" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bfD" = (/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech)
+"bfE" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bfF" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "EMT Quarters";req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/emt)
+"bfH" = (/turf/simulated/floor/asteroid,/area/maintenance/research_port)
+"bfI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfJ" = (/obj/machinery/conveyor{blood_color = 1;id = "RobotSurg"},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bfK" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfL" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfM" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfN" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bfO" = (/obj/machinery/vending/robotics{products = list(/obj/item/clothing/suit/storage/toggle/labcoat = 4, /obj/item/clothing/under/rank/roboticist = 4, /obj/item/stack/cable_coil = 4, /obj/item/weapon/cell/high = 12, /obj/item/device/assembly/prox_sensor = 8, /obj/item/device/assembly/signaler = 3, /obj/item/device/healthanalyzer = 8, /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/screwdriver = 5, /obj/item/weapon/crowbar = 5)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bfP" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"bfQ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "EMT Quarters";req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bfR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bfS" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"bfU" = (/obj/item/device/radio/intercom{pixel_y = 27},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bfV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bfW" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "ExamR"},/obj/structure/window/reinforced/polarized{id = "ExamR"},/obj/structure/window/reinforced/polarized{dir = 8;id = "ExamR"},/turf/simulated/floor/plating,/area/medical/exam_room)
+"bfX" = (/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bfY" = (/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bfZ" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_y = -32},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bga" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records.";name = "Medical Records"},/turf/simulated/floor/carpet/blue,/area/medical/exam_room)
+"bgb" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bgc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bgd" = (/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/bridge)
+"bge" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bgf" = (/obj/machinery/door/airlock/glass_command{id_tag = "";name = "Bridge";req_access = list(19)},/turf/simulated/floor/tiled,/area/bridge)
+"bgg" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bgh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech)
+"bgi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
+"bgj" = (/obj/item/stack/cable_coil{pixel_x = -3;pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech)
+"bgk" = (/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/structure/table/steel,/obj/machinery/camera/network/engineering{c_tag = "Engineering - Technical Storage";dir = 1},/turf/simulated/floor/plating,/area/storage/tech)
+"bgl" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plating,/area/storage/tech)
+"bgm" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio{pixel_x = -5},/obj/item/device/radio/intercom{pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bgn" = (/obj/item/device/flashlight{pixel_x = 1;pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1;pixel_y = 5},/obj/item/device/flash,/obj/item/device/flash,/obj/machinery/ai_status_display{pixel_x = 0;pixel_y = -32},/obj/structure/table/steel,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech)
+"bgo" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bgp" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bgq" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgr" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "RobotSurg"},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgs" = (/obj/structure/table/rack{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{desc = "A blue toolbox containing mechanic-related tools."},/obj/item/weapon/storage/toolbox/mechanical{desc = "A blue toolbox containing mechanic-related tools."},/obj/machinery/requests_console{department = "Robotics";departmentType = 2;name = "Robotics RC";pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt,/obj/item/weapon/storage/toolbox/electrical,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgt" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/camera/network/research{c_tag = "Research - Robotics Manufacturing"},/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgu" = (/obj/structure/window/basic{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgv" = (/obj/structure/table/standard,/obj/item/weapon/folder,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bgw" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bgx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bgy" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "CHEshutters";name = "Chemistry Privacy Shutters";opacity = 0},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/chemistry)
+"bgz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bgA" = (/obj/structure/table/standard,/obj/item/clothing/glasses/science,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bgB" = (/turf/simulated/wall,/area/maintenance/medbay)
+"bgC" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bgD" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/chemistry)
+"bgE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bgF" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge)
+"bgG" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bgH" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bgI" = (/obj/machinery/door/airlock/maintenance{req_access = list(19)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge)
+"bgJ" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bgK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bgL" = (/turf/simulated/wall/r_wall,/area/storage/tech)
+"bgM" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/icu)
+"bgN" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bgO" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgP" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bgQ" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bgR" = (/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgS" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bgT" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/emt)
+"bgU" = (/obj/item/roller,/obj/item/roller,/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bgV" = (/obj/effect/floor_decal/corner/orange{dir = 10},/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"bgW" = (/obj/structure/table/standard,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = 5},/obj/item/device/radio/intercom{frequency = 1487;name = "MedBay Emergency Line Intercom";pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bgX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/emt)
+"bgY" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bgZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bha" = (/obj/turbolift_map_holder/aurora/civilian,/turf/simulated/floor/tiled/dark,/area/turbolift/main_station)
+"bhb" = (/obj/structure/window/reinforced,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bhc" = (/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bhd" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bhe" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bhf" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Consultation Wing Hallway";dir = 4;icon_state = "camera"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bhg" = (/obj/item/device/radio/intercom{pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"bhh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bhi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bhj" = (/obj/structure/table/standard,/obj/item/device/camera{name = "Autopsy Camera";pixel_x = -2;pixel_y = 7},/obj/item/device/mass_spectrometer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bhk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bhl" = (/obj/machinery/optable,/obj/machinery/camera/network/medbay{c_tag = "Medical - Autopsy Laboratory";dir = 9;icon_state = "camera"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bhm" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bhn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bho" = (/obj/machinery/clonepod,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bhp" = (/obj/machinery/computer/cloning,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bhq" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bhr" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bhs" = (/obj/machinery/door/airlock/glass_command{name = "Command Maintenance";req_access = list(19)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bht" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge)
+"bhu" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/crowbar/red,/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bhv" = (/turf/simulated/wall,/area/medical/medbay3)
+"bhw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/bridge)
+"bhx" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bhy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bhz" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych)
+"bhB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/wood,/area/medical/psych)
+"bhC" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhD" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/temp_morgue)
+"bhF" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bhG" = (/obj/item/device/radio/intercom{pixel_y = -26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bhH" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bhI" = (/obj/effect/floor_decal/corner/orange{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/dark,/area/assembly/robotics)
+"bhJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bhK" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bhL" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bhM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bhN" = (/obj/machinery/door/window/eastright{req_access = list(29)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhO" = (/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Robotics Desk";req_access = list(29)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bhQ" = (/turf/simulated/wall,/area/bridge/minibar)
+"bhR" = (/turf/simulated/wall/r_wall,/area/bridge/minibar)
+"bhS" = (/obj/machinery/smartfridge/secure/medbay{name = "Dangerous Materials Storage";req_access = list(33);req_one_access = null},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bhT" = (/obj/structure/closet/secure_closet/chemical,/obj/item/weapon/storage/box/pillbottles,/obj/item/weapon/storage/box/pillbottles,/obj/item/device/radio/headset/headset_med,/obj/item/device/radio/headset/headset_med,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bhU" = (/obj/structure/closet/wardrobe/chemistry_white,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bhV" = (/obj/machinery/smartfridge/secure/medbay{pixel_y = -32},/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "left";dir = 8;icon_state = "left";name = "Chemistry Desk";req_access = list(33)},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE3shutters";name = "Chemistry Desk Shutter";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bhW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhX" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet";pixel_y = -32},/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bhY" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bhZ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bia" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/gloves,/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bib" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 4;pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bic" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bid" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/sign/nosmoking_1{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bie" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bif" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"big" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/central_one)
+"bih" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/icu)
+"bii" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bij" = (/turf/simulated/wall,/area/medical/medbay)
+"bik" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bil" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/medical/medbay)
+"bim" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay)
+"bin" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/icu)
+"bio" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/emt)
+"bip" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/sign/p,/turf/simulated/floor/tiled,/area/medical/medbay3)
+"biq" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bir" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych)
+"bis" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Mental Heath";req_access = list(64)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych)
+"bit" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"biu" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"biv" = (/obj/structure/sink{pixel_y = 18},/obj/structure/mirror{pixel_y = 32},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"biw" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker";req_access = list(64)},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/obj/machinery/requests_console{department = "Psychiatrist's Desk";departmentType = 1;pixel_x = 0;pixel_y = 28},/turf/simulated/floor/wood,/area/medical/psych)
+"bix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor";temperature = 278},/area/medical/temp_morgue)
+"biy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Autopsy Laboratory";req_access = list(66)},/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"biz" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/bed/roller,/obj/machinery/camera/network/medbay{c_tag = "Medical - Staff Area Hallway";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"biA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/medical/psych)
+"biB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/medical/psych)
+"biC" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/wood,/area/medical/psych)
+"biD" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Level A Lift"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/bridge)
+"biE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"biF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"biG" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"biH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"biI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge)
+"biJ" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"biK" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"biL" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"biM" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"biN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"biO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"biP" = (/obj/item/device/radio/intercom{pixel_x = -27},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"biQ" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;sortType = "Robotics";name = "Robotics"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"biR" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"biS" = (/obj/machinery/light_switch{pixel_y = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"biT" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"biU" = (/obj/structure/window/basic{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"biV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"biW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"biX" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"biY" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"biZ" = (/turf/simulated/wall,/area/maintenance/substation/research)
+"bja" = (/obj/structure/table/standard,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/item/weapon/screwdriver{pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'";name = "Chemistry Cleaner";pixel_x = -2;pixel_y = -2},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bjb" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel{amount = 20},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bjc" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/ripley_build_and_repair,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/reagent_dispensers/acid{pixel_y = 32},/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bjd" = (/obj/machinery/computer/rdconsole/robotics,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bje" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bjf" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Main Storage";req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bjg" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "Intensive Care Unit";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/icu)
+"bjh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bji" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjj" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/icu)
+"bjk" = (/obj/structure/disposalpipe/junction/yjunction,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjl" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/icu)
+"bjp" = (/obj/structure/window/basic{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjq" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "ICUshutters";name = "Intensive Care Unit Shutters";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/icu)
+"bjr" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/emt)
+"bjs" = (/obj/machinery/door/airlock/glass_medical{name = "EMT Quarters";req_access = list(5)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/medical/emt)
+"bjt" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bju" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bjv" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bjw" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/turf/simulated/floor/wood,/area/medical/psych)
+"bjx" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych)
+"bjy" = (/obj/machinery/door/airlock/medical{name = "Temporary Morgue";req_one_access = newlist()},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/white,/area/medical/temp_morgue)
+"bjz" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bjA" = (/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Cloning Maintenance";req_access = list(66)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/genetics_cloning)
+"bjB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"bjC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"bjD" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Corridor Camera 1"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge)
+"bjE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/medical/chemistry)
+"bjF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bjG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"bjH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"bjI" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bjJ" = (/obj/machinery/vending/medical{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bjK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bjL" = (/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bjM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge/minibar)
+"bjN" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_y = 30},/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway Central-West"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bjO" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50;pixel_x = 5;pixel_y = 5},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 20},/obj/item/stack/material/glass{amount = 50},/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bjP" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjQ" = (/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"bjR" = (/obj/machinery/door/airlock{name = "Public Bathrooms"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"bjS" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjV" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/carpet,/area/medical/psych)
+"bjW" = (/obj/machinery/door/blast/shutters{density = 1;dir = 4;icon_state = "shutter1";id = "MechBayShutter";name = "Mech Bay Shutters";opacity = 1},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bjX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/medical/psych)
+"bjY" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bjZ" = (/turf/simulated/wall,/area/medical/medbay2)
+"bka" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bkb" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bkc" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bkd" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/landmark{name = "Observer-Start"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bke" = (/obj/machinery/door/firedoor,/obj/structure/sign/directions/evac{dir = 8;icon_state = "direction_evac";pixel_y = 32},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bkf" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bkg" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bkh" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bki" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bkj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bkk" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"bkl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bko" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bks" = (/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkt" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/bronze,/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bku" = (/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bkv" = (/obj/machinery/vending/dinnerware,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bkw" = (/obj/structure/bed/chair/comfy/teal{dir = 8;icon_state = "comfychair_preview"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bkx" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/nosmoking_1{pixel_x = 32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bky" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bkz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bkA" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych)
+"bkB" = (/obj/structure/bed/chair/office/light,/obj/machinery/button/windowtint{id = "Phy";pixel_x = -14;pixel_y = -28;req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/carpet,/area/medical/psych)
+"bkC" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/medical/psych)
+"bkD" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/sink{pixel_y = 28},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bkE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/sign/m,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bkF" = (/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Cloning Wing"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bkG" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bkH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Cloning Laboratory";req_access = list(66)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bkI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bkJ" = (/obj/structure/closet,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bkK" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bkL" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_y = -26},/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bkM" = (/obj/structure/closet/wardrobe/white,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning)
+"bkN" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bkO" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bkP" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bkQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge)
+"bkR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/bridge)
+"bkS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
+"bkT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bkU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bkV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bkW" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bkX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge/minibar)
+"bkY" = (/obj/machinery/atm{pixel_y = -32},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Surface Lift";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bkZ" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bla" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"blb" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"blc" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bld" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"ble" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"blf" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"blg" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"blh" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/sensor{name = "Powernet Sensor - Research Subgrid";name_tag = "Research Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bli" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"blj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"blk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/turf/simulated/floor/plating,/area/assembly/robotics)
+"bll" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"blm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bln" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"blo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"blp" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blq" = (/obj/machinery/door/window{dir = 4;name = "Components Manufacture";req_access = list(29)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"blr" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"bls" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blx" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/medical/psych)
+"bly" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"blA" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;id_tag = "RobMechBay";req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blB" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/shutters{density = 1;dir = 4;icon_state = "shutter1";id = "MechBayShutter";name = "Mech Bay Shutters";opacity = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"blC" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"blD" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_y = 6},/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"blE" = (/turf/simulated/wall/r_wall,/area/medical/genetics_cloning)
+"blF" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/cmo)
+"blG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"blH" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "CHE3shutters";name = "Desk Shutter Control";pixel_x = 6;pixel_y = 6;req_access = list(33)},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/button/remote/blast_door{id = "CHE2shutters";name = "Chemistry Interior Shutters";pixel_x = -6;pixel_y = 6;req_access = list(33)},/obj/machinery/button/remote/blast_door{id = "CHEshutters";name = "Hallway Shutters Control";pixel_x = 0;pixel_y = -6;req_access = list(33)},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"blI" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/camera/network/medbay{c_tag = "Medical - Chemistry South";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"blJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "Emergency Shower";req_access = newlist()},/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/freezer,/area/medical/chemistry)
+"blK" = (/obj/machinery/door/airlock/glass_medical{name = "Chemistry Laboratory";req_access = list(33)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"blL" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
+"blM" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blO" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blQ" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blR" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blS" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blU" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blV" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"blW" = (/obj/item/toy/figure/roboticist,/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"blX" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"blY" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"blZ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bma" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmb" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmc" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bmd" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -1;pixel_y = 7},/turf/simulated/floor/carpet,/area/medical/psych)
+"bme" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych)
+"bmf" = (/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmh" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/camera/network/medbay{c_tag = "Medical - Phychiatrist Office";dir = 1;icon_state = "camera"},/turf/simulated/floor/carpet,/area/medical/psych)
+"bmi" = (/turf/simulated/wall,/area/chapel/office)
+"bmj" = (/turf/simulated/wall/r_wall,/area/medical/reception)
+"bmk" = (/obj/structure/bed/psych,/obj/item/weapon/bedsheet/brown,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/carpet,/area/medical/psych)
+"bml" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bmm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bmn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bmo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/bridge)
+"bmp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/bridge)
+"bmq" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge)
+"bmr" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bms" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bmt" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bmu" = (/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bmv" = (/obj/machinery/door/airlock/glass_command{name = "Break Room"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/bridge)
+"bmw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bmx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bmy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"bmz" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bmA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bmB" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/red/diagonal,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bmC" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/rag,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bmD" = (/turf/simulated/wall,/area/medical/psych)
+"bmE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge/minibar)
+"bmF" = (/obj/machinery/chemical_dispenser/bar_alc/full,/obj/structure/table/woodentable,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/red/diagonal,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bmG" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Research"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bmH" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2)
+"bmI" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/camera/network/research{c_tag = "Research - Research Substation";dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bmJ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bmK" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bmL" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2)
+"bmM" = (/obj/machinery/mecha_part_fabricator,/obj/machinery/camera/network/research{c_tag = "Research - Robotics Fabrication";dir = 4;network = list("Research","Toxins Test Area")},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bmN" = (/obj/structure/bed/chair/office/dark,/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bmO" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;desc = "A conveyor control switch. It appears to only go in one direction. Controls the components conveyor belt.";id = "Robocompo";name = "components conveyor switch"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bmP" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmR" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmS" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber Port";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmT" = (/obj/machinery/button/remote/blast_door{desc = "It controls the Mech Bay's shutters.";id = "MechBayShutter";name = "Mech Bay shutters";pixel_x = 28},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bmU" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/chemistry,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
+"bmV" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/medical/reception)
+"bmW" = (/obj/machinery/door/firedoor,/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE3shutters";name = "Chemistry Desk Shutter";opacity = 0},/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "Chemistry Desk";req_access = list(33)},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bmX" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bmY" = (/obj/machinery/vending/boozeomat,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bmZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/medical/reception)
+"bna" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "CHE2shutters";name = "Chemistry Interior Privacy Shutters";opacity = 0},/obj/structure/sign/nosmoking_2,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/medical/reception)
+"bnb" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bnc" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{icon_state = "map_scrubber_on";dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway West";dir = 4;icon_state = "camera"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bnd" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Research (Sub-level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bne" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bnf" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bng" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bnh" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bni" = (/obj/structure/table/standard,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnj" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnk" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bnl" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnm" = (/obj/machinery/cryopod/robot,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet/wardrobe/robotics_black,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bno" = (/obj/structure/closet/firecloset,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/multi_tile/glass{id_tag = "FOREdoor";name = "MedBay Fore Entrance";req_access = newlist()},/turf/simulated/floor/tiled,/area/medical/medbay3)
+"bnq" = (/obj/structure/crematorium,/turf/simulated/floor/tiled/dark,/area/chapel/office)
+"bnr" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 8;id = "Phy"},/obj/structure/window/reinforced/polarized{id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych)
+"bns" = (/obj/structure/closet/wardrobe/chaplain_black,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/wood,/area/chapel/office)
+"bnt" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/chapel/office)
+"bnu" = (/obj/machinery/camera/network/civilian_west{c_tag = "Church - Office"},/turf/simulated/floor/carpet,/area/chapel/office)
+"bnv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych)
+"bnw" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "Phy"},/obj/structure/window/reinforced/polarized{id = "Phy"},/obj/structure/window/reinforced/polarized{dir = 4;id = "Phy"},/turf/simulated/floor/plating,/area/medical/psych)
+"bnx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Cloning Wing";req_one_access = list(6,5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bny" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnz" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnA" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnB" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/newscaster{pixel_x = 0;pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bnC" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "CMOdoor";name = "CMO's Office";req_access = list(40)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bnD" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bnE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/item/device/radio/intercom{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bnF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/mob/living/simple_animal/cat/fluff/Runtime{name = "Bones"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bnG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge)
+"bnH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge)
+"bnI" = (/turf/simulated/wall,/area/medical/gen_treatment)
+"bnJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge/minibar)
+"bnK" = (/obj/machinery/door/airlock/engineering{name = "Science Substation";req_one_access = list(11,24,7)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bnL" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bnM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bnN" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bnO" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bnP" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnQ" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnR" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnS" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{empty = 1;name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1;name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
+"bnT" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 5";dir = 1},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bnU" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnV" = (/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/machinery/button/crematorium{pixel_x = -32;pixel_y = 25},/turf/simulated/floor/tiled/dark,/area/chapel/office)
+"bnW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnX" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnY" = (/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bnZ" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Chaplain"},/obj/machinery/button/windowtint{id = "chapel";pixel_y = 28},/turf/simulated/floor/carpet,/area/chapel/office)
+"boa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bob" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -2;pixel_y = 5},/obj/item/weapon/storage/fancy/crayons,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/carpet,/area/chapel/office)
+"boc" = (/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},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bod" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boe" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bof" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_y = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bog" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"boh" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
+"boi" = (/obj/machinery/disposal,/obj/machinery/camera/network/medbay{c_tag = "Medical - MedBay Reception North"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"boj" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bok" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bol" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bom" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bon" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge)
+"boo" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bop" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
+"boq" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{frequency = 1487;name = "MedBay Emergency Line Intercom";pixel_y = 22},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bor" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bos" = (/obj/machinery/smartfridge/drinks,/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bot" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge/minibar)
+"bou" = (/turf/simulated/wall/r_wall,/area/server)
+"bov" = (/obj/structure/sign/poster,/turf/simulated/wall,/area/assembly/robotics)
+"bow" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"box" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/assembly/robotics)
+"boy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics)
+"boz" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"boA" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0;req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment)
+"boB" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "General Treatment Room";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment)
+"boC" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0;req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment)
+"boD" = (/turf/simulated/floor/wood,/area/chapel/office)
+"boE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/chapel/office)
+"boF" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp{pixel_y = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/chapel/office)
+"boG" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/chapel/office)
+"boH" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"boI" = (/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"boJ" = (/obj/structure/noticeboard{pixel_x = 0;pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"boK" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"boL" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"boN" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"boO" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boP" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boQ" = (/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boR" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"boS" = (/obj/machinery/button/remote/airlock{id = "CONSdoor";name = "Consultation Wing Entrance Control";pixel_x = 0;pixel_y = 24;req_access = newlist()},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boT" = (/obj/structure/bed/chair/comfy/teal{dir = 8;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boU" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boV" = (/obj/machinery/papershredder,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boW" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boX" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"boY" = (/obj/structure/bed/chair,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"boZ" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 1;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
+"bpa" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bpb" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bpc" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"bpd" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bpe" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/effect/floor_decal/corner/red/diagonal,/turf/simulated/floor/tiled,/area/bridge/minibar)
+"bpf" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/machinery/camera/network/command{c_tag = "Bridge - Command Lounge";dir = 1},/turf/simulated/floor/carpet,/area/bridge/minibar)
+"bpg" = (/obj/machinery/door/airlock/glass_research{name = "Robotics Lab";req_access = list(29)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bph" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bpi" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/chapel/office)
+"bpj" = (/obj/machinery/door/window/westleft{dir = 4;name = "Crematorium'";req_access = list(22)},/turf/simulated/floor/tiled/dark,/area/chapel/office)
+"bpk" = (/obj/structure/table/woodentable,/obj/item/weapon/nullrod,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/carpet,/area/chapel/office)
+"bpl" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/sign/redcross,/turf/simulated/floor/plating,/area/medical/reception)
+"bpm" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bpn" = (/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/reception)
+"bpo" = (/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bpp" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bpq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bpr" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bps" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bpt" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_y = 6},/obj/item/weapon/pen,/obj/item/weapon/stamp/cmo,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"bpu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bpv" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bpw" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "General Treatment Room";req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment)
+"bpx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/minibar)
+"bpy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/minibar)
+"bpz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bpA" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bpB" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bpC" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bpD" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpH" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/junction{dir = 8;icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpI" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpJ" = (/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bpK" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpL" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpM" = (/obj/machinery/door/airlock/glass_medical{id_tag = "BRIEFdoor";name = "Briefing Room";req_access = list(5)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpN" = (/obj/machinery/atm{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bpO" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpQ" = (/turf/simulated/wall/r_wall,/area/rnd/research)
+"bpR" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/structure/sink{pixel_y = 16},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bpS" = (/obj/machinery/camera/network/research{c_tag = "Research - Entrance"},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bpT" = (/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bpU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpV" = (/obj/structure/morgue,/turf/simulated/floor/tiled/dark,/area/chapel/office)
+"bpW" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/chapel/office)
+"bpY" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bpZ" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"bqa" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
+"bqb" = (/obj/structure/table/glass,/obj/item/weapon/paper{desc = "A few notes scratched out by the last CMO before they departed the station.";info = "\[i]\[center]To the incoming CMO of Exodus:\[/i]\[/center]\[br]\[br]I wish you and your crew well. Do take note:\[br]\[br]\[br]The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.\[br]\[br]I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.\[br]\[br]The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.\[br]\[br]Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.\[br]\[br]There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.\[br]\[br]The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.\[br]\[br]The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.\[br]\[br]Emergency Cryo bags are beside the emergency entrance, along with a kit.\[br]\[br]Spare paper cups for the reception are on the left side of the reception desk.\[br]\[br]I've fed Runtime. She should be fine.\[br]\[br]\[br]\[center]That should be all. Good luck!\[/center]";name = "Outgoing CMO's Notes"},/obj/item/weapon/clipboard,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"bqc" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bqd" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bqe" = (/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqg" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/glass_command{name = "Level A Lift"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/bridge)
+"bqh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/bridge)
+"bqk" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bql" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bqm" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;icon_state = "map_vent_out";use_power = 1},/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"bqn" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"bqo" = (/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},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/server)
+"bqp" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"bqq" = (/obj/machinery/power/apc/high{dir = 1;name = "north bump";pixel_y = 24},/obj/machinery/camera/network/research{c_tag = "Research - Server Room"},/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/portables_connector,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/server)
+"bqr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/dark,/area/server)
+"bqs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bqt" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer_1";power_setting = 20;set_temperature = 80;use_power = 1},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/server)
+"bqu" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bqv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bqw" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bqx" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/medical/medbay)
+"bqy" = (/obj/machinery/vending/coffee,/obj/machinery/light,/turf/simulated/floor/tiled,/area/medical/medbay)
+"bqz" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bqA" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bqB" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bqC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bqD" = (/obj/structure/sign/directions/science{dir = 8;icon_state = "direction_sci";pixel_x = -32;pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bqE" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bqF" = (/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/simulated/floor/tiled/dark,/area/chapel/office)
+"bqG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/chapel/office)
+"bqH" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bqI" = (/obj/machinery/vending/medical{density = 0;pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bqJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/chapel/office)
+"bqK" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/wood,/area/chapel/office)
+"bqL" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bqM" = (/obj/structure/bed/chair{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/chapel/office)
+"bqN" = (/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},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay2)
+"bqO" = (/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqQ" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bqR" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;id_tag = "MAINdoor";name = "MedBay Main Entrance";req_access = list(5)},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/reception)
+"bqS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bqT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Medbay";sortType = "Medbay"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bqU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bqV" = (/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "GTRshutters";name = "General Treatment Room Shutters";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment)
+"bqW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/sortjunction{dir = 8;icon_state = "pipe-j1s";name = "Chemistry";sortType = "Chemistry"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bqX" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bqY" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bqZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bra" = (/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"brb" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"brc" = (/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"brd" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bre" = (/obj/machinery/newscaster{pixel_x = -30},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"brf" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"brg" = (/obj/machinery/disposal,/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/medical/medbay)
+"brh" = (/obj/item/roller,/obj/item/roller,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway Central-East";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bri" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brj" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brk" = (/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction{dir = 1;name = "CE Office";sortType = "CE Office"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brm" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/structure/bed/roller,/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway East";dir = 1;icon_state = "camera"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brn" = (/obj/machinery/iv_drip,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bro" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brp" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brr" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brs" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/item/modular_computer/console/preset/medical,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"brt" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
+"bru" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/chapel/office)
+"brv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/chapel/office)
+"brw" = (/obj/structure/table/glass,/obj/item/device/megaphone,/obj/item/device/radio{frequency = 1487;name = "Medbay Emergency Radio Link";pixel_x = 5;pixel_y = 5},/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"brx" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/machinery/button/windowtint{id = "CMO";pixel_x = -14;pixel_y = 28;req_access = list(40)},/obj/machinery/button/remote/airlock{id = "CMOdoor";name = "Office Door Control";pixel_x = -14;pixel_y = 36;req_access = list(40)},/obj/machinery/button/remote/airlock{id = "BRIEFdoor";name = "Briefing Room Door Control";pixel_x = 14;pixel_y = 36;req_access = list(40)},/obj/machinery/button/remote/blast_door{id = "LCKDshutters";name = "MedBay Lockdown Control";pixel_x = 14;pixel_y = 28;req_access = list(40)},/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"bry" = (/obj/machinery/requests_console{announcementConsole = 1;department = "Chief Medica Officer's Desk";departmentType = 5;name = "Chief Medical Officer RC";pixel_x = 30;pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medical - Morgue";dir = 8;icon_state = "camera"},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"brz" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled,/area/bridge)
+"brA" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge)
+"brB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"brC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"brD" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"brE" = (/obj/machinery/alarm/server{dir = 4;pixel_x = -22;pixel_y = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/bluegrid{base_icon = 'icons/turf/flooring/plating.dmi';icon = 'icons/turf/flooring/tiles.dmi';icon_state = "dark";name = "Server Walkway";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"brF" = (/obj/machinery/door/firedoor{dir = 8;name = "Firelock West"},/obj/machinery/door/window/westleft{dir = 8;name = "Server Room";opacity = 1;req_access = list(30)},/obj/machinery/door/window/eastleft{name = "Server Room"},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/server)
+"brG" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/server)
+"brH" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/machinery/meter,/turf/simulated/floor/tiled/dark,/area/server)
+"brI" = (/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"brJ" = (/obj/machinery/door/airlock/command{name = "Server Room";req_access = list(30)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/server)
+"brK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/server)
+"brL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brM" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brO" = (/turf/simulated/wall,/area/medical/surgery)
+"brP" = (/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brR" = (/turf/simulated/wall/r_wall,/area/medical/medbay2)
+"brS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brT" = (/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brV" = (/obj/effect/landmark/start{name = "Nursing Intern"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"brW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"brX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"brY" = (/obj/structure/table/glass,/obj/machinery/computer/skills,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/toy/figure/cmo,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"brZ" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsa" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsb" = (/obj/machinery/door/airlock/research{name = "Research Division Access";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"bsd" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor";name = "Research Division Access";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bse" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge)
+"bsf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge)
+"bsg" = (/obj/machinery/door/airlock/glass{name = "Chapel Office";req_access = list(22)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/chapel/office)
+"bsh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bsi" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Chapel";sortType = "Chapel"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bsj" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bsk" = (/obj/machinery/computer/rdservercontrol,/turf/simulated/floor/tiled/dark,/area/server)
+"bsl" = (/obj/machinery/computer/message_monitor,/obj/structure/sign/nosmoking_1{pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/server)
+"bsm" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;name = "Medical Bay";req_access = newlist()},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bsn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bso" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "MAINshutters";name = "Entrance Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
+"bsq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bsr" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/obj/machinery/button/remote/airlock{id = "MAINdoor";name = "MedBay Main Entrance Control";pixel_x = 5;pixel_y = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bss" = (/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bst" = (/obj/machinery/door/airlock/medical{autoclose = 0;icon_state = "door_open";id_tag = null;name = "General Treatment Room";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/gen_treatment)
+"bsu" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsv" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsw" = (/obj/machinery/shower{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsx" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bsy" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bsz" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bsA" = (/obj/structure/bed/roller,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"bsB" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bsC" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bsD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main)
+"bsE" = (/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bsF" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/sign/nosmoking_1{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bsG" = (/obj/structure/noticeboard{pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bsH" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Nursing Intern"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bsI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bsJ" = (/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bsK" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bsL" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bsM" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment,/obj/machinery/papershredder,/turf/simulated/floor/carpet/blue,/area/crew_quarters/heads/cmo)
+"bsN" = (/turf/simulated/wall,/area/medical/reception)
+"bsO" = (/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/simulated/floor/plating,/area/medical/medbay)
+"bsP" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bsQ" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"bsR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/bridge)
+"bsS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"bsT" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4;external_pressure_bound = 0;external_pressure_bound_default = 0;icon_state = "map_vent_in";initialize_directions = 1;internal_pressure_bound = 4000;internal_pressure_bound_default = 4000;use_power = 1;pressure_checks = 2;pressure_checks_default = 2;pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"bsU" = (/obj/machinery/r_n_d/server/core,/turf/simulated/floor/bluegrid{name = "Server Base";nitrogen = 500;oxygen = 0;temperature = 80},/area/server)
+"bsV" = (/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bsW" = (/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},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/server)
+"bsX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled/dark,/area/server)
+"bsY" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bsZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bta" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"btb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/camera/network/research{c_tag = "Research - Corridor Camera 3";dir = 1},/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"btc" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btd" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Operating Theatre One"},/obj/item/device/radio/intercom{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bte" = (/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btf" = (/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bth" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bti" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Research Entrance";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/structure/sign/science{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"btj" = (/turf/simulated/open,/area/turbolift/medical_station)
+"btk" = (/obj/machinery/newscaster{pixel_x = -30},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"btl" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"btm" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"btn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/chapel/main)
+"bto" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"btp" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"btq" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"btr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/chapel/main)
+"bts" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge)
+"btt" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"btu" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"btv" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"btw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge)
+"btx" = (/turf/simulated/wall/r_wall,/area/rnd/rdoffice)
+"bty" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Medical Entrance";dir = 8},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"btz" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"btA" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora)
+"btB" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Office";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"btC" = (/turf/simulated/wall/r_wall,/area/rnd/lab)
+"btD" = (/obj/machinery/vending/medical{density = 0;pixel_y = -32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"btE" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/machinery/button/remote/blast_door{id = "GTRshutters";name = "General Treatment Shutters Control";pixel_x = -26;pixel_y = 0;req_access = list(5)},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"btF" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"btG" = (/obj/effect/floor_decal/chapel,/obj/structure/banner,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"btH" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/camera/network/medbay{c_tag = "Medical - General Treatment Room";dir = 1;icon_state = "camera"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"btI" = (/obj/structure/table/marble,/turf/simulated/floor/carpet,/area/chapel/main)
+"btJ" = (/obj/item/device/radio/intercom{pixel_y = -26},/obj/effect/floor_decal/corner/lime/full{dir = 4},/obj/machinery/sleeper{tag = "icon-sleeper_0 (WEST)";icon_state = "sleeper_0";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/gen_treatment)
+"btK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"btL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"btM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery)
+"btN" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"btO" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"btP" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"btQ" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back.";name = "Surgery Cleaner"},/obj/machinery/button/holosign{id = "OR1";pixel_x = -4;pixel_y = 26},/obj/machinery/light_switch{pixel_x = 4;pixel_y = 26},/obj/effect/floor_decal/corner/grey/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btS" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btT" = (/obj/structure/sink/kitchen{dir = 8;icon_state = "sink_alt";name = "Surgical sink";pixel_x = 20},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"btU" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/medical/medbay2)
+"btV" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2)
+"btW" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"btX" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"btY" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"btZ" = (/obj/machinery/keycard_auth{pixel_x = 24},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bua" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bub" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"buc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"bud" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bue" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"buf" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bug" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge)
+"buh" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bui" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"buj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2)
+"buk" = (/obj/machinery/door/airlock/research{name = "Xenoflora Research";req_access = list(55)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora)
+"bul" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"bum" = (/obj/machinery/door/airlock/research{name = "Research and Development";req_access = list(7)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bun" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"buo" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bup" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"buq" = (/obj/structure/table/marble,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/chapel/main)
+"bur" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bus" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/structure/banner,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"but" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/bridge)
+"buu" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"buv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/turf/simulated/floor/plating,/area/medical/reception)
+"buw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"bux" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/item/roller,/obj/item/roller,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"buy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/bridge)
+"buz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"buA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"buB" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"buC" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"buD" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/reception)
+"buE" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"buF" = (/obj/machinery/door/window{base_state = "left";dir = 1;icon_state = "left";name = "Medical Desk";req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"buG" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"buH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"buI" = (/obj/machinery/photocopier,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"buJ" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/maintenance{name = "Cryogenics Control Room";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"buK" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"buL" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"buM" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre One";req_access = list(45)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/holosign/surgery{id = "OR1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"buN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"buO" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"buP" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"buQ" = (/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"buR" = (/obj/structure/table/standard,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 7;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Surgery Emergency Phone";pixel_x = 5;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"buS" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Medbay Hallway South";dir = 4;icon_state = "camera"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2)
+"buT" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2)
+"buU" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"buV" = (/obj/structure/bed/chair{dir = 1},/obj/structure/sign/nosmoking_1{pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"buW" = (/obj/machinery/disposal,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"buX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 8;id = "CMO"},/obj/structure/window/reinforced/polarized{dir = 4;id = "CMO"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
+"buY" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"buZ" = (/obj/structure/sink{pixel_y = 28},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bva" = (/obj/structure/table/glass,/obj/machinery/photocopier/faxmachine{department = "Chief Medical Officer's Office"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bvb" = (/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/glasses/hud/health,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"bvc" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"bvd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge)
+"bve" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bvf" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"bvg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bvh" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvi" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bvj" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bvm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bvn" = (/obj/machinery/keycard_auth{pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvo" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bvp" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/reception)
+"bvq" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvr" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvt" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bvu" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bvv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bvw" = (/turf/simulated/wall,/area/medical/surgerywing)
+"bvx" = (/obj/structure/table/rack,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bvy" = (/obj/machinery/door/airlock/command{id_tag = "researchdoor";name = "Research Director";req_access = list(30)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bvz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/sortjunction{name = "RD Office";sortType = "RD Office"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bvA" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bvB" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"bvC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bvD" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bvE" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bvF" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/medical/medbay2)
+"bvG" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bvH" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/medical/medbay2)
+"bvI" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bvJ" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bvK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bvL" = (/obj/machinery/alarm{pixel_y = 32},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bvM" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bvN" = (/obj/structure/table/reinforced,/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Research Desk";req_access = list(7)},/obj/machinery/door/firedoor,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/rnd/lab)
+"bvO" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/item/device/radio/intercom{pixel_x = 0;pixel_y = 27},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bvP" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bvQ" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 4"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bvR" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bvS" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bvT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bvU" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bvV" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bvW" = (/obj/machinery/door/window{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bvX" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bvY" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/papershredder,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bvZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bwa" = (/obj/structure/table/standard,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bwb" = (/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bwc" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bwd" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bwe" = (/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bwf" = (/obj/structure/table/standard,/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Medical Desk";req_access = list(5)},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 1;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Reception Emergency Phone";pixel_x = -5;pixel_y = 4},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bwg" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bwh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bwi" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bwj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bwk" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/papershredder,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bwl" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bwm" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bwn" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/bed/chair/comfy/teal{dir = 4;icon_state = "comfychair_preview"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bwo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bwp" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bwq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/lab)
+"bwr" = (/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bws" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bwt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bwu" = (/turf/simulated/floor/carpet,/area/chapel/main)
+"bwv" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bww" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/vending/wallmed2{pixel_x = 28},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bwx" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/medbay2)
+"bwy" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Lift Lobby";dir = 4},/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/bridge)
+"bwz" = (/obj/structure/window/reinforced{dir = 8},/obj/item/modular_computer/console/preset/medical,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bwA" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{pixel_x = -25;pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"bwB" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge)
+"bwC" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled,/area/bridge)
+"bwD" = (/obj/machinery/light,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge)
+"bwE" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "robotics_solar_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bwF" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "toxinsrec_airlock";name = "exterior access button";pixel_x = 25;pixel_y = 25;req_one_access = list(13,65)},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bwG" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "robotics_solar_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bwH" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump";tag_exterior_door = "robotics_solar_outer";frequency = 1379;id_tag = "robotics_solar_airlock";tag_interior_door = "robotics_solar_inner";layer = 3.3;pixel_x = 0;pixel_y = -25;req_access = list(13);tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "robotics_solar_sensor";layer = 3.3;pixel_x = 12;pixel_y = -25},/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bwI" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bwJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bwK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bwL" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "robotics_solar_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bwM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bwN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/wall,/area/medical/surgerywing)
+"bwO" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3;pixel_y = -2},/obj/item/weapon/paper/monitorkey,/obj/item/device/megaphone,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bwP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice)
+"bwQ" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bwR" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"bwS" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bwT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bwU" = (/obj/item/toy/figure/scientist,/obj/machinery/autolathe,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bwV" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/stock_parts/matter_bin,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bwW" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bwX" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Lift Lobby";dir = 4},/obj/structure/flora/pottedplant/random,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/bridge)
+"bwY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge)
+"bwZ" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bxa" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/bridge)
+"bxb" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/bridge)
+"bxc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bxd" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bxe" = (/obj/structure/table/standard,/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bxf" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bxg" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bxh" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bxi" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bxj" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1;dir = 2;name = "Medical Bay";req_access = newlist()},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bxk" = (/obj/item/modular_computer/console/preset/research,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bxl" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bxm" = (/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bxn" = (/obj/machinery/vending/hydronutrients{categories = 3},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bxo" = (/obj/machinery/biogenerator,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bxp" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "MAINdoor";name = "Main Entrance Control";pixel_x = 0;pixel_y = 6;req_access = list(5)},/obj/machinery/button/remote/blast_door{id = "MAINshutters";name = "Main Entrance Lockdown Switch";pixel_x = 0;pixel_y = -3;req_access = list(5)},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bxq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Office";req_access = list(5)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bxr" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bxs" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bxt" = (/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bxu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bxv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/lab)
+"bxw" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bxx" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/camera/network/medbay{c_tag = "Medical - Cryogenics Maintenance";dir = 1;icon_state = "camera"},/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bxy" = (/obj/machinery/atmospherics/unary/freezer{dir = 1;icon_state = "freezer"},/turf/simulated/floor/plating,/area/medical/gen_treatment)
+"bxz" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bxA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main)
+"bxB" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bxC" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bxD" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bxE" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bxF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery)
+"bxG" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bxH" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bxI" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/medical/medbay2)
+"bxJ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bxK" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bxL" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bxM" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bxN" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bxO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bxP" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bxQ" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/bridge)
+"bxR" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/grey/full,/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"bxS" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bxT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bxU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bxV" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "rdmdoor";name = "Meeting Room Door Control";pixel_x = 34;pixel_y = 30;req_access = list(57)},/obj/machinery/button/windowtint{id = "RDTint";pixel_x = 26;pixel_y = 30;range = 10},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bxW" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice)
+"bxX" = (/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bxY" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bxZ" = (/obj/machinery/light/small/emergency,/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bya" = (/turf/simulated/floor/plating,/area/bridge)
+"byb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge)
+"byc" = (/obj/structure/closet/crate/hydroponics/prespawned,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"byd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bye" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"byf" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"byg" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/item/stack/material/glass{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/glass{amount = 50;pixel_x = 0;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"byh" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"byi" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"byj" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"byk" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"byl" = (/obj/structure/lamarr,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bym" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"byn" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"byo" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"byp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"byq" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"byr" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"bys" = (/obj/machinery/seed_storage/xenobotany,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"byt" = (/obj/machinery/seed_extractor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"byu" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"byv" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/blast/shutters{density = 0;dir = 8;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/sign/redcross,/turf/simulated/floor/plating,/area/medical/reception)
+"byw" = (/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Medical Desk";req_access = list(5)},/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 1;frequency = 1487;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Reception Emergency Phone";pixel_x = -5;pixel_y = -5},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"byx" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"byy" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"byz" = (/turf/simulated/wall,/area/chapel/main)
+"byA" = (/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"byB" = (/obj/effect/floor_decal/chapel,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"byC" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/computer/guestpass{pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"byD" = (/obj/machinery/door/airlock{autoclose = 0;icon_state = "door_open";name = "Changing Room"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"byE" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"byF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0;dir = 4;icon_state = "shutter0";id = "OR1shutters";name = "OR-1 Privacy Shutters";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery)
+"byG" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"byH" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = -26},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"byI" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"byJ" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/machinery/button/remote/blast_door{id = "OR1shutters";name = "Shutters Control";pixel_y = -26;req_access = list(5)},/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"byK" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/structure/sign/nosmoking_2{pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"byL" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/tiled/white,/area/medical/reception)
+"byM" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"byN" = (/obj/structure/table/standard,/obj/item/weapon/retractor,/obj/effect/floor_decal/corner/grey/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"byO" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/FixOVein,/obj/effect/floor_decal/corner/grey{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgery)
+"byP" = (/obj/machinery/door/airlock/medical{name = "Cold Storage";req_access = list(5)},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/plasticflaps/airtight,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay2)
+"byQ" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/bridge)
+"byR" = (/obj/structure/curtain/medical,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"byS" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/item/device/radio/intercom{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"byT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"byU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/bridge)
+"byV" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge)
+"byW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"byX" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"byY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"byZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bza" = (/obj/structure/bed/chair/comfy/black{dir = 4},/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/machinery/camera/network/research{c_tag = "Research - Research Director's Office";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bzb" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bzc" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bzd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bze" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bzf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bzg" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bzh" = (/turf/simulated/floor/tiled,/area/turbolift/command_sub)
+"bzi" = (/obj/machinery/computer/robotics,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bzj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bzk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bzl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bzm" = (/obj/machinery/camera/network/research{c_tag = "Research - Corridor Camera 2";dir = 8;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bzn" = (/obj/structure/table/standard,/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bzo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bzp" = (/obj/machinery/smartfridge,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bzq" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bzr" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bzs" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bzt" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bzu" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bzv" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bzw" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bzx" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/scanning_module,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bzy" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bzz" = (/obj/effect/floor_decal/chapel,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bzA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bzB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bzC" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bzD" = (/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bzE" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/machinery/camera/network/medbay{c_tag = "Medical - MedBay Reception South";dir = 1;icon_state = "camera"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bzF" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_y = -26},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception)
+"bzG" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -1;pixel_y = 7},/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bzH" = (/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bzI" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/structure/noticeboard{pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/pink{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"bzJ" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/structure/extinguisher_cabinet{pixel_x = -28;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bzP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bzQ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzR" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzS" = (/obj/machinery/door/airlock/glass_medical{name = "Surgery Observation";req_access = newlist()},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/surgerywing)
+"bzT" = (/obj/structure/computerframe,/turf/simulated/floor/tiled,/area/medical/surgery2)
+"bzU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzV" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bzW" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bzX" = (/turf/simulated/wall,/area/medical/surgery2)
+"bzY" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bzZ" = (/obj/structure/closet/crate/freezer{name = "O- Blood Packs"},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bAa" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/alarm/cold{dir = 8;icon_state = "alarm0";pixel_x = 25;pixel_y = 0;tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bAb" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bAc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bAd" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bAe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bAf" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bAg" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bAh" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bAi" = (/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bAj" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bAk" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner";dir = 1},/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bAl" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bAm" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bAn" = (/turf/simulated/floor/carpet/blue,/area/rnd/rdoffice)
+"bAo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bAp" = (/obj/structure/closet/secure_closet/RD,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bAq" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bAr" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/atm{pixel_y = -32},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bAs" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bAt" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bAu" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bAv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bAw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bAx" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bAy" = (/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bAz" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/floor/tiled/dark,/area/rnd/lab)
+"bAA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/chapel,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/civilian_west{c_tag = "Chapel - Altar";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bAB" = (/obj/machinery/r_n_d/protolathe,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/dark,/area/rnd/lab)
+"bAC" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/chapel/main)
+"bAD" = (/obj/machinery/door/morgue{dir = 2;name = "Confession Booth (Chaplain)";req_access = list(22)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bAE" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bAF" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bAG" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medical Office Maintenance";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/medbay)
+"bAH" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bAI" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bAJ" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bAK" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_y = 27},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bAL" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bAM" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bAN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bAO" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Virology South";dir = 8;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bAP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bAQ" = (/obj/machinery/iv_drip,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/turf/simulated/floor/plating,/area/medical/surgery2)
+"bAR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{dir = 8;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bAS" = (/obj/machinery/button/remote/blast_door{id = "OR2shutters";name = "Shutters Control";pixel_y = 26;req_access = list(5)},/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bAT" = (/obj/structure/closet/crate/freezer{name = "Various Blood Packs"},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bAU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bAV" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bAW" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bAX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bAY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bAZ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bBa" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bBb" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBc" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintance";req_access = list(12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps/airtight,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/medbay2)
+"bBd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBh" = (/turf/simulated/wall,/area/crew_quarters/sleep/research)
+"bBi" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bBj" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bBk" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bBl" = (/obj/structure/table/rack,/obj/machinery/light_switch{pixel_y = -23},/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/cartridge/signal/science{pixel_x = -4;pixel_y = 2},/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/rig/hazmat/equipped,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bBm" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/obj/item/device/radio/intercom{frequency = 1459;name = "Station Intercom (General)";pixel_x = 0;pixel_y = -30},/obj/item/weapon/circuitboard/teleporter,/obj/item/weapon/circuitboard/aicore{pixel_x = -2;pixel_y = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bBn" = (/obj/machinery/computer/area_atmos,/obj/machinery/requests_console{name = "Research Director RC";pixel_x = -2;pixel_y = -30;department = "Research Director's Desk";departmentType = 5;announcementConsole = 1},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bBo" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice)
+"bBp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bBq" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bBr" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/camera/network/research{c_tag = "Research - Xenobotany";dir = 8;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bBs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/lab)
+"bBt" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bBu" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bBv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bBw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/rnd/lab)
+"bBx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 4},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bBy" = (/obj/effect/floor_decal/chapel,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bBz" = (/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 1;frequency = 1480;name = "Confessional Intercom";pixel_x = 25},/obj/structure/bed/chair,/obj/structure/window/reinforced/tinted,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bBA" = (/obj/structure/sign/nosmoking_1{pixel_x = 0;pixel_y = -32},/obj/machinery/body_scanconsole{icon_state = "body_scannerconsole";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBB" = (/obj/machinery/bodyscanner{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBC" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBD" = (/obj/machinery/computer/med_data,/obj/machinery/camera/network/medbay{c_tag = "Medical - Patient Ward";dir = 1;icon_state = "camera"},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBE" = (/obj/machinery/door/airlock/glass_medical{id_tag = "Pre-op";name = "Pre/Post Operatory Room"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBF" = (/obj/machinery/button/remote/airlock{id = "Pre-op";name = "Remote Door Control";pixel_y = -26},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBG" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bBI" = (/obj/structure/closet/crate/freezer{name = "Fridge"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bBJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBK" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bBL" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bBM" = (/obj/structure/sign/nosmoking_1{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bBN" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/closet/crate/freezer{name = "Fridge"},/turf/simulated/floor/tiled/freezer{name = "cold storage tiles";temperature = 278},/area/medical/medbay2)
+"bBO" = (/obj/machinery/door/airlock/command{id_tag = "rdmdoor";name = "Research Director's Meeting Room";req_access = list(30)},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/rdoffice)
+"bBP" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/obj/machinery/door/firedoor,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/window/reinforced/polarized{id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice)
+"bBQ" = (/obj/item/weapon/bonesetter,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bBR" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bBS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bBT" = (/obj/machinery/vending/wallmed2{pixel_x = 28},/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bBU" = (/turf/simulated/wall,/area/maintenance/substation/medical)
+"bBV" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/cable/green,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/window/reinforced/polarized{dir = 1;id = "RDTint"},/obj/structure/window/reinforced/polarized{id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 4;id = "RDTint"},/obj/structure/window/reinforced/polarized{dir = 8;id = "RDTint"},/turf/simulated/floor/plating,/area/rnd/rdoffice)
+"bBW" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bBX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bBY" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bBZ" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCa" = (/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCb" = (/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCc" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCd" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"bCe" = (/obj/structure/sink{pixel_y = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCf" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCg" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCh" = (/obj/machinery/light,/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bCi" = (/obj/machinery/atmospherics/unary/heater{dir = 2;icon_state = "heater"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCj" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/rnd/lab)
+"bCl" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCm" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCn" = (/obj/machinery/camera/network/research{c_tag = "Research - Research & Development";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/computer/rdconsole,/turf/simulated/floor/tiled/dark,/area/rnd/lab)
+"bCo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bCp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/r_n_d/circuit_imprinter,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/lab)
+"bCq" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bCr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/chapel{icon_state = "chapel";dir = 8},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bCs" = (/turf/simulated/wall,/area/rnd/lab)
+"bCt" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light/small,/obj/item/device/radio/intercom{broadcasting = 1;frequency = 1480;name = "Confessional Intercom";pixel_x = 25},/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bCu" = (/obj/machinery/door/morgue{dir = 2;name = "Confession Booth"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/chapel/main)
+"bCv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bCw" = (/obj/machinery/door/airlock/glass{name = "Chapel"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/chapel/main)
+"bCx" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bCy" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bCz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bCA" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bCB" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bCC" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
+"bCD" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bCE" = (/obj/item/device/radio/intercom{pixel_x = -28},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bCF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/blast/shutters{dir = 1;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bCG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{dir = 1;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgerywing)
+"bCH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bCI" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/structure/plasticflaps/airtight,/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bCJ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bCK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bCL" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/camera/network/research{c_tag = "Medical - Break Room"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCM" = (/obj/machinery/newscaster{pixel_y = 32},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCN" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bCO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bCP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bCQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/surgery2)
+"bCR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bCT" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bCU" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/item/device/radio/intercom{pixel_x = -27},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCV" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bCW" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/lab)
+"bCX" = (/obj/machinery/vending/cigarette,/obj/structure/sign/nosmoking_1{pixel_x = -32},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCY" = (/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bCZ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/lab)
+"bDa" = (/obj/machinery/door/airlock/research{name = "Materials";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bDb" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/rnd/lab)
+"bDc" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/research)
+"bDf" = (/obj/machinery/door/airlock/glass{name = "Chapel"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/chapel/main)
+"bDg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/research)
+"bDh" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 4;id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 8;id = "chapel"},/obj/structure/window/reinforced/polarized{id = "chapel"},/obj/structure/window/reinforced/polarized{dir = 1;id = "chapel"},/turf/simulated/floor/plating,/area/chapel/main)
+"bDi" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDj" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDk" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bDl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDm" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDn" = (/turf/simulated/wall/r_wall,/area/outpost/research/chemistry)
+"bDo" = (/obj/item/device/radio/intercom{pixel_y = -27},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDp" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 3";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDr" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bDs" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bDt" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bDu" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bDv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDw" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDx" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bDy" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bDz" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bDA" = (/turf/simulated/wall,/area/library)
+"bDB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library)
+"bDC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library)
+"bDD" = (/obj/machinery/door/airlock/medical{icon_state = "door_locked";locked = 1;name = "Operating Theatre Two";req_access = list(45)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/tape/engineering{icon_state = "engineering_v"},/obj/machinery/holosign/surgery{id = "OR2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bDE" = (/obj/machinery/door/airlock/glass{name = "Library"},/obj/machinery/door/firedoor,/turf/simulated/floor/carpet,/area/library)
+"bDF" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back.";name = "Surgery Cleaner"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bDG" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bDH" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bDI" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = -3;pixel_y = 3},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/medical/surgery2)
+"bDJ" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bDK" = (/obj/structure/table/rack,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bDL" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid";name_tag = "Medbay Subgrid"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bDM" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Medical"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bDN" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bDO" = (/obj/effect/decal/cleanable/dirt,/obj/item/stack/tile/floor,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bDP" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDQ" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDR" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/landmark/start{name = "Lab Assistant"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDS" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/landmark/start{name = "Lab Assistant"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDT" = (/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bDU" = (/obj/machinery/papershredder,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDV" = (/obj/machinery/door/airlock/glass_research{name = "Genetics Laboratory"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bDW" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDX" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bDY" = (/obj/item/device/radio/intercom{pixel_x = 27},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bDZ" = (/obj/machinery/atmospherics/binary/pump,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bEa" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bEb" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bEc" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bEd" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/item/weapon/reagent_containers/dropper,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEe" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEg" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEh" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEi" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{pixel_x = 27},/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEl" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bEm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bEn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bEo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bEp" = (/obj/machinery/camera/network/civilian_west{c_tag = "Central Corridor - Camera 2";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bEq" = (/obj/machinery/door/airlock/glass{name = "Library"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/library)
+"bEr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Library Maintenance";req_access = list(12)},/turf/simulated/floor/plating,/area/library)
+"bEs" = (/obj/machinery/requests_console{department = "Medical Bay";pixel_x = 0;pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bEt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{dir = 8;id = "OR2shutters";layer = 3.3;name = "OR-2 Privacy Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bEu" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bEv" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/library)
+"bEw" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/library)
+"bEx" = (/obj/structure/table/standard,/obj/machinery/button/holosign{id = "OR2";pixel_x = -4;pixel_y = -26},/obj/machinery/light_switch{pixel_x = 4;pixel_y = -26},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bEy" = (/turf/simulated/floor/carpet,/area/library)
+"bEz" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bEA" = (/turf/simulated/floor/wood,/area/library)
+"bEB" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bEC" = (/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library)
+"bED" = (/obj/machinery/librarycomp{pixel_y = 0},/turf/simulated/floor/wood,/area/library)
+"bEE" = (/obj/machinery/camera/network/medbay{c_tag = "Medical - Operating Theatre Two";dir = 1;icon_state = "camera"},/obj/item/device/radio/intercom{pixel_y = -26},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/medical/surgery2)
+"bEF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled/dark,/area/library)
+"bEG" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor/tiled/dark,/area/library)
+"bEH" = (/obj/structure/sink/kitchen{dir = 8;icon_state = "sink_alt";name = "Surgical sink";pixel_x = 20},/obj/effect/decal/cleanable/dirt,/obj/item/device/assembly/mousetrap,/obj/effect/decal/remains/mouse,/turf/simulated/floor/plating,/area/medical/surgery2)
+"bEI" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bEJ" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/sign/electricshock{pixel_x = 32},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bEK" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/light/small,/obj/machinery/camera/network/medbay{c_tag = "Medical - Medical Substation";dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bEL" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bEM" = (/obj/machinery/light/small/emergency{dir = 8},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bEN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bEO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bEP" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bEQ" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve,/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bER" = (/obj/machinery/camera/network/research{c_tag = "Research - Corridor Camera 1"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bES" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bET" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bEU" = (/obj/machinery/door/window,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bEV" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bEW" = (/obj/machinery/chemical_dispenser,/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEX" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEY" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bEZ" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bFa" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFb" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFd" = (/obj/machinery/botany/editor,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bFe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/library)
+"bFj" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 0;pixel_y = 32},/turf/simulated/floor/wood,/area/library)
+"bFk" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/library)
+"bFl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bFm" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/library)
+"bFn" = (/obj/machinery/door/blast/shutters{density = 0;dir = 2;icon_state = "shutter0";id = "LCKDshutters";name = "MedBay Lockdown Shutters";opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance";req_access = list(5)},/obj/effect/floor_decal/corner/lime{dir = 10},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/medical/surgerywing)
+"bFo" = (/obj/machinery/door/airlock/engineering{name = "Medbay Substation";req_one_access = list(11,24,5)},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bFp" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bFq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bFr" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Librarian"},/turf/simulated/floor/wood,/area/library)
+"bFs" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bFt" = (/obj/machinery/vending/coffee,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFu" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFv" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/library)
+"bFw" = (/obj/structure/bed/chair{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFx" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve,/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFy" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 8},/obj/effect/floor_decal/corner/mauve,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Research";sortType = "Research"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bFC" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bFD" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFF" = (/obj/machinery/door/airlock/research{name = "Conference Room";req_access = list(47)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/research)
+"bFG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction/yjunction{icon_state = "pipe-y";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bFH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bFI" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bFJ" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bFK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bFL" = (/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/research)
+"bFM" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bFN" = (/turf/simulated/wall/r_wall,/area/rnd/misc_lab)
+"bFO" = (/turf/simulated/wall,/area/outpost/research/chemistry)
+"bFP" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8;frequency = 1441;icon_state = "map_injector";id = "xenobot_inj";pixel_y = 1;use_power = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/rnd/xenobiology/xenoflora)
+"bFQ" = (/obj/machinery/botany/extractor,/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bFR" = (/turf/simulated/wall,/area/crew_quarters/sleep/main)
+"bFS" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/obj/machinery/camera/network/research{c_tag = "Research - Chemistry Laboratory";dir = 1;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bFT" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/machinery/requests_console{department = "Science";departmentType = 2;name = "Science Requests Console";pixel_x = -30;pixel_y = 0},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bFU" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/library)
+"bFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/library)
+"bFW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bFX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bFY" = (/turf/simulated/floor/tiled/dark,/area/library)
+"bFZ" = (/obj/structure/cult/tome,/obj/item/clothing/under/suit_jacket/red,/turf/simulated/floor/tiled/dark,/area/library)
+"bGa" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bGb" = (/obj/structure/table/standard,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bGc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bGd" = (/obj/machinery/light/small/emergency,/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGe" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/wood,/area/library)
+"bGf" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/library)
+"bGg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/research)
+"bGh" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/research)
+"bGi" = (/turf/simulated/wall/r_wall,/area/medical/genetics)
+"bGj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/genetics)
+"bGk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/library)
+"bGl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/medical/genetics)
+"bGm" = (/obj/structure/table/woodentable,/obj/machinery/door/window/westright{dir = 8;icon_state = "right";name = "Library Desk Door"},/turf/simulated/floor/wood,/area/library)
+"bGn" = (/obj/machinery/door/morgue{dir = 2;name = "Private Study";req_access = list(37)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/library)
+"bGo" = (/obj/machinery/atmospherics/unary/freezer,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bGp" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library)
+"bGq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bGr" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/dark,/area/library)
+"bGs" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/camera,/obj/item/device/eftpos{eftpos_name = "Library EFTPOS scanner"},/obj/machinery/camera/network/civilian_west{c_tag = "Library - Backroom";dir = 8},/turf/simulated/floor/tiled/dark,/area/library)
+"bGt" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGu" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGv" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGw" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGx" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGy" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bGz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main)
+"bGA" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bGB" = (/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bGC" = (/turf/simulated/wall,/area/hallway/primary/aft)
+"bGD" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/library)
+"bGE" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bGF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/library)
+"bGG" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bGH" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/structure/window/reinforced,/turf/simulated/floor/wood,/area/library)
+"bGI" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bGJ" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGK" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bGL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGM" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"bGN" = (/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room";req_one_access = list(7,29)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/outpost/research/chemistry)
+"bGO" = (/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGP" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGQ" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/central_one)
+"bGR" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"bGS" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1;pixel_y = 5},/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/wood,/area/library)
+"bGT" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/blue{pixel_x = 5;pixel_y = 5},/obj/structure/window/reinforced{dir = 8},/obj/machinery/recharger,/turf/simulated/floor/wood,/area/library)
+"bGU" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Library - Fore Camera";dir = 8},/turf/simulated/floor/wood,/area/library)
+"bGV" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen/invisible,/turf/simulated/floor/tiled/dark,/area/library)
+"bGW" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGX" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Maintance";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bGZ" = (/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHa" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHb" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHc" = (/obj/machinery/door/airlock/maintenance{name = "Research Division Maintenance";req_access = list(47);req_one_access = newlist()},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/sleep/research)
+"bHd" = (/obj/machinery/door/airlock/glass_research{name = "Genetics Lab";req_access = list(9)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bHe" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 10;icon_state = "intact"},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHf" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHg" = (/obj/machinery/atmospherics/unary/heater,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHh" = (/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHi" = (/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHj" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHk" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main)
+"bHl" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bHm" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bHn" = (/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bHp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bHq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/wood,/area/library)
+"bHr" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/machinery/camera/network/research{c_tag = "Research - Miscellaneous Lab"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bHt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHu" = (/obj/machinery/librarypubliccomp,/turf/simulated/floor/wood,/area/library)
+"bHv" = (/obj/structure/closet/bombcloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHw" = (/obj/structure/table/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,/area/maintenance/medbay)
+"bHx" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHy" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHz" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHA" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bHB" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHC" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHD" = (/obj/machinery/firealarm{dir = 1;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHE" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHF" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bHG" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1;pixel_y = 5},/turf/simulated/floor/wood,/area/library)
+"bHH" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1;pixel_y = 5},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/library)
+"bHI" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bHJ" = (/obj/machinery/door/window/westright{name = "Library Desk Door";icon_state = "right";dir = 2},/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/wood,/area/library)
+"bHK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bHL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bHM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bHN" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop{pixel_x = 3;pixel_y = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHO" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bHP" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bHQ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bHR" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bHS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHU" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bHV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bHW" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bHX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bHY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/disks,/obj/item/device/flashlight/pen,/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bHZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIb" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/disks,/obj/item/device/flashlight/pen,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bId" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/wood,/area/library)
+"bIe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/wood,/area/library)
+"bIf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/library)
+"bIg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/library)
+"bIh" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/library)
+"bIi" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIj" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIk" = (/obj/structure/curtain/medical,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bIl" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIm" = (/obj/structure/curtain/medical,/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bIn" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIo" = (/obj/structure/girder,/obj/item/stack/material/steel,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIp" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/bed/chair/wheelchair,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIr" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIs" = (/obj/structure/window/reinforced{dir = 1},/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIt" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bIu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIv" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIw" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bIy" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIz" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bIA" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library)
+"bIB" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bIC" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/library)
+"bID" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bIE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIF" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIG" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bII" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/bed/chair/wheelchair,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bIL" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIM" = (/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main)
+"bIN" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/camera/network/research{c_tag = "Research - Genetics Laboratory";dir = 8;network = list("Research","Toxins Test Area")},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bIO" = (/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bIP" = (/obj/machinery/camera/network/research{c_tag = "Research - Miscellaneous Gas Controller";dir = 4;network = list("Research","Toxins Test Area")},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bIQ" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bIR" = (/obj/structure/table/woodentable,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/library)
+"bIS" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/library)
+"bIT" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor/wood,/area/library)
+"bIU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library)
+"bIV" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bIW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library)
+"bIX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bIY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bIZ" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJa" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bJb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bJc" = (/obj/item/stack/material/steel,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJd" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJe" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJf" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJg" = (/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher{pixel_x = 8},/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJh" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJi" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJj" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJk" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bJl" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bJm" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/main)
+"bJn" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bJo" = (/obj/machinery/door/airlock{id_tag = "Dormitory 2";name = "Dorm"},/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bJp" = (/obj/structure/sign/directions/engineering{dir = 1;icon_state = "direction_eng";pixel_x = 32;pixel_y = 14},/obj/structure/sign/directions/medical{dir = 1;icon_state = "direction_med";pixel_x = 32;pixel_y = 6},/obj/structure/sign/directions/science{dir = 1;icon_state = "direction_sci";pixel_x = 32;pixel_y = -2},/obj/structure/sign/directions/security{dir = 1;icon_state = "direction_sec";pixel_x = 32;pixel_y = -12},/obj/structure/sign/directions/evac{dir = 8;icon_state = "direction_evac";pixel_x = 32;pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bJq" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bJr" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJs" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJt" = (/turf/simulated/wall,/area/rnd/misc_lab)
+"bJu" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall/r_wall,/area/rnd/misc_lab)
+"bJv" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bJw" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bJx" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bJy" = (/obj/machinery/newscaster{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bJz" = (/obj/structure/table/woodentable,/obj/item/weapon/deck/tarot,/turf/simulated/floor/wood,/area/library)
+"bJA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library)
+"bJB" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bJC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library)
+"bJD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bJE" = (/obj/machinery/computer/scan_consolenew,/obj/item/device/radio/intercom{pixel_x = -27},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bJF" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/medbay)
+"bJG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bJH" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bJI" = (/obj/machinery/computer/scan_consolenew,/obj/item/device/radio/intercom{pixel_x = 27},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bJJ" = (/obj/structure/table/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,/area/maintenance/research_port)
+"bJK" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bJL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/neaera,/turf/simulated/floor/plating,/area/medical/genetics)
+"bJM" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bJN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bJO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/button/remote/blast_door{desc = "It controls Misc. Science's vacuum inlet.";id = "MiscPump";name = "Misc. Science Vacuum Pump";pixel_y = -28},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bJP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/westleft{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/monkey,/turf/simulated/floor/plating,/area/medical/genetics)
+"bJQ" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJR" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJT" = (/obj/item/toy/figure,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bJU" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJV" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/table/standard,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJW" = (/obj/structure/closet/bombcloset,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bJX" = (/obj/machinery/hologram/holopad,/obj/machinery/light/small,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bJY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bJZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/camera/network/civilian_west{c_tag = "Dormitories - Main Level";dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bKa" = (/obj/item/device/radio/intercom{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bKb" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/library)
+"bKc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKd" = (/obj/machinery/light_switch{pixel_x = 22;pixel_y = 10},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bKe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bKg" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bKh" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bKi" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bKj" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKk" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/farwa,/turf/simulated/floor/plating,/area/medical/genetics)
+"bKl" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bKm" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 10},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKn" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bKo" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bKp" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bKq" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bKr" = (/turf/simulated/wall,/area/storage/emergency3)
+"bKs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bKt" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bKu" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bKv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/library)
+"bKw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/library)
+"bKx" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bKy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/library)
+"bKz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library)
+"bKA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bKC" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bKD" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bKE" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bKF" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bKG" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northright{req_one_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/stok,/turf/simulated/floor/plating,/area/medical/genetics)
+"bKH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Autopsy Room";req_access = list(47)},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bKI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northleft{req_access = list(9)},/obj/effect/decal/warning_stripes,/mob/living/carbon/human/monkey,/turf/simulated/floor/plating,/area/medical/genetics)
+"bKJ" = (/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bKK" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bKL" = (/obj/machinery/door/window/southright{heat_proof = 1;name = "Test Chamber";req_one_access = list(7,29)},/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bKM" = (/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bKN" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bKO" = (/obj/machinery/light/small/emergency,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bKP" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency3)
+"bKQ" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency3)
+"bKR" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency3)
+"bKS" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/library)
+"bKT" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKU" = (/obj/machinery/lapvend,/turf/simulated/floor/wood,/area/library)
+"bKV" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/library)
+"bKW" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "civilian_eva_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bKX" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/library)
+"bKY" = (/obj/machinery/papershredder,/turf/simulated/floor/carpet,/area/library)
+"bKZ" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library)
+"bLa" = (/obj/machinery/photocopier,/obj/machinery/light,/turf/simulated/floor/wood,/area/library)
+"bLb" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bLc" = (/turf/simulated/wall,/area/maintenance/library)
+"bLd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bLe" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bLf" = (/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bLg" = (/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bLh" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLi" = (/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/standard,/obj/machinery/camera/network/research{c_tag = "Research - Autopsy"},/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bLj" = (/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bLk" = (/obj/item/stack/material/steel{amount = -5;description_info = "A non-stack of non-metal. You're not sure how it exists or why it's stable.";name = "Non-sheet of non-steel";origin_tech = "materials=-1"},/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bLl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLm" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/main)
+"bLn" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Aft Corridor - Camera 3";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bLo" = (/obj/random/toolbox,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLp" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "civilian_eva_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bLq" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bLr" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bLs" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLt" = (/obj/item/weapon/wrench,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLu" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLv" = (/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 8},/obj/structure/cable/green{icon_state = "12-0"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bLw" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLx" = (/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bLy" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/maintenance/research_port)
+"bLz" = (/obj/machinery/atmospherics/unary/vent_pump/siphon{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bLA" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bLB" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bLC" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency3)
+"bLD" = (/obj/machinery/space_heater,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency3)
+"bLE" = (/obj/machinery/door/window/southright{dir = 1;heat_proof = 1;name = "Test Chamber";req_one_access = list(7,29)},/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bLF" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bLG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bLH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bLI" = (/turf/simulated/wall,/area/crew_quarters/kitchen)
+"bLJ" = (/turf/simulated/floor/plating,/area/maintenance/library)
+"bLK" = (/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j2"},/turf/simulated/floor/carpet,/area/library)
+"bLL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"bLM" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "civilian_eva_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "civilian_eva_pump";tag_chamber_sensor = "civilian_eva_sensor";tag_exterior_door = "civilian_eva_outer";tag_interior_door = "civilian_eva_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "civilian_eva_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "civilian_eva_pump"},/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bLN" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLP" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/obj/machinery/requests_console{department = "Genetics Lab";departmentType = 2;name = "Requests Console";pixel_x = 0;pixel_y = -32},/obj/effect/floor_decal/corner/mauve{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics)
+"bLR" = (/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bLT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bLU" = (/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLV" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLW" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/retractor,/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/mauve/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bLX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bLY" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/closet/chefcloset,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bLZ" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bMa" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMb" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/fryer,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMc" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/mixer/candy,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bMe" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{frequency = 1449;pixel_x = 0;pixel_y = -27},/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Library - Port Camera";dir = 1},/turf/simulated/floor/wood,/area/library)
+"bMf" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/plasticflaps/airtight,/obj/machinery/door/airlock/freezer_maint{req_access = list(28)},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bMg" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/machinery/camera/network/civilian_west{c_tag = "Library - Starboard Camera";dir = 1},/turf/simulated/floor/wood,/area/library)
+"bMh" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "civilian_eva_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/turf/simulated/floor/plating,/area/maintenance/medbay)
+"bMi" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/library)
+"bMj" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bMk" = (/obj/random/junk,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bMl" = (/obj/effect/decal/cleanable/dirt,/obj/random/loot,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bMm" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMn" = (/obj/machinery/door/airlock/maintenance{name = "Miscellaneous Reseach Maintenance";req_one_access = list(7,29)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bMo" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMp" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/plating,/area/storage/emergency3)
+"bMq" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/emergency3)
+"bMr" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bMs" = (/obj/machinery/door/airlock{name = "Central Emergency Storage";req_one_access = list(12,47)},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/emergency3)
+"bMt" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bMv" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Library Maintenance";req_access = list(12)},/turf/simulated/floor/plating,/area/library)
+"bMw" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "civilian_eva_airlock";name = "exterior access button";pixel_x = 27;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bMx" = (/obj/structure/table/standard,/obj/item/clothing/ears/earmuffs{pixel_x = 4;pixel_y = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bMy" = (/obj/structure/table/standard,/obj/item/clothing/glasses/sunglasses{pixel_x = 4;pixel_y = 4},/obj/item/clothing/glasses/sunglasses{pixel_x = -2;pixel_y = -2},/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMz" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMA" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library)
+"bMB" = (/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/library)
+"bMC" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bMD" = (/obj/structure/table/steel_reinforced,/obj/item/stack/tile/floor,/obj/random/toolbox,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bME" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMF" = (/obj/structure/table/steel_reinforced,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMH" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMI" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bML" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/primary/aft)
+"bMM" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency3)
+"bMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bMO" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMP" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bMQ" = (/obj/structure/table/marble,/obj/item/weapon/material/kitchen/rollingpin,/obj/item/weapon/material/kitchen/utensil/knife,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bMT" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bMU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"bMV" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 4;name = "Library";sortType = "Library"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bMW" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bMX" = (/obj/machinery/camera/network/research{c_tag = "Research - Miscellaneous Testing Chamber";dir = 1;network = list("Research","Toxins Test Area")},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
+"bMY" = (/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/library)
+"bMZ" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bNa" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library)
+"bNb" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bNc" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNd" = (/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bNe" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNf" = (/obj/structure/table/rack,/obj/random/loot,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bNg" = (/obj/structure/table/rack,/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bNh" = (/turf/simulated/wall,/area/maintenance/cargo)
+"bNi" = (/obj/structure/noticeboard{pixel_y = 32},/obj/structure/table/marble,/obj/machinery/microwave{desc = "Vaguely smells of burnt casserole.";pixel_y = 5},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNj" = (/turf/simulated/wall,/area/hydroponics)
+"bNk" = (/obj/machinery/requests_console{department = "Kitchen";pixel_x = 0;pixel_y = 28},/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/mixer/cereal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNl" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2";freq = 1400;location = "Kitchen"},/obj/machinery/door/firedoor{dir = 2},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled/dark,/area/crew_quarters/kitchen)
+"bNm" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1;name = "Kitchen";sortType = "Kitchen"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bNn" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNp" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bNq" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bNr" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bNs" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced,/obj/machinery/door/blast/regular{density = 0;dir = 4;icon_state = "pdoor0";id = "MiscBlast";name = "Misc Science Blast Doors";opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/rnd/misc_lab)
+"bNt" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bNu" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bNv" = (/obj/item/weapon/paper,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bNw" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bNx" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bNy" = (/obj/machinery/smartfridge{density = 0;pixel_x = -32},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNz" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics)
+"bNA" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics)
+"bNB" = (/obj/machinery/door/window/southleft{base_state = "left";dir = 2;icon_state = "left";name = "Kitchen Delivery";req_access = list(28)},/turf/simulated/floor/tiled/dark,/area/crew_quarters/kitchen)
+"bNC" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bND" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bNE" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/alarm/freezer{dir = 8;icon_state = "alarm0";pixel_x = 28;tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bNF" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bNG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bNH" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNJ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNK" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNL" = (/obj/structure/table/marble,/obj/item/clothing/gloves/latex,/obj/item/glass_jar,/obj/item/device/eftpos{eftpos_name = "Kitchen EFTPOS scanner"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNM" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "kitchen";layer = 3.3;name = "Kitchen Shutters"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/kitchen)
+"bNN" = (/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bNO" = (/obj/structure/table/marble,/obj/item/weapon/pen,/obj/item/weapon/packageWrap,/obj/item/weapon/paper_bin{pixel_x = -2;pixel_y = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bNQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bNR" = (/obj/machinery/door/airlock/freezer{name = "Kitchen cold room";req_access = list(28)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps/airtight,/turf/simulated/floor/tiled,/area/crew_quarters/kitchen)
+"bNS" = (/turf/simulated/floor/wood,/area/maintenance/library)
+"bNT" = (/obj/random/junk,/turf/simulated/floor/carpet,/area/maintenance/library)
+"bNU" = (/turf/simulated/floor/carpet,/area/maintenance/library)
+"bNV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bNW" = (/obj/item/weapon/bedsheet/clown,/obj/structure/bed,/turf/simulated/floor/wood,/area/maintenance/library)
+"bNX" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bNY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bNZ" = (/obj/structure/target_stake,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bOa" = (/obj/structure/target_stake,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bOb" = (/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bOc" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bOd" = (/obj/item/weapon/stool,/obj/item/weapon/paper,/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bOe" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bOf" = (/obj/item/stack/tile/floor,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bOg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bOh" = (/obj/machinery/light/small{dir = 4},/obj/machinery/icecream_vat,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bOi" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hydroponics)
+"bOj" = (/turf/simulated/floor/tiled,/area/hydroponics)
+"bOk" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bOl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bOm" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance";req_access = list(35)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bOn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green,/turf/simulated/floor/tiled,/area/hydroponics)
+"bOo" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOp" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bOq" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3;pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bOr" = (/obj/structure/extinguisher_cabinet{pixel_x = 32},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/sink/kitchen{dir = 8;icon_state = "sink_alt";pixel_x = 20},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bOs" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/reagentgrinder{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bOt" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bOu" = (/obj/structure/closet/secure_closet/freezer/kitchen,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bOv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/library)
+"bOw" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/wood,/area/maintenance/library)
+"bOx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/civilian_west{c_tag = "Kitchen - Cold Storage";dir = 4},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bOy" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bOz" = (/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bOA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bOB" = (/obj/machinery/gibber,/obj/effect/decal/warning_stripes,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bOC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hydroponics)
+"bOD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hydroponics)
+"bOE" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2";freq = 1400;location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/hydroponics)
+"bOF" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction/flipped{dir = 2;name = "Hydroponics";sortType = "Hydroponics"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bOG" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/dark,/area/hydroponics)
+"bOH" = (/obj/machinery/seed_extractor,/obj/machinery/light,/turf/simulated/floor/tiled,/area/hydroponics)
+"bOI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bOJ" = (/obj/machinery/door/window/eastright{dir = 4;icon_state = "right";name = "Hydroponics Delivery";req_access = list(35)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/hydroponics)
+"bOK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bON" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bOO" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Supplies";req_access = list(35,28)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/library)
+"bOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOT" = (/obj/effect/landmark/costume/pirate,/turf/simulated/floor/wood,/area/maintenance/library)
+"bOU" = (/obj/random/junk,/turf/simulated/floor/wood,/area/maintenance/library)
+"bOV" = (/obj/item/weapon/bedsheet/mime,/obj/structure/bed,/turf/simulated/floor/wood,/area/maintenance/library)
+"bOW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bOX" = (/obj/machinery/door/airlock/glass{name = "Hydroponics";req_access = list(35)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hydroponics)
+"bOY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bOZ" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled,/area/hydroponics)
+"bPa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hydroponics)
+"bPc" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -4;pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bPd" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo";pixel_x = -5},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Kitchen - Food Preparation";dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bPe" = (/obj/structure/kitchenspike,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bPf" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bPg" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/freezer{name = "freezer storage tiles";temperature = 253.15},/area/crew_quarters/kitchen)
+"bPh" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library)
+"bPi" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/library)
+"bPj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bPk" = (/obj/item/clothing/mask/gas/clown_hat,/obj/item/clothing/shoes/clown_shoes,/obj/item/clothing/under/rank/clown,/obj/item/weapon/storage/backpack/clown,/obj/item/toy/figure/clown,/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/turf/simulated/floor/wood,/area/maintenance/library)
+"bPl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bPm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bPn" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bPo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
+"bPp" = (/obj/structure/window/reinforced/polarized{id = "theatre"},/turf/simulated/floor/wood,/area/maintenance/library)
+"bPq" = (/obj/structure/window/reinforced/polarized{id = "theatre"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bPr" = (/obj/effect/landmark/costume/gladiator,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library)
+"bPs" = (/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library)
+"bPt" = (/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bPu" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bPv" = (/obj/structure/closet/secure_closet/hydroponics,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPw" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bPx" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPy" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPz" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPA" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bPB" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/hydroponics)
+"bPC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/grass,/area/hydroponics)
+"bPD" = (/obj/machinery/door/airlock/glass{name = "Hydroponics";req_access = list(35)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hydroponics)
+"bPE" = (/turf/simulated/wall,/area/crew_quarters/bar)
+"bPF" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bPG" = (/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bPH" = (/obj/structure/table/marble,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bPI" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/effect/landmark/costume/imperium_monk,/turf/simulated/floor/wood,/area/maintenance/library)
+"bPJ" = (/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bPK" = (/obj/structure/device/piano,/turf/simulated/floor/wood,/area/maintenance/library)
+"bPL" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/maintenance/library)
+"bPM" = (/obj/effect/landmark/costume/chicken,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library)
+"bPN" = (/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bPO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/remains/xeno,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bPP" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "maint_dungeon";pixel_x = 4;pixel_y = 8},/obj/machinery/button/windowtint{id = "maint_cell";pixel_x = -4;pixel_y = 8},/obj/machinery/light_switch{pixel_x = -4},/obj/item/weapon/paper,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/maintenance/research_port)
+"bPQ" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics)
+"bPR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/grass,/area/hydroponics)
+"bPS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics)
+"bPT" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics)
+"bPU" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/material/hatchet,/obj/item/weapon/material/minihoe,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Hydroponics - Produce Storage";dir = 4},/obj/machinery/smartfridge{density = 0;pixel_x = -32},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPV" = (/obj/machinery/vending/hydronutrients,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bPX" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bPY" = (/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Aft Corridor - Camera 2";dir = 1},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bPZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bQa" = (/obj/machinery/button/remote/blast_door{id = "kitchen";name = "Kitchen Shutters Control";pixel_x = -24;pixel_y = -1;req_access = list(28)},/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/disposal{name = "disposal unit"},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bQb" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bQc" = (/obj/structure/table/marble,/obj/item/clothing/head/cakehat,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bQd" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bQe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bQf" = (/obj/machinery/button/windowtint{id = "theatre";pixel_y = -26},/turf/simulated/floor/plating,/area/maintenance/library)
+"bQg" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/item/toy/figure/mime,/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/turf/simulated/floor/wood,/area/maintenance/library)
+"bQh" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/maintenance/library)
+"bQi" = (/obj/effect/landmark/costume/commie,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library)
+"bQj" = (/obj/structure/toilet{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bQk" = (/obj/machinery/door/airlock/research{icon_state = "door_locked";id_tag = "maint_dungeon";locked = 1;name = "Isolation Cell"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bQl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/grass,/area/hydroponics)
+"bQm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics)
+"bQn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hydroponics)
+"bQo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hydroponics)
+"bQp" = (/obj/machinery/biogenerator,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQq" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/landmark/start{name = "Gardener"},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQr" = (/obj/machinery/seed_extractor,/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQs" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 8;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 4;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 1;id = "maint_cell"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bQt" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 8;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 4;id = "maint_cell"},/obj/structure/window/reinforced/polarized{dir = 1;id = "maint_cell"},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bQu" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bQv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bQx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bQy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQz" = (/obj/effect/landmark/costume/plaguedoctor,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library)
+"bQA" = (/obj/effect/landmark/costume/elpresidente,/obj/structure/table/rack,/turf/simulated/floor/wood,/area/maintenance/library)
+"bQB" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/research_port)
+"bQC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics)
+"bQD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/grass,/area/hydroponics)
+"bQE" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hydroponics)
+"bQF" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Supplies";req_access = list(35)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQG" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hydroponics)
+"bQH" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hydroponics)
+"bQI" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/landmark/start{name = "Gardener"},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQJ" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQK" = (/obj/machinery/door/airlock/glass{name = "Diner"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/bar)
+"bQL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Hydroponics - Greenhouse";dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bQM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bQN" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hydroponics)
+"bQO" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hydroponics)
+"bQP" = (/obj/machinery/door/airlock/glass{name = "Kitchen";req_access = list(28)},/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bQQ" = (/obj/machinery/door/airlock/glass{name = "Kitchen";req_access = list(28)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"bQR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/grass,/area/hydroponics)
+"bQS" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bQT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hydroponics)
+"bQU" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green,/turf/simulated/floor/tiled,/area/hydroponics)
+"bQV" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Pasture";req_access = list(35,28)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hydroponics)
+"bQW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bQX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bQY" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bQZ" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bRa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRb" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bRc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/hydroponics)
+"bRd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRf" = (/turf/simulated/wall,/area/quartermaster/office)
+"bRg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRi" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/hydroponics)
+"bRj" = (/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics)
+"bRl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bRm" = (/obj/structure/table/marble,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bRn" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/flora/pottedplant/random,/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRo" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRp" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRq" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/wood,/area/maintenance/library)
+"bRr" = (/obj/structure/bed,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bRs" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bRt" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRu" = (/obj/item/weapon/stool/padded,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Kitchen Counter";dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRw" = (/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Dance Floor";dir = 8},/obj/machinery/floor_light/dance/alternate,/turf/simulated/floor/light,/area/crew_quarters/bar)
+"bRx" = (/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station)
+"bRy" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bRz" = (/obj/machinery/door/airlock/glass{name = "Hydroponics Pasture";req_access = list(35)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hydroponics)
+"bRA" = (/obj/machinery/autolathe,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRC" = (/obj/machinery/newscaster{pixel_x = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bRD" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRE" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRF" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRG" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/crew_quarters/bar)
+"bRH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/library)
+"bRI" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bRJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bRK" = (/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bRL" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bRM" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bRN" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bRO" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRP" = (/obj/machinery/camera/network/civilian_west{c_tag = "Hydroponics - Animal Pen";dir = 1},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/grass,/area/hydroponics)
+"bRQ" = (/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRR" = (/obj/effect/floor_decal/corner/green{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hydroponics)
+"bRS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bRT" = (/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRU" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Main Lobby"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRV" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bRW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bRX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/crew_quarters/bar)
+"bRY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/glass{name = "Diner"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/bar)
+"bRZ" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_alc/full,/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSc" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSe" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSf" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bSg" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bSh" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled,/area/hydroponics)
+"bSi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSj" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/green/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hydroponics)
+"bSl" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics)
+"bSo" = (/obj/machinery/camera/network/civilian_west{c_tag = "Aft Corridor - Camera 1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bSp" = (/obj/machinery/atm{pixel_x = 32},/obj/effect/floor_decal/corner/grey,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bSq" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSr" = (/obj/machinery/button/windowtint{id = "finedining";name = "Observation Deck Window Tint";pixel_x = -4;pixel_y = 26},/obj/machinery/button/remote/blast_door{id = "bar";name = "Bar Shutters";pixel_y = 36},/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Counter"},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSu" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSv" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSx" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bSy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"bSA" = (/obj/item/weapon/bananapeel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSD" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 8;name = "Bar";sortType = "Bar"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bSE" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bSF" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/library)
+"bSG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bSH" = (/obj/machinery/door/window/eastright,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bSI" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSJ" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bSL" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSM" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSN" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2";freq = 1400;location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/dark,/area/crew_quarters/bar)
+"bSO" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance";req_access = list(25)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/bar)
+"bSP" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library)
+"bSQ" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSR" = (/obj/machinery/light_switch{pixel_x = 0;pixel_y = 27},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSS" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = 8},/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = -8},/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = -4},/obj/item/weapon/material/kitchen/utensil/fork{pixel_x = 4},/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bST" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSV" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bSW" = (/obj/machinery/computer/ordercomp,/obj/machinery/atm{pixel_y = 32},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bSX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/plating,/area/quartermaster/office)
+"bSY" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bSZ" = (/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTa" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTb" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTc" = (/turf/simulated/wall,/area/maintenance/substation/civilian_west)
+"bTd" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTh" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bTj" = (/obj/machinery/smartfridge/drinks,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTk" = (/obj/machinery/door/window/southleft{base_state = "left";dir = 2;icon_state = "left";name = "Bar Delivery";req_access = list(25)},/turf/simulated/floor/tiled/dark,/area/crew_quarters/bar)
+"bTl" = (/obj/structure/closet/gmcloset{icon_closed = "black";icon_state = "black";name = "formal wardrobe"},/obj/item/device/eftpos{eftpos_name = "Bar EFTPOS scanner"},/obj/item/glass_jar,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTm" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = -8},/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = 8},/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = -4},/obj/item/weapon/material/kitchen/utensil/knife/plastic{pixel_x = 4},/obj/item/weapon/material/kitchen/utensil/knife/plastic,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTn" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/paper{info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest.";name = "Shotgun permit"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTo" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTp" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTq" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTr" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/lighter/zippo,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTs" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk";req_access = list(50)},/obj/structure/noticeboard{pixel_y = 27},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTt" = (/obj/structure/curtain/black{pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTu" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTv" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bTw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/plating,/area/quartermaster/office)
+"bTx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian West Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bTz" = (/obj/turbolift_map_holder/aurora/cargo,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station)
+"bTA" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bTB" = (/obj/structure/window/reinforced,/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bTC" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTD" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2";dir = 2},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTF" = (/obj/machinery/door/airlock{name = "Bar Backroom";req_access = list(25)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/bar)
+"bTG" = (/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/packageWrap,/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Backroom";dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTI" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTJ" = (/obj/structure/window/reinforced/polarized{id = "dancedance"},/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = -8},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 8},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = -4},/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 4},/obj/item/weapon/material/kitchen/utensil/spoon,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTK" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bTL" = (/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4;pixel_y = -2},/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTM" = (/obj/structure/table/reinforced,/obj/item/weapon/flame/lighter/zippo,/obj/structure/window/reinforced/polarized{id = "finedining"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bTR" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTS" = (/obj/machinery/papershredder,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTT" = (/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},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bTU" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bTV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bTW" = (/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bTX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bTY" = (/obj/structure/reagent_dispensers/beerkeg,/obj/machinery/requests_console{announcementConsole = 0;department = "Bar";departmentType = 2;name = "Bar RC";pixel_x = 30;pixel_y = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bTZ" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'";icon_state = "monkey_painting";name = "Mr. Deempisi portrait";pixel_x = -28;pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUa" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bUb" = (/obj/structure/bed/chair/comfy/black,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUc" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUd" = (/obj/machinery/vending/cigarette,/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Smoking Lounge"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUe" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUg" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bUh" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUi" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUj" = (/obj/structure/sign/poster{pixel_x = 0;pixel_y = 0},/turf/simulated/wall,/area/crew_quarters/bar)
+"bUk" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 8},/obj/structure/curtain/black{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUl" = (/turf/simulated/wall,/area/janitor)
+"bUm" = (/obj/item/weapon/bedsheet/brown,/obj/structure/bed,/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUn" = (/obj/machinery/door/airlock/engineering{name = "Civilian West Substation";req_one_access = list(11,24)},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bUo" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bUp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bUr" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUs" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"bUt" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/library)
+"bUu" = (/turf/simulated/wall,/area/quartermaster/storage)
+"bUv" = (/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/obj/structure/table/standard{name = "plastic table frame"},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Main Desk";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/item/device/multitool,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUx" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{id_tag = "cargodoor";name = "Cargo Office";req_access = list(50)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUz" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"bUA" = (/obj/machinery/door/window{dir = 2;name = "Bar";req_access = list(25)},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bUB" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 8;id = "bar";layer = 3.3;name = "Bar Shutters"},/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/paper_bin,/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bUC" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/barman_recipes,/obj/item/clothing/head/that{pixel_x = 4;pixel_y = 6},/obj/item/weapon/screwdriver,/obj/structure/window/reinforced/polarized{id = "finedining"},/turf/simulated/floor/lino,/area/crew_quarters/bar)
+"bUD" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar)
+"bUE" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar)
+"bUF" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/bar)
+"bUG" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Civilian West"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bUH" = (/obj/structure/bed/chair/comfy/black{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"bUI" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"bUJ" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"bUK" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUL" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable,/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/civilian_west{c_tag = "Civilian - Civilian Substation";dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bUM" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUN" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUO" = (/obj/item/weapon/storage/belt/utility,/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = -30;pixel_y = 0},/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUP" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/cobweb,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bUQ" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -28},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bUR" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bUS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bUT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bUU" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUV" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUW" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUX" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "finedining"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bUY" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/turf/simulated/floor/plating,/area/maintenance/library)
+"bUZ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bVa" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bVb" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian West";name_tag = "Civilian West Subgrid"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bVc" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
+"bVd" = (/obj/machinery/newscaster{pixel_x = -27;pixel_y = 1},/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6;pixel_y = -5},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/brown/full,/obj/item/stack/material/glass{pixel_x = 3;pixel_y = 3},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVe" = (/obj/structure/table/woodentable,/obj/machinery/light/small,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"bVf" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 0},/obj/effect/floor_decal/corner/brown,/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/folder/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVg" = (/obj/machinery/door/airlock{name = "Custodial Closet";req_access = list(26)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVh" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bVi" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair";dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bVj" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bVk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance";req_access = list(12)},/turf/simulated/floor/plating,/area/crew_quarters/bar)
+"bVl" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bVm" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Civilian West Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"bVn" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVp" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVq" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400;home_destination = "QM #1";suffix = "#1"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVr" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/alarm{pixel_y = 22},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVs" = (/obj/structure/closet/jcloset,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVt" = (/obj/machinery/newscaster{pixel_y = 30},/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVu" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/camera/network/security{c_tag = "Maintenance - Janitorial Office"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVv" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVx" = (/obj/structure/window/reinforced/polarized{dir = 4;id = "finedining"},/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bVy" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bVz" = (/obj/structure/closet/crate/medical,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVA" = (/turf/simulated/floor/tiled,/area/maintenance/library)
+"bVB" = (/obj/structure/closet/crate/internals,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVC" = (/obj/structure/closet/crate,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVG" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVH" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVI" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVJ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2";suffix = "#2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVK" = (/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVL" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVM" = (/obj/structure/noticeboard{pixel_y = -27},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bVN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVP" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bVR" = (/obj/structure/table/woodentable,/obj/machinery/light/small,/obj/machinery/camera/network/civilian_west{c_tag = "Bar - Diner Seating";dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"bVS" = (/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVW" = (/turf/simulated/wall,/area/outpost/mining_main/refinery)
+"bVX" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVY" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bVZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/disposal)
+"bWe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWf" = (/obj/machinery/door/blast/shutters{dir = 2;id = "qm_warehouse";name = "Warehouse Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWh" = (/obj/structure/boulder,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bWi" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate/plastic,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWj" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bWl" = (/obj/machinery/door/airlock/glass_mining{name = "Equipment storage";req_access = list(65)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWm" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bWn" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bWo" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #3"},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - MULE Storage";dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bWp" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial";departmentType = 1;pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bWq" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/steel,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bWr" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bWs" = (/obj/machinery/floor_light/dance/alternate,/turf/simulated/floor/light,/area/crew_quarters/bar)
+"bWt" = (/obj/structure/janitorialcart,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bWu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bWv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bWw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/disposal)
+"bWx" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/janitor)
+"bWy" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bWz" = (/obj/machinery/crusher_base,/turf/simulated/floor/reinforced,/area/maintenance/disposal)
+"bWA" = (/turf/simulated/wall/r_wall,/area/maintenance/disposal)
+"bWB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bWC" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/library)
+"bWD" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/library)
+"bWE" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse";name = "Warehouse Door Control";pixel_x = 24;pixel_y = 0;req_access = list(31)},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWF" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse";name = "Warehouse Door Control";pixel_x = -24;pixel_y = 0;req_access = list(31)},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWH" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bWJ" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWK" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery)
+"bWL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bWM" = (/obj/machinery/floor_light/dance,/turf/simulated/floor/light,/area/crew_quarters/bar)
+"bWN" = (/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Camera 1";dir = 1},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bWO" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/library)
+"bWP" = (/turf/simulated/wall,/area/maintenance/disposal)
+"bWQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bWR" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bWS" = (/obj/machinery/light/small/emergency{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bWT" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #4"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"bWU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bWV" = (/obj/random/junk,/turf/simulated/floor/reinforced,/area/maintenance/disposal)
+"bWW" = (/turf/simulated/floor/reinforced,/area/maintenance/disposal)
+"bWX" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/maintenance/disposal)
+"bWY" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bWZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bXa" = (/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance";req_access = list(26)},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/janitor)
+"bXb" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bXc" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bXd" = (/obj/machinery/door/airlock/mining{id_tag = "cargodoor";name = "Resource Processing";req_access = list(50)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXe" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bXf" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"bXg" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/library)
+"bXh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bXi" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 4;name = "Janitor Closet";sortType = "Janitor Closet"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bXj" = (/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/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"bXk" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/maintenance/disposal)
+"bXl" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bXm" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bXn" = (/obj/structure/boulder{icon_state = "boulder2"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bXo" = (/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bXp" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bXq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bXr" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bXs" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bXt" = (/obj/machinery/door/airlock/maintenance{name = "Mining Maintenance";req_access = list(48)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bXu" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXv" = (/obj/effect/landmark/corpse/engineer/rotten,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bXw" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bXx" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bXy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXz" = (/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXA" = (/obj/machinery/door/window/westright,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bXC" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXD" = (/obj/machinery/conveyor{dir = 8;id = "mining_internal"},/obj/structure/plasticflaps,/obj/machinery/mineral/output,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/library)
+"bXF" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{dir = 8;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXG" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bXH" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/library)
+"bXI" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bXJ" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bXK" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bXL" = (/obj/machinery/light/small/emergency,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/library)
+"bXM" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bXN" = (/obj/effect/decal/cleanable/blood/tracks/footprints,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bXO" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bXP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/tagger/partial{name = "Sorting Office";icon_state = "pipe-tagger-partial";dir = 1;sort_tag = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bXQ" = (/obj/machinery/door/airlock/maintenance{name = "Trash Compactor"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bXR" = (/obj/machinery/door/window/westleft,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXS" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/maintenance/disposal)
+"bXT" = (/obj/structure/boulder{icon_state = "boulder4"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bXU" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bXV" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery)
+"bXW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bXX" = (/obj/machinery/disposal/deliveryChute{pixel_y = -6},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/wall/r_wall,/area/maintenance/disposal)
+"bXY" = (/obj/machinery/light/small/emergency{dir = 8},/obj/structure/closet/crate,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bXZ" = (/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYa" = (/obj/structure/disposalpipe/sortjunction/wildcard{tag = "icon-pipe-j1s (NORTH)";icon_state = "pipe-j1s";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYb" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYc" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYd" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 9},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bYe" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYf" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bYg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bYh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/obj/item/modular_computer/telescreen/preset/trashcompactor{pixel_y = 26},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bYi" = (/obj/effect/decal/cleanable/blood/tracks/footprints,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bYj" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bYk" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bYl" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/obj/machinery/mineral/rigpress,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYm" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/crowbar/red{desc = "Used to remove floors and to pry open doors. And, once in a while, save the world."},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYn" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYo" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYp" = (/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bYq" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYr" = (/obj/machinery/mineral/output,/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYs" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYt" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYv" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYw" = (/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Maintenance - Trash Compactor";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bYx" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bYy" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bYz" = (/obj/structure/closet/crate/secure/loot,/obj/random/loot,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bYA" = (/obj/machinery/disposal/deliveryChute{dir = 8;pixel_x = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal)
+"bYB" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bYC" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYD" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYE" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/library)
+"bYF" = (/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Crate Storage";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYG" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction{dir = 1;name = "Sorting Office";sortType = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYH" = (/obj/structure/disposalpipe/up{icon_state = "pipe-u";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 8},/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYI" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"bYJ" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bYK" = (/obj/effect/floor_decal/corner/brown/full,/obj/structure/punching_bag,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bYM" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"bYO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"bYP" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Main Warehouse";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"bYQ" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYU" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYV" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/disposal)
+"bYW" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance";req_access = list(31)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"bYX" = (/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bYY" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bYZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bZa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZc" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZd" = (/obj/vehicle/train/cargo/trolley,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZe" = (/obj/vehicle/train/cargo/trolley,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZf" = (/obj/vehicle/train/cargo/trolley,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZg" = (/obj/vehicle/train/cargo/engine,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZh" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZi" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"bZj" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/mining,/obj/item/stack/flag/yellow,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"bZk" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/mining,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"bZl" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bZm" = (/obj/machinery/door/window,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"bZn" = (/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"bZo" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZp" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZq" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZr" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bZt" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal";name = "mining conveyor"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bZu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZv" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate/secure/loot,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZw" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZx" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZz" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"bZA" = (/obj/effect/large_stock_marker,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bZB" = (/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"bZC" = (/obj/machinery/conveyor{dir = 1;id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"bZD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"bZE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"bZF" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"bZG" = (/turf/simulated/wall,/area/outpost/mining_main/eva)
+"bZH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"bZI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"bZJ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZK" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"bZL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZO" = (/obj/effect/decal/cleanable/dirt,/obj/effect/large_stock_marker,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZP" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZQ" = (/obj/structure/closet,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bZS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bZT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
+"bZU" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZV" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/stack/flag/green,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"bZW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"bZX" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"bZY" = (/obj/machinery/suit_cycler/mining,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"bZZ" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/closet,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"caa" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/structure/weightlifter,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cab" = (/turf/simulated/floor/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/mine/unexplored)
+"cac" = (/obj/structure/boulder{icon_state = "boulder3"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cad" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 8},/area/mine/unexplored)
+"cae" = (/turf/simulated/floor/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_c"},/area/mine/unexplored)
+"caf" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cag" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/obj/random/loot,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"cah" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cai" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cal" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cam" = (/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"can" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cao" = (/obj/machinery/mineral/input,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cap" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caq" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/mine/unexplored)
+"car" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cas" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cat" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"cau" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cav" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Mineral Processing";dir = 8},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"caw" = (/obj/structure/track{icon_state = "track6"},/obj/structure/ore_box{icon_state = "orebox1";name = "minecart ore box"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"cax" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cay" = (/obj/structure/track{icon_state = "track14"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"caz" = (/obj/structure/track{icon_state = "track14"},/obj/structure/ore_box{icon_state = "orebox1";name = "minecart ore box"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"caA" = (/obj/structure/track{icon_state = "track10"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"caB" = (/obj/machinery/light/small{icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"caC" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/effect/large_stock_marker,/turf/simulated/floor/airless,/area/mine/unexplored)
+"caD" = (/obj/machinery/door/airlock/mining{id_tag = "cargodoor";name = "Mining Dock";req_access = list(50)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery)
+"caE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caF" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caG" = (/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},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"caH" = (/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/obj/machinery/camera/network/mining{c_tag = "Mining - Suit Storage";dir = 4},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/mining,/obj/item/stack/flag/red,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caI" = (/obj/effect/floor_decal/industrial/warning/dust/corner{icon_state = "warningcorner_dust";dir = 4},/obj/structure/track{icon_state = "track5"},/obj/vehicle/train/cargo/trolley/mining,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"caJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"caK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"caM" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/track{icon_state = "track13"},/obj/vehicle/train/cargo/engine/mining,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"caN" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caO" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 1},/obj/structure/track{icon_state = "track13"},/obj/vehicle/train/cargo/trolley/mining,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"caP" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/structure/track{icon_state = "track13"},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"caQ" = (/obj/effect/floor_decal/corner/brown,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caR" = (/obj/structure/track{icon_state = "track12"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"caS" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caT" = (/obj/structure/track{icon_state = "track8"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"caU" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caV" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caW" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caX" = (/obj/machinery/conveyor{dir = 4},/turf/simulated/floor/airless,/area/mine/unexplored)
+"caY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"caZ" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"cba" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbb" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbc" = (/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbd" = (/obj/machinery/door/airlock/external,/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbe" = (/obj/item/weapon/key/cargo_train,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbf" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbg" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Shaft Miner"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbj" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbk" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"cbl" = (/obj/machinery/light_switch{pixel_x = 25;pixel_y = -9},/obj/machinery/status_display{layer = 4;pixel_x = 32;pixel_y = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbm" = (/obj/structure/track{icon_state = "track3"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cbn" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbo" = (/obj/effect/decal/cleanable/generic,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbp" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"cbq" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "supply_shuttle_hatch";locked = 1;name = "Shuttle Hatch";req_access = list(13)},/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbr" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbs" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbt" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Expedition Preparation";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbv" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/structure/table/standard,/obj/item/device/suit_cooling_unit/improved,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2;pixel_y = -1},/obj/item/weapon/storage/belt/utility,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbw" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbx" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Mining - Camera 1";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cby" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbz" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "mining_east_pump"},/obj/structure/sign/vacuum{pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "mining_east_pump"},/obj/structure/closet/walllocker/emerglocker/north,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbB" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "supply_shuttle";pixel_x = 25;pixel_y = 0;req_one_access = list(13,31);tag_door = "supply_shuttle_hatch"},/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbC" = (/obj/structure/closet/secure_closet/miner,/obj/item/weapon/key/minecarts,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbD" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbE" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbF" = (/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA";req_access = list(54)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbH" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbI" = (/obj/structure/closet/crate/secure/loot,/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbK" = (/obj/structure/girder/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cbL" = (/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA";req_access = list(54)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1;icon_state = "map"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbP" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbR" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "mining_east_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbS" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "mining_east_inner";locked = 1;name = "Mining External Access"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbT" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "mining_east_outer";locked = 1;name = "Mining External Access";req_access = list(10,13)},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"cbU" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"cbV" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cbW" = (/obj/structure/track,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cbX" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 4},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "mining_east_airlock";name = "exterior access button";pixel_x = -27;pixel_y = -26;req_one_access = newlist()},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"cbY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cbZ" = (/turf/simulated/floor/asteroid,/area/skipjack_station/cavern)
+"cca" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"ccb" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/landmark/start{name = "Shaft Miner"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"ccc" = (/obj/structure/filingcabinet,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"ccd" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cce" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_east_pump";tag_exterior_door = "mining_east_outer";frequency = 1379;id_tag = "mining_east_airlock";tag_interior_door = "mining_east_inner";pixel_x = 0;pixel_y = -25;tag_chamber_sensor = "mining_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "mining_east_pump"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"ccf" = (/obj/structure/ore_box,/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "mining_east_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "mining_east_pump"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"ccg" = (/obj/machinery/camera/network/civilian_west{c_tag = "Exterior - Mining Airlock";dir = 4},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"cch" = (/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"cci" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ccj" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 8},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cck" = (/obj/machinery/conveyor{icon_state = "conveyor-broken";dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"ccl" = (/obj/machinery/conveyor{dir = 4;id = "mining_internal"},/obj/structure/closet/crate/radiation,/turf/simulated/floor/tiled,/area/maintenance/cargo)
+"ccm" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"ccn" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
+"cco" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/maintenance{name = "Maintenance Access";req_access = list(12)},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
+"ccp" = (/obj/machinery/light/small{icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/obj/random/loot,/turf/simulated/floor/airless,/area/mine/unexplored)
+"ccq" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/turf/simulated/floor/airless,/area/mine/unexplored)
+"ccr" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ccs" = (/obj/random/junk,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"cct" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ccu" = (/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/structure/table/steel_reinforced,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"ccv" = (/obj/machinery/cell_charger,/obj/structure/table/steel_reinforced,/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"ccw" = (/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100;maxcharge = 15000},/obj/structure/table/steel_reinforced,/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"ccx" = (/obj/machinery/mech_recharger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/tiled/airless{icon_state = "asteroidfloor"},/area/mine/unexplored)
+"ccy" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ccz" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ccA" = (/obj/structure/track{icon_state = "track1"},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ccB" = (/turf/simulated/shuttle/wall{icon_state = "swall15";dir = 2},/area/mine/unexplored)
+"ccC" = (/turf/simulated/floor/asteroid,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 8},/area/mine/unexplored)
+"ccD" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters.";id = "iaa_desk";name = "Desk Privacy Shutter";pixel_x = 0;pixel_y = -26;req_access = list(38)},/turf/simulated/floor/wood,/area/lawoffice)
+"ccE" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "KEEP CLEAR: MEDICAL EXOSUIT PARKING";pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"ccF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE";name = "KEEP CLEAR: MEDICAL EXOSUIT PARKING";pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"ccG" = (/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/wood,/area/library)
+"ccH" = (/obj/random/cookingoil,/turf/simulated/floor/plating,/area/maintenance/library)
+"ccI" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
+"ccJ" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"ccK" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/large_stock_marker,/turf/simulated/floor/tiled,/area/shuttle/lifts/placeholder)
+"ccL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/engineering/locker_room)
+"ccM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"ccN" = (/obj/machinery/door/firedoor{dir = 1;name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room";req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ccO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ccP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ccQ" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ccR" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact";dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"ccS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/engineering/locker_room)
+"ccT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ccU" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/locker_room)
+"ccV" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ccW" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ccX" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ccY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ccZ" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig)
+"cda" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"cdb" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/range)
+"cdc" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cde" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/main)
+"cdf" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/main)
+"cdi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdk" = (/obj/machinery/door/airlock/glass_security{name = "Firing Range";req_access = list(1)},/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/main)
+"cdl" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence{pixel_x = 7},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdm" = (/obj/item/weapon/stool/padded{desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?";name = "Tattered Stool"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdo" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdr" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cds" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdt" = (/obj/machinery/optable,/obj/machinery/button/windowtint{id = "FT Op";pixel_x = 28;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"cdu" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdv" = (/obj/machinery/door/airlock/security{name = "Forensic Technician";req_access = list(4)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cdw" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/swabs{pixel_x = 5;pixel_y = 5},/obj/item/weapon/storage/box/slides{pixel_x = 2;pixel_y = 2},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"cdx" = (/obj/machinery/door/window/westleft{dir = 2;name = "Forensics Operating Theatre";req_access = list(4)},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"cdy" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdz" = (/turf/simulated/floor/lino,/area/security/forensics_office)
+"cdA" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/forensics_office)
+"cdB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdC" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdD" = (/turf/simulated/floor/lino,/area/security/forensics_office)
+"cdE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/lino,/area/security/forensics_office)
+"cdF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/security/forensics_office)
+"cdG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdI" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdJ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/main)
+"cdL" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cdM" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cdN" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cdO" = (/obj/structure/coatrack,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdQ" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdR" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdS" = (/obj/structure/flora/pottedplant/random,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/brig)
+"cdT" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/security/brig)
+"cdU" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
+"cdV" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cdW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdX" = (/obj/machinery/photocopier,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cdY" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"cdZ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"cea" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/brig)
+"ceb" = (/obj/machinery/door/airlock/security{name = "Forensic Technician";req_access = list(4)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cec" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ced" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cee" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cef" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/computer/med_data,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ceg" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ceh" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/security/brig)
+"cei" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
+"cej" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cek" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cel" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/structure/table/standard,/obj/item/device/camera_film,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cem" = (/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen/blue{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red,/obj/structure/table/standard,/obj/item/device/camera,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"cen" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/computer/secure_data,/turf/simulated/floor/tiled,/area/security/forensics_office)
+"ceo" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/security/brig)
+"cep" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig)
+"ceq" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 8;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cer" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"ces" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"cet" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 4;id = "FT Op"},/obj/structure/window/reinforced/polarized{dir = 1;id = "FT Op"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/security/forensics_office)
+"ceu" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/brig)
+"cev" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cew" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cex" = (/obj/structure/window/reinforced,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cey" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"cez" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ceA" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ceB" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ceC" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"ceD" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"ceE" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"ceF" = (/obj/structure/sign/securearea{pixel_y = 32},/obj/machinery/camera/network/civilian_west{c_tag = "Starboard Corridor - Camera 4"},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"ceG" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ceH" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ceI" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ceJ" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ceK" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "RobotSurg"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"ceL" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"ceM" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"ceN" = (/obj/machinery/door/airlock{name = "Public Bathrooms";req_access = list(5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/medical/medbay3)
+"ceO" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"ceP" = (/obj/machinery/conveyor{dir = 8;id = "Robocompo"},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"ceQ" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/bridge)
+"ceR" = (/obj/structure/flora/pottedplant/random,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge)
+"ceS" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"ceT" = (/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"ceU" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/turbolift/command_sub)
+"ceV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/turbolift/command_sub)
+"ceW" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/turbolift/command_sub)
+"ceX" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/turbolift/command_sub)
+"ceY" = (/obj/structure/flora/pottedplant/random,/turf/space,/area/turbolift/command_sub)
+"ceZ" = (/obj/turbolift_map_holder/aurora/command,/turf/simulated/floor/tiled,/area/turbolift/command_sub)
+"cfa" = (/obj/machinery/light,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/research)
+"cfb" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfc" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfd" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfe" = (/turf/simulated/open,/area/turbolift/research_station)
+"cff" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfg" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfh" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfi" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfj" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfk" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfl" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfm" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfn" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfo" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfp" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfq" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfr" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfs" = (/turf/simulated/open,/area/turbolift/research_station)
+"cft" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfu" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfv" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfw" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfx" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfy" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfz" = (/turf/simulated/open,/area/turbolift/research_station)
+"cfA" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station)
+"cfB" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station)
+"cfC" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station)
+"cfD" = (/obj/effect/large_stock_marker,/turf/simulated/floor/tiled/dark,/area/turbolift/cargo_station)
+"cfE" = (/obj/machinery/crusher_base,/obj/machinery/light/small/emergency{dir = 1},/turf/simulated/floor/reinforced,/area/maintenance/disposal)
+"cfF" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/closet/crate/trashcart,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/maintenance/disposal)
+"cfG" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/security/brig)
+"cfH" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/security/forensics_office)
+"cfI" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/security/forensics_office)
+"cfJ" = (/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records.";name = "Security Records"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/lino,/area/security/forensics_office)
+"cfK" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/security/brig)
+"cfL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/security/brig)
+"cfM" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/brig)
+"cfN" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"cfO" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "armoury";name = "Emergency Access"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"cfP" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "armoury";name = "Emergency Access"},/turf/simulated/floor/tiled/dark,/area/security/armoury)
+"cfQ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/security/brig)
+"cfR" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"cfS" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/foyer)
+"cfT" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/foyer)
+"cfU" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/starboard)
+"cfV" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cfW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cfX" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cfY" = (/obj/machinery/vending/medical,/turf/simulated/wall,/area/medical/icu)
+"cfZ" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cga" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cgb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay)
+"cgc" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cgd" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cge" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cgf" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cgg" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
+"cgh" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+"cgi" = (/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/aft)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAcaAcaAcaAcaAcaAcaAcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaabaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaabaabaabaaaaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaaaaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaAcaAcaAcaAcaAcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaAcaAcaAcaAcaAcaabaabaabaabaabaabaabaAcaAcaAcaAcaAcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaacaadaaeaafaaeaagaacaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaacaahaaiaaiaaiaajaacaaaaaaaaaaabaabaabaabaabaanaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaacaakaaiaaiaaiaalaacaaaaaaaaaaaaaabaabaabaamaaqaamaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaacaakaaiaaiaaiaaoaacaaaaaaaaaaaaaabaabaabaapaavaapaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaaaaaaaaaaaaaaaaacaagaaraaraasaataacaaaaaaaaaaabaabaabaabaauaaCaawaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaayaazaaAaaBaacaacaacaacaacaacaacaacaacaaDaacaacaacaacaacaaaaabaabaaaaacaacaaFaacaabaabaabaabaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaaHaaGaaGaaGaaGaaIaaGaaGaaJaaGaaGaaGaaGaaGaaKaaGaaNaaLaacaaaaaaaaaaaaaacaaMaaSaacaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaabaabaabaabaabaabaabaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaaOaabaabaaPaaaaaaaaaaaaaaaaaaaaaaaQaaRaaQaaQaaQaaQaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacabaaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaUaaUaaUaagabaaacaacaacaacaacaacaacaacaagaacaacaacaacaacaacaacaacaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaaOaaVaaVaaVaaOaaWaaWaaWaaOaaXaaXaaXaaOaabaabaabaaaaaaaaaaaaaaaaaaaaaaaQaaRaaYaaZabbaaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacabaaaTabfabcabcabcabdabeabgabeabiabhablabjaaUabkabmaaGaaGaaGaaGabnaboaaGaaGaaGaaGabnaaGaaGaaGabuabpaacaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaababqaabaabaabaabaaOaaVabraaVaaOaaWabsaaWaaOaaXabtaaXaaOaabaabaabaabaabaaaaaaaaaaaaaaaaaQabyabvabwabxaaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaababzabaabAabFabBabCabDabEabDabEabGabJabHabIabKabPaadabLaagabMaagaagabNaacaacaagaacabOabOabOabOabOabRabQaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaaOabSabUabTaaOabVabYabWaaOabZacdacaaaOaabaabaababqaabaaaaaaaaaaaaaaaaaQabXaaYaaRaaRaaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabacjabaackabFacmacbacbacbacbacbabFabJaccacoabKaaUaagaceacfacgaaBachaagaagaciaagaagabOacuacvaclabOabRabMaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaOaczacnacAaaOacpacnacqaaOacpacracqaaOaabaabaabaabaabaabaaaaaaaaaaaaaaQaaQacsactaaQaaQaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabacjabaackacEacDacwacxacyacxacwacFacGacBacoabKaaUaagaceaciaacaacabNaacacCaagaagaagabOacHacOacIacRacQadbaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabacJaabacJaabacKaabacLaabacKaabacLaabaabaabaabaabaabaabaabaaaaabaabaabaabactaaRaabaabaaaaaaaaaaaaaabaabaabaababqaabaabaabacjabaackabFacmacbacbacbacbacbabFabJacMacoabKaaUacNadiaacaaBaaBaayacCacPaagaagaagabOadjabOabOabOaacadkacSacTacUaacaagaagaagaagaagaagaagabMaagaagaagaagaagaagaacaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabacVacVacWacXacYacXacYacZadaadlacVadcacYaddadeacVacVaabaabaabaabaabaabaabaabaabaabadfadgadhaabaaaaaaaaaaabaabaabaabaabaabaabaabaabadmabaadnadpadoadradqadqadsaduadtadxadvadAabKaaUaceacfaagacCaagaagaagaagaagaagacCaacadDadHadwaagaacabaadKaagadyaacaagaacaacaacaacaacaacaacaacaacaacaacaacaagaacaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabacVadzadMadBadCadBadNadEadFadGadzadEadPadIadJadzacVaabaabaabaabaabaabaabaabaabaabadfadfadhaabaabaabaabaabaabaaaaaaaaaaaaaabaabaabaacabaaaTadTadLadLadWadLadLadLadLaegadOaehabKaaUaceaaBaacaaAaagaagaagacgaayadRaaBaacadSaejadUadVaacaelacSaadadXaacaagaacadYadZaeaaebaecaecaecaecaedaeeaacaagaacaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaOaaOaaOaaOaaOaabacVaefaenaemaeiadBaeoadEaekaemaeqaepaexaevaeAaezaeraesaaOaaOaaOaaOaaOaabaabaabaetadfaeuaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabaaaTaaTaaTaeCaaTaewaeNaeyaaTaaTaaTaeRabKaaUaeSaaUaaUaaUaaUaaUaaUaaUaaUaaUaaUaacadSaeUaeDaagaacabaaacaacaacaacaagaacaeEadYadYaeFaeGaeHaeIaeJaeJaeKaacaagaacaacaacaacaabaaaaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaQaeLaeLaaQaaaaaaaaaaaaaaaaabaabaabaabaaOaeMaeMaeVaeOaePaeQaeWaeXaeTadBadBadzaeYaeZaeZafbafaafcaeZaeZaeZafhafgafjafiafdafdaaOaabaabaabafeaaRaeuaffaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaacafkaaGaaGaaGadbaaTaaTaaTaaTaaTafmaflafoafnafqafpafsafrafuaftafxafvabIabIcfGaaUafwacCafKccVafyafMccWafNabMaagaagaagaacadYadYafBafCaeJafDafEaeJaeIaeJafFaagaagaagaagaacaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabafGafQafGafQaeLaaaaaaaaaaaaaaaaabaabaabaabaaOaeMafIafRacraabafJafYafLadzadBaemafZafZafZagaaevadEafOadzafPagbagcacKafSagdafTafdaaOaabaabaabaaQadhafUafeaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaacaacaacaacaacadkaaUafVafWafXagfagiaghagkagjaglageagmaggagncfLagpagoagsagsaguagtagEagDagFagragGaacagNagLaacaacaacaagaacagvagwagvagxagyagzagAagBagzagvaacaacaacagvaagaacaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabagCagCagCagCaeLaaaaaaaaaaaaaabaabaabaabaabaaOaeMaeMagQafjagRagXagUagHagIagJagKaeiagYagMagMagMagZagOagPahbahaagSagTaeOahdafdafdaaOaabaabaabaaQadhagVafeaabaabaabaaaaaaaabaabaabaabaaaaaaaaaaaaaacacUagWadXaacadkaaUahfaheahgaaUahiahhalyalzalzalzalzalzalzalzalzaeBahcahcahjahcahcahkahlahmahDaacccXahFaacaaaaacaagaacahGahqadZahraeFahsafCaeJaeJafEafEafEahtagvaagaacaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabagCagCagCagCaeLaaaaaaaaaaaaaabaabaabaabaabaaOaaOaaOaaOaaOaabacVadEahuadzadBadzahvahwahxagMahyaeYahOahNaeZaeZafhahQaaOaaOaaOaaOaaOaabaabaabaiNahCahCaiNaabaabaabaabaabaabaabaabaabaabaabaaaaaaaacaagaagacTaacabaaaUahRahEahSaaUahYahhamxamVamUamXamWamCamDamDanVaeBahPaieaifahHahcaacaacaacaacaacccXaigaacaacaacaagaacafCahTahTahUahVaeFafCafCahTahTafEahWafEagvaagaacaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaQaabaabagCagCagCagCaeLaabaabaaaaaaaabaabaabaabaabaaOahXahXailaeOaePaeQaimainaibaicagPaidaipahxagMahyadzaisahNaeZaeZafhagRafjaitaihaihaaOaabaabaabaiNaiiaiiaiNaabaabaabaabaabaabaabaabaabaabaabaabaaaaacaacadKaacaacabaaaUaijaikaixaiwccZcdaapaapcaozapdamDaoBamDaoBcdbaeBahJahJaifahHahcaaaaaaaacaagcdccddaiRabMaagaagaagaacaiyaizaiSaiBaiCaeJaeHaeKaiDaiEaeIafEaeHagvaagaacaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaeLaabaabagCagCagCagCaeLaabaabaabaabaabaabaabaabaabaaOahXahXaiUacraabafJaiVaiYaiHaiIaiJahvaekadzajaadzadzafOaiHafPajbagcaabafSajeaiMaihaaOaabaabaiNaiNaiOaiPaiNaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaacaagabkaiQajfaaUajhaiTajiaaUahiahhcdeapYamDalzapyapzapyapzapyaeBcdfaiGaifahHahcaaaaaaaacaiLcdgaacaacaacaacajyaacaacafCahTahTahTajcaeJafEafCahTahTajdafDafEagvaagaacaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaeLaabaabajAajAajAajAaeLaaaaaaaaaaaaaabaabaabaabaabaaOahXahXajBaeOaePajgajDajEajjajkajlajmajnajnajnajnajnajoajmajHajGagSaePaeOajKaihaihaaOaabaabaiNajsajtajLaiNaiNaiNajvajwajxaiNaiNaiNaiNaiNajvajwajxaiNaacaaHabnaaGajMaaUabIajzabIaaUajXajWcdhamDamDapzaqpamDaqpamDaqpaeBahLahKcdiajJahcaaaaaaaacajucdgagvaeJajNajOaeJaecagvaeJajPafCaeJafEafEaeJaeJaeJajQafCajPahqagvaagaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaQajRajRajSajSajSajSajTajTajTajTajTajTajTaabaabaabaaOaaOaaOaaOaaOaabacVadEajUajVakwakjakjakjakjakjajYajZakaajZakGakFakdaabaaOaaOaaOaaOaaOaabaabaiNakLakIakIakMakMakMakNakMakIakIakMakMakSakMakNakIakMakNakTaiRaaAaayaacaaUakkaaUaaUaaUahiahhcdkamDamDarQamDamDamDamDamDaeBcdlcdmcdnahHahcaeBaeBaeBaeBcdgagvaeJaklaeJaeJaeJagvakmaknakoakmakpakqakrakqaksaktakuagvagvagvakUagvagvaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaajRakvalcakxakyakzajTakAakBakCakDakEajTaabaabaabaabaabaabaabaabaabacVaeYalfahNaeZaeZaeZaeZaeZaeZafbaeZalkadzakHadzacVaabaabaabaabaabaabaabaabaiNalnaiNaiNaiNaiNaiNajvajwajxaiNaiNaiNaiNaiNajvajwajxaiNaacaadaagaagaagabMakkakJakKaaUalraMRamxamDaoCapzasvasJasxamDasvaeBakRahJcdpahHahcaivcfHakgaeBcdgagvaklalAakVafEaklakWadYadYafEaeJakXakYaeJaeHaeHafEafEakZalaalaadYalbagvaaaaaaaabaabaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRakvalBalBaldalealKakAalgalhakAaliajTacVacVacVacVacVacVacVacVacVacValLallalmalMajnalMaloajnajnalNalqalOadzalsagIacVaabaabaabaabaabaabaabaaaaiNalTaiNaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaacaacalualuaagaadakkalUalwalVagicfMamoalzalzalzalzalzalzalzalzahcakRcdrcdpcfIahcaiuaiZcdtaeBcdgagvalCalDafEalEaklalFafEadYadYafCafEafEafEafEaeaalGafEakUadZafCafCaeFagvaaaaabaabaabaabaabaabaabaababqaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaajRakvalHalHalIalJajTalYamaalZamcambajTalPalRalQalQalSalQalQameamdampamgamzamyamBamAamyamEamPamMamQamfamRamhamiamjamkaabaabaabaabaabaabaabaaaaiNalTaiNamlamlamlamlamlamlamlamlamlamlamlamlamlamlaabaabaabaabaaaaluaagaagakkammamnaaUahiahhamoamSamqamramsamtamuamvamwahcahcahccdvahcahccdwcdxamYaeBcdgagvamFalCamGafEamHakWafEafEaeJafEamIamJamJamKamKafEaeJakZafCamLadYafCagvaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaajRamZalcamNamOanaancanbandamTanhanganoanmansanqantanqanqanqanwanuanAaneanfanBanDanfanianjankanlanEannanFanpanManramkaaaaabaabaaaaaaaaaaaaaaaaiNanNaiNamlamlamlamlamlamlamlamlamlamlamlamlamlamlaaaaabaabaabaabaluabMaagakkaaUaaUaaUahianOanPanvanQanxanyanzanzanzanzaeBcfJcdzanCcdAaiqcdBaiqajIaeBcdgagvamFanGakXafEanHanIadYanJaeJagvagvagvagvagvagvagvagvagvaeaanKadYanLagvaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaajRakvaogaoaaokaojajTakAalgalhaolaliajTaljanRaljaljaljaljaljaljaljacVaomaekaonaopaekaoqanWanXanYaovaouaobaocaodaoeaofaiNaiNaiNaiNaiNaiNaiNaiNaiNaowaiNamlamlaohaoiaoyaoxamlaoAaoHaoDaoHaooamlamlaaaaaaaabaaaaaaaluaagaagaagaagabMabPaoLaoIamoaoraosaotaoNaoMaoZaoZaoZaeBanTcdzcdEcdFcdGcdHcdIapeaeBcdgagvaeJaeJaoEaoFaoEaoGafEapgapfagvaaaaaaaaaaaaaaaaaaaaaagvaeaadYaoJajPagvaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKaoKaoKaoKajRajRapiaphaphajRalKakAakBakCaplakEajTaoOaoPaoQaoRaoSaoTaoUaoVaoWacVacVacVacVacVacVacVamkaoXaoYapoapmapbaprapuaptapxapwapDapBapjapjapjapkapjapkapLapIamlamlapnapnapnapnamlapNapnapnapnappamlamlaaaaaaaaaaaaaaaapqaagaadakkaaUaaUaaUahiahhamoapUapsanzcdKapVapvapvapXaeBcdLcdMcdNaeBcdOcdPaiqcdQaeBcdgagvaklaeJalCapAamFapZapCaqaafCagvaaaaacaacaacaacaacaaaagvapEaeJafEalaagvaabaabaabaabaabaabaabaabaabapFaabaabaabaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKapGapGapHapHapHaqeapJapKaqgapMapMapMapMaqkapMapMaoOaoPaoQaoRapOapPapPapQapQaljapRapRapRapRapRapRamkapSapTaqraqlaqvaquaqxaqwamkamkamkamkamkamkaiNaqyaiNaiNanNaqbamlamlaqcaqdapnapnamlaqzaqfapnapnaqBamlamlaaaaaaaaaaaaaaaaluabMaagakkakJakKaaUahiahhamoaqhaqiaqjaqDaqCaqmaqnaqoamocdScdTcdUcdVaiqcdPaiqcdXaeBcdgagvaklafEaeJaeJaeJaqqaeJaqEafCagvaaaaacacUagWadXaacaaaagvaeJaeFaqsaeJagvaabaabaabaabaqtaqtaqGaqFaqHaqtaqJaqIaqKaqtaqtaaaaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaqAaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKapGapGapHapHapHaqUaqTaqXaqVapMaqYaraaqZarearbarfaoOaoPaoQaoRaqLaqMaqNaqOaqOaljapRapRapRapRapRapRamkaqPaqQaqRaqSarhargariaqWarkarjaroarnarpamkarcarcardaiNarrarqamlamlartarsapnaruarBaryarlapnapnarmamlamlaaaaaaaaaaaaaaaaluaagabMakkarEalwarFarHarGamoarIarNarJarOapVarvarwarxamocdZabIceacebceccedceecefaeBcdgagvaeJafEarzamGarAaacaacarRaacaacaaaaacaagaagacTaacaaaagvarCarDafEafEagvaabaabaabaqtaqtarSarUarTarTarXarTarTasaarYaqtaqtaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaqAaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKapHapHapHapHapHarKarLarMascapMasdarParPasiaseapMasjaoPaoQasmaslapPapPaoVaoWaljapRapRapRapRapRapRamkarVarWasnaqSasqarZassasbaswasuaqWaqWasyamkasfasgashaiNarcaszamlamlasAaskaskasBasDasCasoaskaspapnamlamlaaaaaaaaaaaaaaaaluaagaadakkammamnaaUalrasEamoasrasFapvapWapVarvastasIamocfKabIceicdVcekcelcemcenaeBcdgaacaacaacaacaacaacaacaatasNaadaacaacaacaacasOaacaacaacaacaacaacaacaacagvaabaabaabasPasRasQasSasGasGasHasGasGasSasTasVasUaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaabaabaqAaqAaabaabaabaabaabaabaabaabaabaabaabaabaabaoKasWapHapHapHapHasMapHasZasYateataatgatfatiathatlatkasXaoQatpatoapPatratbatbaljapRapRapRapRapRapRamkatcatdatuatsatzatvatAasbatjatBatBatBatCamkaiNaiNaiNaiNatmaszamlamlatnatnapnatDamlatEatqatFatHapnamlamlaaaaaaaaaaaaaaaaluaagattakkaaUaaUaaUatJatIamoatwatxatyatPatKatwatxatyamoaFTceocepaeBcdLcdMcdMcdNaeBatQatRatRatRatRatVatVatVatWatXaagaagaagaataadabMatGaadaadaadaadatYaagaacaabaabaabaabatZaubauaasSatLatMatNatOasGasSaucaueaudaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSaaaatSaabaabaabaabaqAaqAaqAaqAaqAaabaabaabaabaabaabaabaabaabaabaabaabaoKatTatTatTatTatUasMapHauhaugaljaljaljaljauialjaukaujaoPaoQaoQaulaumaoQaoQaoQaljapRapRapRapRapRapRamkauoaunamkauqaufauramkamkamkamkamkamkamkamkausakSakSakSauuautamlamlatnatnapnauvamlauwauxauxauzauyamlakkakkakkakkakkakkakkaaUaaUaaUaupauBauAauIauGauJaflafqauKauMauLauOauNauPauNauOauNceuaflaflaflauRauCauDauDauDauDauDauDauDauDaagalXauEacgaacaacaacauFauSauSauSauHaacaacaacaagaacaabaabaabaabauTauWauUauYauXavbavaavcauQaveavdavhavfaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRajRajRajRauVaabaabaqAatSaqAatSaqAatSaabaabaabaabaabaabaabaabaabaabaabaabaoKavjavlavkauZavpasMapHavuavtavwavvavxavgavFaviavNavGaoPaoOavgavRavmaoOavnavoaljaljaljaljaljaljaljavqavravsavUavTavYavWawaavyccLavAavBavAavAavDanNaiNaiNaiNavEawbamlamlatnatnawcatDamlavHapnavIavJavKamlavLavMavMawgavOavPavQawlawiaaUawmawnavVavVawoavMavMavXaoLavMawpavZawpawqawpavZawpavMavMavMavMawuawsauDawdawdawdaweawfawvauDawhawwawhawhaaQaabaabaabaabaabaabaabaabaabaacaagaacaabaabaabawjaqtawkawxasSauXawAawzawCauQasSawEawkaqtawFaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSajRawrawrawrawGawtaabaabawtawtawtawtawtaabaabaabaabaabaabaabaabaabaabaabawtaoKawHawHawIawKawJarMawyavuawLawMawBawNawDavFaviawPawOawSawRawRawTawRawRawRawUaxbawXaxgaxgaxgaxhaxiavqaxmawQaxpaxoaxraxqawVccMccNccOawWccPccQavDanNaiNaaaaiNarcawbamlamlamlamlamlaxuamlawYapnapnawZaxaamlaxvaxcaxdacoaxeabIabIaxfaxwaaUaxxaxzaaUaxjaxkaxlaxAaxnaxCaxnaxEaxFaxEaxnaxEaxHaxEaxnaxsaxsaxtaxJabKauDaxKaxMaxLawfaxyaxQaxOaxBaxRaxDawhaabaabaabcevatScevatScevaabaabaacaagaacaabaabaabaabasPaxUaxSasSaxGaxVaxIaxXaxWasSaxYaxZasPaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRaxNawrawrawGawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtawtayaaxPaycaybaydaxTayfayeayhaygayjayiaylaykaynaymayrayoaytaymaymayuaymayyaymayAayEayDaymaymaymayFayGavqayHaypayqayKaysccRayOayvccLccTccUaywavAavDanNaiNaaaaiNayxayPayzayQayBayCaySayRamlayTapnapnapnayUamlayVayIayJayZayWayMayNazaabIazdavZazfaxkaxkazjaznazlazpazoaxnazqayXayYaxnazsayXayYaxnaztazbazcaxJabKauDazuazeazvazgazhaACazwazkazxaxDawhaabaabceyazmazmazmazmazmcezaabaacaagaacaabaabaabaabazyazAazzasSazDasGazrasGazEasSazFazIatZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSajRawrawrawrawGawtaabaabaabawtawtawtawtawtaabaabaabaabaabaabaabaabaabaabawtaoKawHawHazJazMazLazNascazPazOawMawBazQazBaoOazCazSazRazYazGazGazGazGazHazGazZaAaazKaAdaAbaAkaAjaAlavqaAmawQaAqaAoazTaEIayLayvazVazWazWazWazWazWanNaiNaaaaiNazXaAraAuaAtayBaAyaAAaAzamlaADapnapnapnaxaamlaAEaAeaAfacoavOaAgaAhaAiabIavOaAIaAKaAJaALaxkaAnaAMaApaANaxnaAOaAsaAPaxnaAOaAsaAQaxnaAvaAwaAxaxJabKauDaARaAUaASaABawfaAWazwaxDaAXaxDawhaabaabatSazmazmazmazmazmatSaabaacabMaacaabaabaabaabauTaBaaAZaBdaBbaBfaBeaBhaBgaBnaBkaBoavfaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajRajRajRajRaATaabaabaabaqAatSaqAatSaqAatSaqAaabaabaabaabaabaabaabaabaabaabaoKavjavlavkaoKaBqaAVapHavuaBsaBtaAYaBvaBuaBxaBcawPavGaByaoQaBFaBDaBHaBGaBGaBIaoQaBHaBIaoQaBLaBKaBMavqavqaBiaBjaBNaBlaEIazUavzazVaBmaBPaBOaBpaBQanNaiNaaaaiNaiNaiNaBrawbayBaBRaBUaBTamlaBVapnapnapnaxaamlaBwaCeaBZaBzaBAaBBajzabIaBCaBAaAIaCfaBEaChaCgaCjaCiaBJaCkaxnaClaCoaClaxnaClaCpaClaxnaxnaxnaxnaCsaCrauDaCtaxMaCuaBSawfaCwaCvcfNaCxaBWawhaabaabceyazmazmazmazmazmcezaabaCaaCbaCaaCaaCaaCaaCaaCaaCaaCcaCdaqtaqtaCBaqtaqtaCcaCdaqtaqtaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSaaaatSaaaaaaaaaaabaabaqAaqAaqAaqAaqAaqAaabaabaabaabaabaabaabaabaabaabaoKaCCaCDaCDaCFaCEasMapHavuaCGaljaljaljaljaljaljaukaCHaCJaCIaCmaCnaCKaCKaINaINaCLaCqaCMaoQaCOaCNaCUaCTaCXaCVaCyaCNaCzaCYaDaaCZaDdaDbaDfaDeaDiaDgaDjaiNaaaaaaaaaaiNaiNawbayBaDkaDraDpamlamlaDtcfOcfOamlamlaDuaCPaCQaCQaCRaCQaCQaCQaCQaCSaAIazfaBEaDEaDAaDFaCWaDHaDGaDKaDIaAsaDLaDcaDMaDRaDOaDSaDhaDWaDUaDZabKauDaDlaDmaDnaDoaEaaDqaEbaDsaEcaEeawhaabaabatSazmazmazmazmazmatSaabaCaaDvaDwaDxaDyaDzaEgaDBaCaaDCaDDaEhaEkaEjaEoaEmaDJaDDaqtaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaqAaqAaqAaqAaqAaabaabaabaabaabaabaabaabaabaoKaEpapHazNaEsaEraDNaqTaEtaDPaDQaEuaEvaDTaEwaDVaExavGaEBaEzaDXaCnaCnaCnaCnaDYaCnaCnaEDaoQaEFaEEaEGaEdaEdaEdaEdaEHaEfaEIazUaEJaEiaEKaEiaEiaEiaEiaELaEiaElaEiaEiaEiaEiawbaaUaEMaEnaENaEOaEOaEnaEqaEnaEOaETaESaEUaEUaEUaEVaEUaEUaEZaEUaEUaFaaFbaEyaFdaEAaFeaECaFgaFfaFjaFiaFkaDOaFkaDOaFlaAsaFmaAsaFoaFnaFqaFpauDaFraEPaEQaERaFsaFtauDaFuaxRaxDawhaabaabceyazmazmazmazmazmcezaabaCaaFwaEWaEWaEXaEYaFyaFxaCaaFzaFcaFAaFBaEjaFBaFCaFcaFDaqtaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaqAaqAaqAaabaabaabaabaabaabaabaabaabaabaoKaFhaFEascaFFaFEascaFGavuapHaFIaFHaFKaFJaFMaFLaFPaFOaFQaEzaFSaCnaCnaCnaCnaFvaCnaCnaFWaFVaFYaFXaGaaFZaFZaGbaGdaGcaGfaGeazUaGgaEiaGhaGjaGiaGlaGkaFNaGmaGoaGnaFRaGpaEiawbabPaFTaFUaGuaGxaGvaGvaGyaGvaGvaGAaGzaGCaGBaGEaGDaGEaGMaGPaGEaGEaGQaGRaBEaGUaGSaGWaGVaGYaGXaAsaGZaGqaGraGsaGtaHaaFkaDSaHbaGwaDUaHkaHcaHmaHlaHlaHnaHraHoccDaHsaxDaxRaxDawhaabaabatSatSaGFaGFaGFatSatSaabaCaaGHaGIaGJaGKaEYaGLaHtaCaaGNaGOaHuaHvaEjaHCaHzaDDaGTaqtaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaqAaqAaabaabaabaabaabaabaabaabaabaabaoKaHEaHFasYasYaHGasYaHHaHJaHIaDQaHKaHMaDTaHNaHdaExavGaHeaHOaHfaCnaCnaHgaHhaHiaHjaHjaHRaHPaHTaHSaHUaHpaHpaHqaHpaHVaEfazUaHYaHXaEiaHZaIcaHwaHxaGoaHyaIdaHAaHBaFRaIfaEiawbaHDaIhaIlaIjaInaImaIpaIoaHLaHLaHLaIqaIsaIraHLakkaIuaHQaIwaIvaIyaIxaaUaBEaIDaHWaIGaIEaIHaIaaIaaIbaIKaIIaIeaGqaILaIgaxnaxnaxnaxnaIMabKauDauDauDauDauDauDauDauDaIiaIOaIiawhaGFaGFaGFceCaIkaIkaIkceCaGFaGFaCaaCaaCaaCaaCaaCaaCaaIPaCaaIQaISawkaIVaIUaIWawkaJbaIYaItaItaJdaJcaJeaItaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaoKaqeaJhaJgaIzaJhaIAaIBaICaDPaDQaDQaDQaDQaDQaDQaJjaJiaIFaoQaJlaCnaJmaIJaJraJoaJoaJsaJtaoQaJvaJuaJwaHpaHpaIRaHpaJxaEfazUaITaJEaEiaEiaEiaEiaJFaGoaHyaIdaJGaIXaFRaJHaEiawbaHDaIZaJaaJaaJJaJIaJTaJSaHLaJfaJVaJUaJXaJWaJkaJYaJZaJnaKaaJpaJqaJqaKcaKbaKgaKdaKiaKhaKjaJyaJyaJzaJAaJBaJCaJDaKlaKkaDSaKnaKoaDUaDZabIaKqaKpaJKaxDaxDaJLaxDaJMaxDaxRaxDaxDaJNceEaIiaJPaJPaJPaJPaJPceFaJRaJLaKraKuaKsaKuaKvaKAaKyaKCaKBaKBaKDaKFaKEaKGaKeaKfaKJaKLaKKaKPaKMaKQaItaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaabaabaabaabaoKaKmapHaKRaLcaLbaLdapHapHaLeaoKaLfaKtaLhaLiaKwaKxaLlaKzaoQaoQaoQaoQaoQaoQaoQaoQaoQaoQaoQaLnaLmaLpaLoaLqaLqaLsaLraKHaKIaLuaLtaEiaLyaLzaHwaKNaGoaKOaLAaLBaEiaEiaEiaEiaLCaHDaKSaKTaKUaKVaKWaKXaKYaHLaKZaLaaJUaLDaJWaLaaLEaLHaLFaLIaLgabIaLJaaUaBEaBEaBEaBEaBEaBEaxnaxnaLKaLjaLkaAsaAsaILaAsaLLaAsaFoaLMaFqabKaLOaLNaLQaLPaLPaLPaLWaLSaMdaMcaLvaLvaLwaLvaLxaLvaMgaMeaMkaMjaMmaMlaMpaMnaLGaMqaqtaMraMxaMtaMBaMzaMCaMBaMEaMDaMFaKeaLRaMJaLTaLUaLUaLVaMKaItaLXaLXaLXaLXaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaoKaLYaLZaLZaMaaMbaMMaMLapHapHaoKaMNaMfaMNaMOaKwaKxaLlaMhaKwaaaaaaaMiaMPaMSaMQaMXaMUaMoaMYazUaEIaNdaMsaMsaMsaMsaNeaEfaMuazUaMvaEiaMwaFRaNfaIdaGoaMyaIdaNgaMAaNiaNhaEiaLCaHDaNjaNlaNkaMGaMHaMIaNmaHLaNpaNraNqaNuaNtaLaaNvaNwabIaMRaLgabIaNxaaUaMTaNyaMVaMWaNzaxnaNAaNBaNaaNbaNcaAsaGqaNCaFkaDSaNDaGwaDUaNFaNEaNHaNGaNLaNIaNIaNMaNNaNnaxDaxDaxDaxDaNoaNOaIiaxDaNPaxDaNQaxDaNsaxDaNSaNRaNVaNTaNVaNYaNZarTarTaOaarTarTaOdaOcaOgaOeaOiaOhaOoaOkaOkaLVaOpaKeaNJaNKaOraLXaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaoKaoKaoKaoKaoKaOsaOtaoKaoKaoKaoKaOuaOzaOvaOzaOAaOzaOBaKwaKwaaaaMiaMiaODaNUaOFaNUaNWaNXaOJazUaEIaOLaOKaObaONaOOaObaOPaOfazUaOQaEiaEiaEiaEiaOSaORaOjaIdaGoaOVaFRaGoaEiaLCaHDaOlaKTaOmaOnaMIaMIaOWaHLaOXaOqaOYaPbaOZaLaaJYaPdaPcaOwaOxaOyaPeaaUaPfaxnaPnaOCaNzaxnaPoaNBaOEaLjaPraOGaOHaILaOIaxnaxnaxnaxnaPuaPtakkaNQaPvaxDaOMaOMaPwaOMaPyaPxaPxaPzaOMawhawhawhaPBaGFaPCaxDaOTaOUaOUaPEaOUaOUaOUaPFaPHaPHaPKaPJaPaaPaaPOaPNaPPaKeaPSaPRaPgaPgaPgaPhaPiaKeaPjaPkaPlaLXaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaQaabaabaabaabaabaabaPmaPmaabaabaabaKwaKwaKwaKwaKwaKwaMfaPVaKwaaaaaaaMiaQfaPpaPqaQgaPpaPsaQiaQhaQlaQjaQnaQmaQuaPAaQxaQvazUaPDaQzaQyaEiaPGaFRaHwaQAaGoaHyaIdaFRaPIaFRaQCaEiaLCaHDaQFaPLaPMaQHaQGaQIaPQaHLaQJaLaaJUaLDaQKaPTakkakkakkakkakkakkakkakkaPUaxnaQMaPWaPXaPYaPZaPZaQaaQbaQcaQdaQeaQOaQNaDSaDhaQPaDUaQScfQakkaNQaPvaxDaQTaQkaQWaQVaQXaQoaQpaQqaOMaQraQsaQtaQYaGFaQZaNnaQwaRaaRcaRbaRdaQBaOUaReaQDaQEaRgaRfaRiaPaaRkaRjaRlaKeaQLaRnaRpaRoaRqaQQaQRaKeaRsaPlaRvaLXaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaeLafGaQUaQUaQUaQUaQUaRxagCafGafQafGafQaabaaaaaaaaaaKwaKzaPVaKwaaaaaaaMiaMiaRCaREaRDaRGaRFaRNaRIaRTaRRaRUaEfaRYaPAaRhaSbaSdaScaSeaRmaEiaSkaFRaSlaIdaGoaHyaIdaFRaSmaFRaSnaEiaLCaHDaHDaHDaHDaHDaHDaHDaHDaHLaRraLaaJUaLDaSpaRtaRtaRuaSqaLaaRwaSraRyaRzaPUaxnaxnaxnaxnaxnaRAaRBaOEaAsaAsaAsaAsaILaAsaSsaAsaFoaStaSuabKakkaSvaPvaxDaSwaRHaSxaRJaRKaRLaRMaSAaOMaROaRPaRQaQYaGFaSCaRSaSGaSFaRVaRWaRXaSHaOUaRZaSaaSaaSaaSIaSKaSJaPOaPNaSLaKeaKeaKeaKeaKeaItaItaItaItaLXaSfaLXaLXaLXaLXaLXaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaeLaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaabaabaabaaaaKwaKzaPVaKwaaaaaaaaaaMiaShaSiaSjaSNaSMaSPaSOaSoaSQaSSaSRaSUaPAaTaaSYaTdaTcaSYaTeaEiaSyaFRaHwaSzaTfaSBaTgaSDaSEaFRaThaEiaTjaToaTlaTlaTlaTraTraTlaTvaHLaTwaLaaJUaTCaTAaTDaLaaLaaTEaLaaTFaTHaTGaSTaTIaSVaSVaSWaSVaSXaSVaSVaTJaSZaSZaTKaTbaTTaTQaDSaTUaGwaDUaTVabIakkaxDaPvaxDaSwaRHaTYaTWaTiaTZaTkaUaaOMaTmaTnaQtaQYaGFaUbaTpaTqaUdaTsaTtaTuaUeaOUaUfaTxaTyaTzaUiaTBaUnaPOaUoaUraUqaUtaUsaUBaUwaUCaTLaTMaTNaTOaTPaUDaTPaTRaTSaLXaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaQafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaabaabaabaabaKwaKzaPVaKwaaaaaaaaaaMiaMiaMiaUFaUIaUHaUKaMiaTXaUNaURaUOaUSaUcaUUaUTaUTaUTaUVaRmaEiaEiaEiaEiaUgaUhaUWaUjaUkaEiaEiaEiaEiaUlaUlaUlaUlaUlaUmaUmaUmaVcaHLaHLaHLaVhaUpaVlaHLaHLaHLaHLaHLaHLaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaPUaVoaVoakkaxDaPvcfRaSwaVwaVxaUuaRKaRKaRKaUvaOMaQtaQtaQtaQYaGFaVyaUxaQwaUdaUyaUzaRXaUAaOUaVzaVCaVBaUEaVIaTBaUnaPOaPNaUGaVJazEasGaVKaUJaVLaULaTPaUMaTPaVMaLXaTPaTPaVPaLXaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaaQaabaabaabaKwaKzaPVaKwaKwaKwaKwavzazUazUazUazUcfSaUPaUQazUaVQaVSaVRaVUazUazUazUazUazUaITaQzaVYaVVaUXaUXaUXaUXaUYaUXaUZaVaaUXaVbaUXaWaaUXaUXaVdaVeaVfaVgaVgaWcaViaVjaVkaWdaVmaVmaVnaWfaVpaVgaVgaVgaVfaVqaIiaxDaxDaJLaVraxDaxDaJKaxDaxDaVsaJMaxDaJNaVtaxDaxDaJLaxDaVuaVvaVvaWjaxDaPvaxDaWlaWkaWmaVAaWoaWnaVDaVEaOMaVFaVGaVHaWpaGFaWraWqaWtaWsaVNaVOaRXaWuaOUaWvaSaaSaaWxaWwaVTaWyaPOaPNaWzaVWaVWaVWaVWaVWaLXaVXaTPaTPaTPaWBaLXaTPaTRaWbaLXaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaeLaabaabaabaKwaWDaWCaWeaWeaWeaWeaWEaWgaWgaWgaWgaWgaWhaWgaWiaWFaWHaWGaWIaWIaWIaWIaWIaWIaWNaWJaWQaWPaWTaWTaWTaWTaWWaWVaWTaWXaWTaWTaWTaWZaWTaWTaXbaXaaXdaXcaXkaXeaXcaXcaXcaXlaXlaXlaXlaXlaXlaXlaXmaXlaXdaXoaXpaLPaLPaLPaLPaLPaLPaLPaLPaLPaLPaXqaLPaLPaXraLPaLPaLPaLPaLPaLPaLPaLPaLPaXsaxDaOMaOMaXtaOMaOMaOMaOMaOMaOMaWKaWLaWMaXuaWOaOUaOUaXxaXwaWRaVOaRXaWSaOUaXyaWUaXzaXBaXAaWYaPaaXIaXHaXJaVWaXLaXKaXMaXfaLXaLXaLXaLXaLXaLXaLXaXiaXjaLXaLXaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqAaqAaaQaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaeLaqAaabaabaKwaKzaXNaKwaKwaKwaKwavzaXOazUazUaXPazUazUazUaXnaXQaDaaDacfTaDaaDaaDaaDaaDaaDaaXRaXTaXSaXVaXUaUXaUXaUXaXWaUXaUXaUXaUXaUXaXvaUXaXXaVdaVeaVfaXZaYaaVgaYcaVgaYcaVgaYdaVgaYcaVgaYcaVgaYeaXCaXDaXEaXFaDsaXGaDsaYfaXGaDsaDsaYhaYgaYgaYgcfUaYlaYmaYgccEaYnaYnaYnccFaYoaDsaDsaYqaYpaYwaYraYyaYyaYyaYAaYyaYBaYyaYyaYCaWMaYEaYDaOUaXYaYHaYFaRXaYbaRXaYKaOUaPaaYLaPaaPaaPaaPaaPaaPOaPNawAaVWaYNaYMaYRaYOaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaeLaaaaabaabaKwaKzaYSaKwaabaabaabavzaYTaZbaYVaPAazUazUaZfaZhaZgazUazUaPAaPAaYsaYtaYtaYtaYuaYvaPAaUlaUlaUlaUlaUlaUlaZiaYxaYxaYxaYxaYxaYxaYxaYxaYxaYxaYxaVgaYaaZjaYzaYzaYzaYzaYzaYzaYzaYzaYzaZmaZpaVgaUmawhawhawhaZxaZraZzaZyaYGaYGaZAaYGaYIaYIaYIaYIaYIaYIaYJaZBaZCaZCaYJaZGaYJaYJaZKaZIaYPaYPaYPaYPaYPaYQaYQaYQaYQaYQaZMaWMaZOaZNaOUaYUaZPaYWaYXaYUaRXaYYaOUaYZaZaaZRaZcaZdaPaaZeaZTaOcaOgaZVaZYaZWaZZaZkaLXaYiaYiaYiaYiaYiaLXaQtaTnaYkaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaeLaaaaabaabaKwaKzaXNaKwaabaabaabaabaabaabaabaaQaZoaZoaZobabaZoaZoaZoaZoaaQaaQaaQaaQaaQaaQaaQaaQaabaabaabaabaabaZqbaeaZsaZtaZuaZvaZwbafbahbagbajbaiaYxbakaYacfVaYzaZDaZDaZDaZDaZDaZDaZDaYzcfWbanaVgaUmaabaabawhaZJaxDaNsbapaYGaZLbarbaqaYIbaxbazaZQbaDaZSaYJbaEaZUaZUbaGbaFaZXbaIbaKbaJbaNbacbadbaPbaQaYQbaUbaTbaUaYQbaWbaVbaZbalaOUbbbbbfbaobbgaYUaRXbbhaOUbbibasbatbaubavaPabawaPOaRjaRlaVWbbkbaybbnaVWaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLafGaQUaQUaQUaQUaQUaRxagCagCagCagCagCaeLaaaaaaaabaKwaKzaXNaKwaabaabaabaabbbpbbqbbqbbrbaHbbtbbsbbubaLbaMbbvaZobcfbcfaKzaKzaKzaKzaKzaZqaZqaZqaZqaZqaZqaZqbaeaZsaZtaZwbaObbxaZsbbzbaRbaSbbAbbBaVgbbEbbCaYzaZDbaYaZDaZDaZDbaYaZDaYzaZmaZpaVgaUmaabaabawhbbaaxDbbGbbcaYGbbdbbebbIaYIbbMbbPbbNbbjbbRaYJbblbbmbblaYJbbVbbYbbWbccbcbbcebcdbchbcgbbwaYQbcibbybcjaYQbckaWMaWMaWMaOUbclbcnbbDbcoaYUaRXbcraOUbcsbbHbcubbJbbKaPabbLbcwbcvbbOaVWbcxbbQbcyaVWaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLaSgaQUaQUaQUaQUaQUafQagCagCagCagCagCaeLaaaaaaaaaaKwaKzaXNaKwaabaabaabaabbczbcBbbXbcCbbZbcabcDbcFbcEbbZbcIaZoaKzaKzaKzaKzaMfaKzbcJbcMbcLbcNbcNceGceGceGbcOaZsaZsaZsaZsaZsaZsbaSbcPbcmbcSbcTaVgaYaaVgaYzaZDbcqbcqaZDbcqbcqaZDaYzaVgaZpbcVbctbctbctbctbctbctbctbctbcXaYGaYGaYGaYIbcYbdabcZbcZbdbaYJaYJaYJaYJaYJbdcbcAbbWbdebddbdhbdfbdibcGbcHaYQbdkbdjbcKbdlbdobdnbdqbdpaOUaOUaOUaOUaOUaOUbcQaOUaOUaPabcRaPaaPaaPaaPaaqtbdraqtbdsaVWaZkbdtbduaVWaLXaYiaYiaYiaYiaYiaLXaQtaRPaYkaYkaYkaYkaYkaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQafGaQUaQUaQUaQUaQUaRxaSgaRxaSgaRxagCaeLaaaaaaaaaaKwbcWaXNaKwaabaabaabaabbdvbdxbdwbdybbZbbZbdzbbZbdAbbZbdBaZobcJbcMbdCbcMbcMbcMbdDaKzbdgaKzceJbdFbdEbdEbdEbdJbdJbdJbdJbdJbdKbdNbdmbaSceKbdQaVgaYabdRaYzaZDaZDaZDaZDaZDaZDaZDaYzbdSbdVbdTbctbdWbeabdYbebbeabedbecbelbehbeqbepbeubetbevbdGbdHbdIbeybewbdLbdMbeAbezbdPbeBbeDbeCbeEbdUbeHbeGbdXaYQbeIbdZbeJaYQaYQaYQbeObeKbeKbeKbdnbePbeebefbegbeQaYkbeiaRPbejaTnbekaRPaqtbeTaMqaMqaVWaVWbemaVWaVWaLXaLXaLXaLXaLXaLXaLXaQtbenaQtaRPbeobeUaYkaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaSgaQUaQUaQUaQUaQUaQUaQUaQUaQUaQUaRxaeLaaaaaaaabaKwbcWaXNaKwaabaabaabaabbczbeVberbesbbZbbZbeWbbZbeXbbZbeYaZobeZaKwaKwaKwaKwaKwaKwaKwbdgaYxaYxbexaYxaYxaYxaYxaYxaYxaYxaYxaYxbfcbfbbfcbfdaYxaVfbfeaVfaYzaZDbcqbcqaZDbcqbcqaZDaYzaVfbffaVfbfhbfgbeFbfibfobeFbfsbfrbfxbeLbeMbeNbfBbfybfCbeRbeSbfEbfGbfFbfKbfIbfMbfLbfabfQbfVbfSbfWbdUbfZbfXbgaaYQbgbbfjbfkbflbfmaYQbfnbfnbfnbfnbfnbgcaQtbfpaRPbfqaYkbekaYkaYkaYkaYkaRPaqtbgdaqtbgfawkbftbfubfvaQtaQtaQtaQtaQtaQtaQtaQtaQtbenbggaRPbenaRPaYkaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaQaeLaaQabqaabaaQaeLaeLaeLaeLaeLaaQaaaaaaaabaKwbfwaXNaKwaabaabaabaabbghbbqbbqbgibfzbfAbgjbgkbfDbgnbglaZobgpaKwaabaabaabaabbfHaKwbdgaYxbgqbfJbgrbgtbgsbfNbfOaZsbfPaZwbfPbgubfRbgvbfTbfUaZHbgwaZjaYzaZDaZDaZDaZDaZDaZDaZDaYzaZmaZpaVgbgybgxbfYbgzbgAbfYbgEbgDbgGbgebeMbeNbgMbgHbgNbdGbeSbgPbgTbgQbaFbgUbgmbgWbgobgXbhfbgZaYPaYPaYPaYPaYPaYQbhgbfjbhjbhibhlaYQbhnbhmbhpbhobfnbhqbgBaVFbgCbhrbhsbeebeebeebeebeebeebgFbhwbhtasGbgIbenbfubenbenbgJbenbenbenbgKbenaRPbenaRPaYkaYkaYkaYkaYkaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaKwaKxaXNaKwaabaabaabaabaabaabaabbgLbgLbgLbgLbgLbgLbgLbgLbgLbhxaKwaabaabaabaabbfHaKwbhybgObhzbhCbgRbgSbgRbgRbhDaZsbhIbgVbhIbhNbhMbgYbhOaVgaVgaYacfVaYzbhaaZDaZDaZDaZDaZDaZDaYzbdOaZpaVgbctbhSbhhbhTbhUbhhbhkbhVbhXbgebibbiabihbiebikbdGbeSbinbiobhubaFbhvbhvbhvbhvbhvbiqbipbisbirbhAbhBbiwaYQbixbhEbhFbhGbhHbiybhJbhKbhLbizbfnbhqbgBbgBaQtaQtaYkaYkaYkaYkaYkaYkaYkaqtbiEbiDbiIawkbhQbhQbhQbhQbhQbhRaYkaYkaYkaYkaYkaYkaYkaYkaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaKwaKxaXNaKwaabaabaabaabaabaabaabaabaabaabaabaabaKwbiNbcMbdCbiOaKwaabaabaYxaYxaYxaYxaYxaYxbiPbiQbhWbiRbhYbhZbiTaZsbfPaZwbfPbiUbicbidaYxbiXaVgaYaaZjaYzaYzaYzaYzaYzaYzaYzaYzaYzaZmaZpaVgbfhbjabiibfYbfYbiibhkbctbijbjfbilbimcfYbjgbjjbjjbjqbjoaYJbjrbjsbhvbitbiubivbhvbjvbjtbjxbjwbiAbiBbiCaYQbjyaYQaYQaYQaYQaYQbjzbiFbiGbiHbjAbhqbiJbiKbiLbiMbiMbgBaaaaabaabaabaabbjBbjDbjCbjHbjGbiSbjIbjKbiVbiWbjMaabaabaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaKwbiYaXNaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwbeZbiZbiZbiZaKwaKwaKwaYxbjObjbbjcbjdbjebjPbjSbjhbjibjhbjTbjkbjlbjmbjnbjnbjUbjpbjpbjWbjYaVgbkaaVgbkbaVgbkcaVgbkdaVgbkcaVgbkbaVgaZpaVgbgybkfbkhbkgbkjbkibkkbjEbkmbklbkpbkobjLbkqbjLbjLbgebksbjNbkwbkxbhvbhvbhvbjQbjRbkzbkybkAbjVbkBbjXbkCbjZbkEbkDbkGbkFbkIbkHbkKbkJbkMbkLbfnbkNbkObkObkObkObkPbknaabaabaabaabaabbkQasGbkRasGbkSbkrbkWbktbkubkvbkXaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaKwaMhblableblcblcblcblcblcblfblcblcblcblcblcblcblcblgbiZbliblhbljbljbljblkblmbllbloblnblqblpbltblsblvblublyblwblAbkTbkUbkUbkVbgRbgRblBbjYaVgaYaaVgceLaVgcfZblCbkYbkZcfZaVgceLaVgaZpaVgbctblHblbblIbldblJblLblKblNblMblPblOblNblQblSblRblTblNblNblUblXbhvbitblrbjQbhvbmcblYbmebmdbmhblxbmkbjZblzbmlbmnbmmblDbfnbfnbfnbfnbfnblEblFblFblFblFblFbhqblGaabaabaabaabaabbmobmqbmpbmybmvbmAbmzbmCbmBbmFbmEaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKwaKzbaebiZbmIbmGaKwaKwaKwaYxbmMblVblWbmObjebmPblZbmabmbbmbbmRbmQaZsbmSbgRbmfbmgbgRbmTaYxbjYaVgaYaaVgbmibmibmibmibmibmibmibmibmiaVgaZpaVgbmjbmUbmWbmVbnabmZbmjbmjbncbnbbmrbmsbmtbmubnebmwbmxbnfbjLbngbnhbhvbhvbhvceNbhvbnpbnkbmDbnrbnvbnvbnwbjZbmHbnxbmJbmKbmLbjZbnybmNbnAbnzbnCbnBbnEbnDbnFblFbhqblGaabaabaabaabaabbnGasGbkRasGbnHbkubmXbktbkubmYbnJaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaqAaqAaqAaZqbcWbnLbnKbnNbndaKwaabaabaYxbnObnOceOceObnQbnPbnPbnRbnibnjbnSbmQaZsbnlbnlbnmbnnbnobnoaYxbnTbiXaYaaVgbmibnqbnVbnsbntbnubobbnZbmiaVgaZpaVgbohbogbojboiboobolboqbopbjLborbozbnIbnIbnIboBboAboCbnIbnMboHbjLcgbboJbjLbjLboLboPboOboSboQbnUboTbnWbnXbnYboUboabnYboVbocbodboWbofboXboZboYbpabokbpbblFbhqbomaabaabaabaabaabbonawAbkRbpcbonbpebpdbpfbkubosbotaabaabaabaabaababqaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaabaabaabaabaqAaqAaZqbfwbaebouboubouboubouboubouboubouaYxaYxaYxbovaZsbowboxboxboybpgaZsaZsaZsaZsaYxaYxaYxaYxaYxbphaYacfVbmibpibpjboDboEboFboGbpkbmibdOaZpboIbplboKbpmboMboNboNbpobpnbppbngboRbpqbpsbprbpvbpubpzbpwbjFbpAbpBbpBbpBbpCbpBbpDbpFbpEbpGbpFbpFbpFbpHbpDbpFbpIbpLbpKbpObpMbpUbpPbpYbpWbqabpZbqbbptbqdblFbhqbgBaaaaabaabaabaqtaqtbqjbqgbiIaqtaqtbhRbhRbpxbpybhRaabaabaabaabaabaaaaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaqAaqAaZqbqkbqlboubqnbqmbqpbqobqrbqqbqtboubqubpJbpJbpJbpJbpJbpJbpJbqwbqvbqzbpNbqBbqAbpQbpRbpSbpTbpQbqDaYaaVgbmibpVbqFbpXbqJbqGbqMbqKbmiaVgaZpbqcbqObqebqfbqPbqhbqibqSbqRbqUbqTbqWbqVbqYbqXbqZbqsbrabnIbrebrdbrfbqxbqybrgbrhbnXbribqCbrjbqEbrkbnYbrlbqHbqIbrmbrnbqLbrobqNbrqbrpbqQbrrbrtbrsbrxbrwbryblFbhqbgBaaaaabaabaabaqtaqtasGbkRasGaqtaqtaabaabaabaabaabaabaaaaaaaabaabaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaqAaabaabaabaabaqAaqAaZqbiYbrDboubrEbrbbrcbrFbrHbrGbrKbrJbrMbrLbrQbrNbrNbrNbrNbrSbrNbrUbrNbrWbrNbrZbsbbsabsabpJbsdbjYaYaaVgbmibmibmibmibsgbrubrvbmibmibshbsjbsibsmboNbsnbqebqebrBbrCbspbsrbsqbeNbstbsxbrIbszbsybsAbnIbsCbsBbsEbrObrObrObrObrObrObrObrObrObrObrPbsFbrRbrRbrRbrRbrRbrRbrRbsGbrTbsHbrVbqabsMbrXbrYbsPblFbhqbgBaaaaaaaaaaqtaqtceQaKFaKybbOceRaqtaqtaabaabaabaabaabaaaaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaqAaqAaZqaMhbrDboubsUbsTbqpbsWbsXbskbslboubsYbpJbsZbsobsobsobtbbtabtgbssbsobsobsobthbpQbsubsvbswbpQbtiaYaaVgbtmbtlbtqbtnbtrbsDbtubttbtvaVgaYebtybohbsIbrBbsJbsKbsLbtzbsNbsObtBbsObnIbtEbtDbtHbtFbtJbnIbtLbtKbtPbtMbtRbtQbtSbtcbtdbtebtfbtTbrObtUbtVbrRbtjbtjbtjbtjbtjbrRbtkbtWbnYbtXbqabtYbtobtpbtZblFbuabgBaaaaaaaaaaqtbsRbsQbscbsSaUGbsebsfaqtaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaZqaZqaZqaZqbrDbtxbtxbtxbtxbtxbtxbtxbtxbtxbtxbuhbuibpJbtAbtAbtAbukbtAbtAbtAbtCbtCbumbtCbtCbtCbtCbtCbjYaYaaVgbupbuobtGbuqbtIbtIbusburbuuaVgaZpboIbuvbtNbrBbtObuBbuxbuFbuDbuHbuGbuIbnIbuJbnIbnIbnIbnIbnIbuLbuKbuNbuMbuPbuPbuQbudbuebufbuebuRbrObuSbwxbrRbtjbtjbtjbtjbtjbrRbuUbulbuVbunbuXbuWbvabuYbvbblFbhqbgBaaaaaaaaaaqtbtsbubaUGbucaUGbugbtwaqtaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabbuzbuAbvgaZqbuCaZqaZqbrDbtxbvhbuEbvkbvjbvqbvnbvsbvrbvybvvbvzbuObvBbvAbvEbvCbvIbvGbvJbtCbvLbvKbvMbuZbvObvNbvQbvPbbEbvebupbvRbvXbvSbsDbvibwdbwbbuuaVgbdVbvlbqObqebvmbtObwfbvobrCbvpbwkbwgbwlbnIbvtbvubwmbvwbvxbvwbwnbtKbwpbvwbwtbwsbrObwvbtfbvDbtfbwwbrObvFbwxbrRbtjbtjbtjbtjbtjbrRbjZbjZbjZbjZblFblFblFblFblFblFbhqbgBaaaaaaaaaaqtbutbvcaUGbvdbuwbvfbuyaqtaYkaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabbwFbwEbwHbwGbwLbwKbvTbvUbaebtxbvVbvWbwMbvYbvZbwabwObwcbwPbwebuibuObwRbwQbwhbwibwjbwjbwSbtCbwUbwTbwVbwobwWbwqbjYaVgaYacfVbupbwrbxfbwZbwubxgbxhbwrbuuaVgaZpbqcbxjbqebqebxlbwzbxpbxrbxqbxubxsbxwbnIbxybxxbwIbvwbwJbvwbxBbxzbxCbwNbsVbxDbxFbxEbtfbtfbtfbxGbrObxIbwxbrRbtjbtjbtjbtjbtjbrRbxKbxJbkObkObkObkObxLbkObkObkObxMbgBaaaaaaaaaaqtaqtbwXbwBbxQbxabxbceSceTaYkaabaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabbuzbuAbxcaZqaZqaZqaZqbrDbtxbxdbxebxTbxSbxUbxibxVbxkbxWbpJbuibuObwRbwQbxmbxnbxobxmbycbtCbyebydbyfbxtbygbxvbjYaVgaYaaVgbyibyhbymbykbxAbyobyqbttbyraVgaZpbyubyvboKbqebtObywbxHbyxbsNbyAbyybyCbvwbvwbvwbvwbvwbyDbvwbyEbtKbsVbxObxCbxPbyFbxRbyMbyJbyObyNbrObjZbyPbrRbtjbtjbtjbtjbtjbrRbhqbgBbgBbgBbgBbgBbxXbgBbxYbxZbiJbgBaaaaaaaaaaaaaqtaqtaqtaqtaqtaqtaqtbyWaYkaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaZqbyXbyYbtxbzabyjbzbbylbzcbxibynbzibxWbypbzobzmbwRbwQbxmbysbytbxmbzpbtCbzvbzsbzxbxtbzybxvbjYaZHbgwaVgbyzbzzbyBbzAbwubzBbzDbzCbyzbyGaZpaVgbuvbyHbyIbzEbyKbyLbzFbsNbzHbzGbzIbvwbzJbyRbySbyRbyTbzObzRbzQbzUbzSbyZbzYbrObrObrObrObrObrObrObzZbAabrRbrRbzdbzebzfbrRbrRbhqbgBbzgbxXbxXbgBbxXbgBbgBbgBbgBbgBaabaabaaaaaaaqtbzhbzhbzhbzhbzhaqtbAbaYkaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaZqaZqbzjbzkbzkbzkbzkbzlaZqaZqbAcaKzbtxbxdbznbxTbAdbAkbzqbynbzrbxWbpJbuibuObwRbwQbxmbAlbztbzubAmbtCbzwbAobAsbAqbAtbxvbvPaVgaYaaVgbyzbAubAybAwbACbAAbyzbADbyzaVfbAFaVfbsNbsNbsNbsNbsNbsNbsNbsNbAGbijbijbvwbAHbzKbzLbzMbzNbxObyEbtKbAObzPbAPbxPbARbAQbzTbASbzVbzWbzXbATbAVbAUbBcbBbbBdbAebAfbAgbhqbgBbxXbAhbAibxXbAjbgBaabaabaabaabaabaaaaaaaaaaqtbzhbzhbzhbzhbzhaqtbAbaYkaabaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaZqbBibcNbcNbcNbcNbcNbcNbBjbcNbBkaKzbtxbAnbAnbxTbBlbApbBmbArbBnbBobpJbBpbAvbwRbBqbxmbxmbxmbAxbBrbtCbAzbBsbABbBtbBubxvaVgaVgaYaaVgbyzbAEbwrbBvbwubBxbyzbBzbyzaVgaZpaVgaVfbAIbAJbAKbALbAMaUmbANbxXbxXbxXbvwbBBbBAbBDbBCbBFbBEbzUbBGbxCbxObsVbxDbBHbAWbAXbAYbAZbBabzXbBIbBNbBLbjZbBebBfbBgbxXbxXbhqbgBbxXbgBbxXbxXbiMbgBaabaabaabaabaabaaaaaaaaaaqtbzhceUbzhceVbzhaqtbAbaYkaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaZqbaeaZqaKzaZqaZqaZqaZqaZqaZqaZqbBhbtxbBPbBObBVbtxbtxbtxbtxbtxbtxbBWbBXbuObCdbCcbCjbCibxmbAlbAmbtCbCnbCkbCpbCobCqbBwcfZaVgaYaaVgbyzbAEbwrbCrbwubBybCubCtbyzaVgbCvaXlaXdbCxaXlbCybCAbCzbCCbCBbCDbBJbBKbvwbvwbvwbvwbvwbvwbvwbCEbtKbBMbvwbCGbCFbzXbCHbBQbBRbBSbBTbzXbBUbBUbCIbBUbCJbCKbkObkObkObxMbgBbxXbAjbiJbxXbiMbgBaabaaaaabaaaaaaaaaaaaaaaaqtbzhceWceXceWbzhaqtbAbaYkaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaZqbaeaZqaKzaMfaKzaKzaKzaKzaKzbBYbBhbBZbCabCabCbbCLbCMbCebCfbCgbBhbChbCSbCNbtAbCUbClbCmbxmbxmbCVbtCbCZbCWbDbbDabCsbtCbtCaVfbDcaVfbyzbyzbyzbDfbDhbCwbyzbyzbyzbDibDlbDjbDmbDjbDjbDobDqbDpaUmbkNbDsbDrbDtbDtbDtbDrbDrbDrbDubvwbDzbDxbuNbDDbDGbDFbDHbCObCPbCQbCRbDIbzXbCTbDMbDLbBUbDNbgBbgBbgBbgBbgBbgBbxXbgBbgBbgBbgBbgBaabaabaabaabaabaaaaaaaaaaqtceZbzhbzhbzhbzhaqtbAbaYkaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaZqaZqbaeaZqaZqaZqaZqaMfaZqaZqaZqaKzbBhbCXbCYbDPbDQbDPbDSbDRbDdbCabBhbDebDVbDgbtAbDXbEabDZbDkbEbbEcbDnbEebEdbEhbEfbEkbEibDnbElaYaaVgaVgbfUbDwbEmaVgaVgbDyaVgaVgaVgbEmbEpbDAbDBbDCbDAbEqbDEbDAbErbDAbDAbDAbDAbDAbDAbDAbDAbDNbvwbxNbEsbtPbEtbExbDJbDKbEzbEEbEBbDObEHbzXbEIbEKbEJbBUbDNbgBbDTbAibzgbxYbgBbxXbgBaabaabaabaabaabaabaabaabaabaabaabaaaaqtaqtaYkaYkaYkaqtaqtbAbaYkaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaabaabaZqbfwbaeaZqbBYaMfaKzaKzaZqbBYaZqaZqbBhbDUbELbCfbDWbCfbCfbDWbENbDYbBhbEPbuibERbtAbESbETbESbEUbBqbEVbDnbEWbEgbEYbEXbEjbEZbDnbFabFbbEnbEnbEobEnbFcbFfbFebFgbFebFebFebFhbcVbDAbEubEvbEwbFibEybFjbEAbFkbECbEDbDAbFmbEFbEGbDAbDNbvwbvwbvwbFnbzXbzXbzXbzXbzXbzXbzXbzXbzXbzXbFobBUbBUbBUbDNbgBbiJbAibAhbxXbgBbAjbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBaaaaaaaaaaYkbFpbFqbFqbFqbFsaYkaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaabaabaabaaaaZqbEMbaeaZqaKzaZqaZqaKzaKzaKzaZqaKzbBhbFtbEObFubEQbFwbFybFxbFAbFzbFFbFBbFGbpJbtAbFHbFJbFIbFPbFdbFQbDnbFTbFSbFXbFWbGbbGabDnaYaaVgaVgcfZbFlaVgaVgbGcaVgaVgaVgcfZaVgaVgaVgbDAbGebGfbGfbGkbEybEybEybGmbFrbGpbGnbGrbFvbGsbDAbGtbDrbDrbDrbDrbGubGvbDrbDrbDrbDrbDrbDrbDrbDrbGwbGubDrbDrbGxbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbxXbFCbgBaaaaaaaaaaYkbAbaYkaYkaYkaYkaYkaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaabaabaabaaaaZqbiYbaeaZqaKzaKzaZqaKzaZqaKzaMfaKzbBhbFDbFEbCabGGbGEbGMbCacfabFKbFLbFMbuibCNbtAbFNbFNbFNbFNbFNbFNbDnbDnbFObGNbDnbDnbDnbDnbGQbFRbFRbFRbFRbFRaVfbGRaVfaUmaUmaUmaUmaUmaUmbDAbGSbEAbFUbFVbEybEybEybGTbEAbGUbDAbFYbFZbGVbDAbDNbgBbgBbGWbgBbgBbgBbgBbGXbgBbgBbgBbiMbGdbiJbGYbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaZqaZqbaeaZqaZqaZqaZqaZqaZqaZqaZqaKzbBhbHcbFLbFLbFLbFLbFLbFLbFLbGibGibGjbHdbGlbGibFNbHfbHebGobHgbGqbHibHnbHjbHtbHrbHDbHvbFNbaebFRbGybGzbGybFRbGAbHFbGAbGCaaaaaaaaaaaaaaabDAbGDbEAbHGbGFbEAbEybEybHHbGHbHJbDAbDAbDAbDAbDAbDNbgBbxXbxXbGJbgBbGKbANbANbGLbHNbgBbgBbgBbgBbHObgBbANbANbGObANbANbxXbGObGPbxXbxXbGObxXbxXbxXbGObxXbxXbGObxXbxXbxXbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaZqbHRbHQbcNbcNbHVbcNbcNbcNbcNbcNbcNbHWbFLcfbcfbcfbcfbcfbbFLbGibHYbHXbIabHZbIbbFNbGZbHabHbbHbbIibIcbIlbIjbIubHhbHhbIvbFNbaebFRbIxbHkbHlbFRbHmbIzbHmbGCaaaaaaaaaaaaaaabDAbHobHpbHpbHqbEAbEybEybEAbEAbIAbHsbICbHubDAbIFbGxbgBbHwbHxbHybgBbHzbANbxXbANbHAbGXbHBbHCbgBbANbIHbGLbANbHEbIJbIIbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbIKbHEbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaabaabaZqaZqaZqaZqaZqbfwbHIaKzaZqaZqaZqaKzbgpbFLcfbcfbcfbcfbcfbbFLbGibILbHKbHLbHMbINbFNbIPbHPbGZbGZbIZbIVbHSbHTbHUbHhbHhbJfbFNbaebFRbJkbJmbJlbJobJnbJqbJpbGCaaaaaaaaaaaaaaabDAccGbEAbIdbIebIfbIfbIfbIfbIfbIgbEybIhbFUbDAbJrbgBbgBbgBbgBbgBbgBbJsbIkbJvbImbJsbgBbInbxXbIobANbgBbANbxXbIpbIqbIpbIpbIpbIpbIrbIrbIrbIrbIrbIpbIpbIpbIpbIpbIpbIpbIsbgBaaaaaaaaaaYkbAbaYkaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaabaabaabaZqaZqaZqaKzaZqaqAaZqbItbJBbFLcfbcfbcfbcfbcfbbFLbGibJEbIwbJGbIybJIbFNbJMbHbbIBbJObIDbIEbJSbJQbJVbJUbJUbJWbFNbJYbFRbJZbIMbKdbFRbIObKfbIObGCaaaaaaaaaaaaaaabDAbEAbIQbIRbISbEybITbEybEybITbITbITbIhbEvbIUbKgbiMbIWaabaaaaaabgBbIXbIYbKjbJabJbbgBbJcbJdbJebKmbgBbJgbJgbJhbIpbIrbIrbJibIrbIrbIrbJibIrbIrbIpbJjbIpbIpbJjbIpbIpbxXbgBaaaaaaaYkaYkbKnaYkaYkaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaZqaKzaZqaZqaZqaZqbeZbFLcfbcfbcfbcfbcfbbFLbGibKtbKqbKBbKxbKDbFNbKFbKEbKHbFNbFNbJtbJubKLbJubJtbFNbFNbFNbaebFRbJwbJxbJwbFRbJybKfbIObGCaaaaaaaaaaaaaaabDAbEAbIQbJzbISbEybEybEybEybEybEybEybIhbGDbJAbKSbiMbJCaabaabaabbgBbJDbIYbKTbJabJFbgBbgBbgBbgBbKWbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBbgBaaaaaaaYkbJHbAbbLbaYkaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaqAaqAaabaabaZqaMfaZqbJJbJKaZqbeZbFLcfbcfbcfbcfbcfbbFLbGibJLbLebJNbLfbJPbFNbLgbHhbJRbLibFNbJTbJubLjbJubLkbFNbLlbcNbBkbFRbJwbJXbLmbFRbLnbKfbKabGCaaaaaaaaaaaaaaabDAbEAbIQbKbbISbEybITbEybEybITbITbITbIhbFUbJAbKSbiJbJCaabaabaaabgBbgBbgBbgBbgBbgBbgBaabaabbKcbLpbKeaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaYkaRPbLqbLvaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaqAaqAaabaabaZqaKzaZqbKhbKibLwbgpbFLbFLbFLbFLbFLbFLbFLbGibKkbKlbLBbLxbJPbFNbKobHhbHhbKpbFNbFNbJubLEbJubFNbFNbrDaKzaKzbKrbKrbKrbKrbKrbKsbLGbIObGCaaaaaaaaaaaaaaabDAbEAbGpbKubKvbKwbKwbKwbKwbKwbKwbKwbLKbHGbKybKSbGdbKzaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabbKAbLMbKAaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaYkaYkaYkaYkaYkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqAaabaabaqAaZqaKzaZqbKCaKzaZqbLNbLObcMbcMbcMbcMbLPaKwbGibGibKGbLQbKIbGibFNbKJbHhbKKbLWbFNbKMbKNbKMbKNbKMbFNbaebKOaKzbKrbKPbKQbKRbKrbLZbMdbIObGCaaaaaaaaaaaaaaabDAbKUbKVbMebKXbKYbITbKZbLabITbITbITbIhbMgbDAbKSbgBbLcaabaabaabaabaabaabaaaaabaabaabaabaabbLdbMhbLdaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaqAaZqaKzaZqaZqaZqaZqaZqaZqaZqaZqaZqaZqbeZaKwbGibGibGibGibGibGibFNbMnbFNbFNbFNbFNbKMbKNbKMbKNbKMbFNbMoaZqbLhbKrbMpbMqbMqbMsbMrbMubIObGCaaaaaaaaaaaaaaabDAbDAbDAbDAbDAbDAbDAbDAbDAbDAbDAbDAbMvbDAbDAbKSbLcaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaabbMwaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaZqaKzaKzaZqbLobMybMxbLrbLsbLtbvTbMGbMzbcMbcMbcMbMHbcMbcMbcMbcMbMIbLyaabaabbFNbKMbLzbKMbLAbKMbFNbaebMJaKzbKrbLCbLDbMMbKrbLFbMNbLHbGCbLIbLIbLIbLIbLIbDAbDAbDAccHbLJbMPbLLbLLbMTbMRbMUbMUbMVbMUbMUbMWbLcaaaaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaZqbcWaKzaZqbvTbLRbvTbLSbLTbvUbvTaZqaZqbLUaZqaKzbLVaZqaMfaZqaKzbhxaKwaabaabbFNbKMbKMbMXbKMbKMbFNbaebLXaKzbKrbKrbKrbKrbKrbHmbIzbHmbLIbLIbLYbNibMabMbbMcbNkbLIbNlbLIbMfbLIbLIbNpbNmbLcbMibLcbLcbLJbLcbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqbfwaMfaZqbvTaKzbMjbMkbMlbLSbvTaZqaKzaKzaKzaMfaKzaKzaKzaZqbMmbgpaKwaKwaKwbFNbNqbNrbNrbNrbNsbFNbrDbLXaKzaKzaKzaMfaKzbGCbNwbKfbIObNxbLIbNybMtbMtbMtbMtccIbLIbNBbNDbNCbNEbLIbNGbNFbLcbMAbMBbLJbLJbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaZqaKzaZqbLSaZqbMCbvTbMDbMEbMFaZqaKzaZqaZqbLVaZqbMGaZqaZqaKzbNHbLObLObLObNJbNIbcNbcNbcNbcNbNKbyYbMKaKzaMfaKzaKzaKzbMLbKsbLGbIObNNbNMbMtbMObNObMQbNPbMSbNRbNQbOgbNVbOhbLIbKSbLJbMYbLJbLJbMibLJbLJbLJbMZbLJbLJbLJbLJbLJbLJbNabLJbLcaaaaabaabaababqaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbNbbNcbNdbNebLSbLSaKzaZqaKzaZqbNfbNgaKzaKzbLUaZqaZqaZqbLuaZqbNhbOkbNjbNjbNjbOmbNjbNjbNjbNjbNjbNjbNjbNjbNjbNjbOpbKfbIObNNbNMbMtbMtbOqbNnbNobOrbLIbOxbOzbOzbOBbLIbKSbMAbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLJbLcaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbLSbNdaKzbvTbLTbKibvTaZqaKzaKzbNtaKzaKzaKzaMfaZqbNubLSbNvbLTbNhbOFbOEbOJbNzbNAbOKbOObOLbORbOPbOPbOPbOPbOSbOXbOWbOYbIObNNbNMbMtbMtbPcbNLbNobPdbLIbPebPfbOzbPgbLIbPibPhbLcbNSbNSbNTbNUbNUbNSbNSbLcbPkbLJbLJbLJbNWbLcbLJbLcaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbNXbNYbNZbvTbOabvTaKzaZqaKzaZqbObaKzaMfaKzaKzaZqbOcbOdbOebOfbNhbPnbNjbPvbOibOjbPxbOlbPybOnbOobOobOobOobPzbPDbPAbMNbLHbNNbNMbMtbMObOsbOtbNobOubLIbLIbLIbLIbLIbLIbKSbOvbLcbNSbNUbNUbNUbNUbNUbNSbOwbLJbLJbNSbLJbPIbLcbLJbLcaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbMGaZqaZqaZqaZqaZqaZqaZqaKzaZqbLUaKzbOyaKzaKzaZqbPPbKibOfbOAbNhbPnbNjbPUbOCbODbPVbNjbPybPWbOGbOGbOHbOGbOGbOIbPXbKfbIObPYbLIbQabOMbONbONbQebQbbLIaabaabaabaabbLcbKSbOQbLcbNSbNUbNUbNUbNUbNTbQfbLcbQgbOTbNSbOUbOVbLcbLJbLcaabaabaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaZqaKzaKzaKzaKzaKzaKzaKzaKzaKzaKzaKzbLVaKzaKzaKzaKzaKzaZqaZqbQsbQkbQtbNhbPnbNjbOZbPabPbbQvbQFbQybQLbQHbQNbQNbQNbQObNjbHmbIzbHmbLIbLIbPjbQPbPlbPmbQQbPobLIaabaabaabaabbLcbKSbLcbLcbLcbPpbPqbPqbPpbPqbLcbLcbLcbPrbMZbPsbLcbLcbMZbLcaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaZqaZqaZqaZqaZqaZqaZqaZqaZqaZqaZqaKzaKzaKzbcfaMfaKzbPtbPuaZqbQSbKibPwbNhbPnbNjbQWbQVbQYbQXbNjbPybPWbOGbOGbPBbOGbPCbQZbIObKfbIObPEbPFbPGbPGbPGbPHbRaccJbPEbPEbPEbPEbPEbPEbKSbLcbPKbPLbLJbLJbLJbLJbNSbLJbNSbLcbPsbLJbPMbLcbNabLJbLcaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqaKzaKzaKzaKzaKzbObaZqbPNbPObRbbNhbPnbNjbPQbPRbPSbPTbRcbPybRgbRebRebRhbRjbOGbPZbIObMNbRlbPEbPEbRmbPHbPHbQcbRabPJbQdbRnbWMbWsbWMbPEbKSbLcbRqbLJbNTbQhbQhbQhbNUbLJbLJbLcbPsbNSbQibLcbLJbLcbLcaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqaZqbLuaZqaKzaZqaZqaZqbQjbvTbRrbNhbPnbNjbPTbQlbQmbPTbQnbPybQobQpbQqbQrbRtbOGbPZcghbKfbIObPEbPEbRubQubQubQubRvbQwbPJbQxbWsbWMbRwbPEbKSbLcbNSbLJbNUbQhbQhbQhbNUbLJbLJbLcbQzbNSbQAbLcbLJbLcaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaZqaKzaZqbQBbPtaKzaKzbNtaZqbNhbNhbNhbNhbNhbPnbNjbPQbQCbQDbQEbRzbPybQGbRFbQIbQJbRtbOGbPZbIObKfbNNbQKbRGbPJbPJbPJbPJbRabPJbPJbQMbWMbWsbWMbPEbKSbRHbLJbNSbNSbNSbLJbLJbLJbNSbLJbOwbNSbNSbPsbLcbLJbLcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaZqaMfaZqaKzaKzaKzaKzaKzaZqbRIbRJbRJbRJbRJbRNbNjbPTbQRbRPbPTbQTbPybQUbRRbRRbRRbPzbOGbPZbIObRWbRSbRYbRXbSbbSabSbbSbbSdbRdbRdbSebPEbPEbPEbPEbKSbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLcbLJbLcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaZqaKzaZqaKzaMfaKzaKzbLVaZqbPnbRfbRfbRfbRfbRfbRfbRfbRfbRfbRfbRfbShbSkbOGbOGbRibOGbSnbRkbSobKfbSpbPEbPEbSqbRabRobRobRobPJbPJbRpbSvbSrbRsbPEbSxbMUbMUbMUbSDbSzbMUbSEbLJbLJbLJbLJbLJbLJbLJbLJbLJbLcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaZqaKzbLuaKzaKzaKzaKzaMfaZqbPnbRfbRxbRxbRxbRxbRxbRxbRfbRAbRBbRfbRfbRfbRfbRfbRfbRfbRfbRfbRCbLGbNNbQKbRGbPJbRabRDbREbRDbPJbPJbRpbSIbPGbSMbPEbPEbSNbPEbPEbSObPEbPEbKSbSPbLcbLcbLcbLcbLcbLcbLcbLcbLcaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaZqaKzaZqbObaKzaKzbLUaKzbRKbPnbRfbRxcfAbRxbRxbRxbRxbRfbSQbRObSRbRQbSTbRfbSWbRTbRUbRVbSXbIObKfbNNbQKbRGbPJbRabTbbTbbTbbPJbPJbRpbTdbPGbRZbTjbPEbTkbScbTlbQxbTnbPEbKSbMAbLcaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqaKzaZqaZqaZqaZqaZqbLVaKzbPnbRfbRxcfAbRxbRxbRxbRxbRfbTqbRObSibRTbSjbTsbSlbRTbSmbTubTwbTvbKfbIObPEbPEbTCbTxbSsbSsbSsbStbSsbSubTDbSwbTEbSybTFbSAbSBbSCbTIbTGbPEbKSbSFbLcaaaaaaaaaaabaabaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqaKzaKzaKzaKzaKzbcJbTKbTKbRNbRfbRxcfAbRxbRxbRxbRxbRfbTqbRObSibTLbSJbSKbSLbTNbTPbTObTRbTQbTVcgibPEbSSbPJbTXbRobRobRobSUbPJbRpbTdbPGbSVbTYbPEbTZbSYbSZbPJbTabPEbKgbLcbLcaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaZqaZqaZqbcWaMfbNhbUabTcbTcbTcbRfbRxcfAbRxbRxbRxbRxbRfbUebTebTfbTgbThbTibSLbUfbTgbRTbUhbUgbKfbIObPEbTmbPJbUibRDbREbRDbSUbPJbRpbTdbPGbTobTpbUjbTrbUkbTtbTtbUmbPEbKSbLcaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaZqaKxaKzaZqbUobUnbUqbTybRfbTzbRxbRxbRxbRxbRxbRfbUvbRObUwbTObTObUxbTObUybRTbTHbSXbUzbKfbIObPEbTJbPJbUibTbbTbbTbbSUbPJbRpbUBbUAbTMbUCbPEbPEbUEbUDbUFbPEbPEbKSbLcaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaZqaZqaKzaZqbUabTcbULbUGbRfbRfbRfbRfbRfbRfbRfbRfbUObRObUfbRTbTSbTTbRTbTUbRTbUQbTwbIObKfbTWbPEbUUbUWbUVbPJbPJbPJbSUbPJbQxbUXbPJbUbbUcbUdbPEbUZbUYbUYbUYbUYbVabLcaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaZqaKzbNhbUabTcbVcbVbbNhaabaabaabaabaabaabbRfbVdbRObUfbRTbVfbRfbRfbRfbUlbUlbUlbUlbVgbUlbPEbVhbVibPJbPJbPJbPJbUpbPJbVjbUrbUrbTIbPJbPJbVkbVlbLcbLcbUtbLJbKSbLcaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaZqaKzbNhbPnbUubUubVmbUubUubUubUubUubUubUubUubUubVnbVobRTbVpbSlbVqbRfbVsbVrbVubVtbVwbVvbPEbRDbVibUHbUIbUJbUHbUIbUJbUKbVxbPJbUMbREbUNbPEbVybLJbMBbLJbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaZqaZqaKzaZqbPnbUubUPbVzbURbUSbUTbURbUubVGbVIbVHbUubRObUfbRTbVpbSlbVJbRfbVNbVLbVObVObVQbVPbPEbPEbPJbUHbVRbUJbUHbVebUJbPEbPEbPEbPEbPEbPEbPEbVybLcbLJbLJbMibKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqbcWaKzaZqbPnbUubVYbVXbWabVZbWcbWbbWfbWebWbbWgbWlbWkbWnbRTbVpbSlbWobRfbWqbWpbWubWtbWxbWvbUlbPEbVkbPEbPEbPEbPEbPEbPEbPEbPEbUZbUYbUYbUYbUYbWybLJbLJbVAbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaZqbcfaKzaZqbPnbUubVBbVCbVDbVEbVFbWEbUubWFbWNbWJbUubVKbWQbVMbWRbSlbWTbRfbUlbUlbUlbUlbXabUlbUlbXbbMUbSzbMUbMUbMUbMUbMUbXcbLcbVybLcbLcbMYbMibLcbLJbVAbMZbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaZqaKxaKzaKzbPnbUubVSbVSbVTbVUbVVbUubUubUubUubUubUubVWbXdbVWbVWbVWbVWbVWbXgbXfbMRbMUbXibMUbXjbMWbLJbXkbWdbWdbWdbWdbXlbKSbLcbXmbLJbMZbLJbLJbLJbMZbMibLJbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaabaabaabaabaabaabaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbXnbWhaaaaabaZqaZqaZqaZqbPnbUubWibWjbVEbVSbXrbUubXsbWmbWmbWmbWmbXtbXybXubXDbWrbXFbVWbXHbXGbXPbLLbWwbWwbXQbWwbWwbXSbWzcfEbWzbWAbWBbKSbLcbVybLcbWCbLJbSFbLJbLJbLJbWDbLcbKSbLcaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXTaabaaaaabaabaabaaabNhbXUbUubWGbWHbVEbVSbXrbUubWIbVWbVWbVWbVWbVWbXWbXubWKbWLbXZbVWbXHbYabNFbWObWPbYdbYfbWSbYhbWUbWVbWVbWWbWAbWXbKSbLcbVybLcbLcbLcbLcbMibMYbLcbLcbMibKSbLcaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbWYaabaabaabaaabNhbPnbUubWjbWZbVEbVSbYkbUubWIbVWbYmbYlbYnbXebXWbYobYqbXhbYrbVWbYtbYsbYvbMZbWPbYwbYybXobXpbXqbWWbWVbWVbYAbXSbYCbMUbYDbMUbMUbMUbMUbMUbMUbMUbYEbMUbMWbLcaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbXvbXwaaaaaabNhbNhbPnbUubXxbVSbVEbVSbXxbUubWIbVWbYFbXzbXubXAbXWbXzbXubXBbXCbVWbYGbXEbYIbYHbWPbYNcfFbXIbXJbXKbWVbWWbWWbWAbWAbLcbLcbLcbLcbLcbLcbLcbLcbMAbMAbUtbXLbLJbLcaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXMbXNbWhaaaaaaaaabNhbXObPnbUubXxbVSbVEbYPbXxbUubWIbVWbYQbXzbXubXRbYSbYRbYTbXVbYUbVWbKSbLcbLcbLcbWPbYVbWwbWwbWwbWdbWdbWdbWdbWdbWdbWdbXXbWAaaaaaaaaaaaabLcbLcbLcbLcbLcbLcbLcaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbXNbXMaaaaaaaaabNhbXYbPnbUubUubUubYWbUubUubUubYXbVWbYbbYcbYYbXebYebYZbXubYgbXZbVWbKSbLcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaabZibZnbZmaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaabNhbYpbZobRJbZpbRJbZqbRJbRJbRJbZrbVWbVWbVWbVWbVWbYubZsbZtbXhbZCbVWbKSbLcaaaaaaaaaaaaaaaaaaaaabYBaabaabaabaaaaaabZDbZFbZEaabaabaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXnbWhbXNaaaaaaaaaaaabNhbNhbNhbNhbNhbNhbNhbNhbNhbNhbZUbZJbZZbZXbVWcaabYebYZbXubYLbYMbVWbKSbLcaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaabaabaabaabaabaaaaabaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaccabbYjbYicadcadaaRcaeaabaabbZabZbbZcbZdbZebZfbZgbNhbZhbYpbYpcafbVWcahbYebYZbYocancaobVWbKSbLcaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaRaaRbYxaaRbYzbYJcaqbXnaabbZubZvbZwbZxbZxbZybZzbNhbNhbNhbYpcafbVWbYKbYecarcatcascavbVWbKSbLcbZGbZHbYObYObZIbZGbZGcawcazcaycaycaAaababqaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXTbYjcaBbYiaaRaaRccqcaqbZMbZLbZNbZxbZxbZxbZObZPbZzbNhaabbNhbZQcafbVWbVWbZRbZSbZTcaDbVWbVWbKSbLcbZGcaHbZVbZjbZkbZYbZGcaIcaOcaMcaPcbWcaRcaRcaRcaRcaRcaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaqbYzaaRbZlaaRcbacaZcbdcbccbdcbfbZxbZxcagbZzbZzbNhbNhbNhbNhcafbZGcbgcbhcajcakcbicbjbZGcbkbZGbZGcamcapcamcamcblbZGbZGbZGbZGcbpcbmaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaqaaRaaRbZBbZBaaRcbqcaubYpcaubZxbZxcbrbZwbYpbZwcbsbZzbZycbscafbZGcbtbZKcambZWcbucbvbZGcbxcbwbZGcbycapcaEcamcaFcaGcbzcbAcaJcbpcbmaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaabXnaabaabaaaaaaaaacaqaaRaaRaaRaaRcbBcaqbZMbZLcaLbZzbZxbZPbYpbYpbZxbNhbNhbNhbNhcafbZGcbCcbEcbDcalcaicbGcbFcbJcbHcbLcaxcbNcbMcaKcbRcbScbbcbVcbTcbXcbmaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaabYjaaRaaRaaRaaRaaRcbqcaucbecaubZcbZybZybZxbZzbZwbNhaabaabbNhcbYbZGcaNccbccacaScaQcccbZGcamccdbZGcaUcaVcaUcaWcbncaGcceccfcaJccgcbmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaabYjaaRaaRaaRaaRcaXcaZcbdcbccbdcchccjccicclcckbZwbNhaabaabbNhcafbZGbZGbZGcaYccnccmbZGbZGbZGccobZGbZHbYObYObZIbZGbZGbZGbZGbZGaabcbmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcacaaaaaRccpcboaaRaaRccqcaqbZMbZLcaLbNhbNhbNhbNhbNhbNhbNhaabaabbNhbZUbZJccrbNhbNhbNhbNhbNhccsbZJcctbNhccuccwccvccxaabaabaabaabaabaabcbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaRbYjaaRcbIcbIbYjbYjaabaabaabaabaabaabaabaabaabaabaabaaabNhbNhbNhbZUccyccyccyccyccycczbNhbNhbNhaabaabaabaabaabaabaabaabaabaabccAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbKccBcbOcbOcbOccBccCaaaaabaabaabaabaabaabaabaabaabaabaaaaaaaaabNhbNhbNhbNhbNhbNhbNhbNhbNhaaaaaaaaaaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaabXTbXnaaaaaaaabbXTcbQcbPcbPcbPcbUaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaabaaaaaaaaaaabaabcacaabaabaabaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabbXnaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaabaabaabaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaabaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaabaabaabaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZaabaabcbZaabaabaabcbZaabaabaabaabaabcbZaabaabaabcbZaabaabcbZaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZaabaabaabcbZcbZcbZcbZcbZcbZcbZaabaabaabcbZcbZcbZcbZaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabcbZcbZcbZcbZaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbZcbZcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabcbZcbZcbZcbZcbZcbZcbZaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-4.dmm b/maps/Aurora-MapDev/aurora-4.dmm
new file mode 100644
index 00000000000..7ccc532bcef
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-4.dmm
@@ -0,0 +1,376 @@
+"aa" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored)
+"ab" = (/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ac" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"ad" = (/turf/simulated/wall/r_wall,/area/mine/unexplored)
+"ae" = (/turf/simulated/wall/r_wall,/area/maintenance/research_port)
+"af" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/cable{icon_state = "11-2"},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/research_port)
+"ag" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ah" = (/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/up/supply,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ai" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ak" = (/turf/simulated/floor/plating,/area/maintenance/research_port)
+"al" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"am" = (/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"an" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ao" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ap" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/plating,/area/maintenance/research_port)
+"aq" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"ar" = (/turf/simulated/wall/r_wall,/area/maintenance/arrivals)
+"as" = (/turf/simulated/open,/area/turbolift/main_mid)
+"at" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"au" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"av" = (/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aw" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"ax" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"ay" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"az" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aC" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aD" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aE" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button{command = "cycle_interior";master_tag = "fuckyou1";name = "interior access button";pixel_x = 32;pixel_y = -26},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aG" = (/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aH" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/arrivals)
+"aI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou1_inner";locked = 1},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aQ" = (/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "fuckyou1";pixel_x = -32;tag_airpump = "fuckyou1_pump";tag_chamber_sensor = "fuckyou1_sensor";tag_exterior_door = "fuckyou1_outer";tag_interior_door = "fuckyou1_inner"},/obj/machinery/airlock_sensor{id_tag = "fuckyou1_sensor";pixel_x = 32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;id_tag = "fuckyou1_pump"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aR" = (/obj/machinery/access_button{command = "cycle_exterior";master_tag = "fuckyou2";name = "exterior access button";pixel_x = -32;pixel_y = -26},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aT" = (/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou1_outer";locked = 1},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"aU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aV" = (/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou2_outer";locked = 1},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aX" = (/obj/machinery/access_button{command = "cycle_exterior";master_tag = "fuckyou1";name = "exterior access button";pixel_x = -32;pixel_y = 26},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"aY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"aZ" = (/obj/effect/decal/warning_stripes,/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "fuckyou2";pixel_x = -32;tag_airpump = "fuckyou2_pump";tag_chamber_sensor = "fuckyou2_sensor";tag_exterior_door = "fuckyou2_outer";tag_interior_door = "fuckyou2_inner"},/obj/machinery/airlock_sensor{id_tag = "fuckyou2_sensor";pixel_x = 32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;id_tag = "fuckyou2_pump"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"ba" = (/turf/simulated/wall/r_wall,/area/maintenance/maintcentral)
+"bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bd" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou2_inner";locked = 1},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"be" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bg" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bh" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bi" = (/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/access_button{command = "cycle_interior";master_tag = "fuckyou2";name = "interior access button";pixel_x = 32;pixel_y = 26},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bk" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bl" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bm" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bn" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bo" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bq" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"br" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bs" = (/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bt" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bu" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bv" = (/obj/effect/floor_decal/corner/yellow,/obj/machinery/light,/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bw" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/maintcentral)
+"bx" = (/turf/simulated/wall/r_wall,/area/maintenance/library)
+"by" = (/turf/simulated/open,/area/turbolift/command_mid)
+"bz" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bA" = (/obj/machinery/light/small/emergency{dir = 1},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bB" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bC" = (/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 4},/obj/structure/cable/green{icon_state = "12-0"},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
+"bE" = (/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 8},/obj/structure/cable/green{icon_state = "11-8"},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/maintcentral)
+"bF" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/door/window/southleft,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bG" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/door/window/southleft,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bH" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/door/window/southleft,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bI" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"bJ" = (/turf/simulated/open,/area/turbolift/cargo_mid)
+"bK" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bL" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/maintenance/library)
+"bM" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bN" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/library)
+"bO" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/library)
+"bP" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/library)
+"bQ" = (/turf/simulated/floor/tiled,/area/maintenance/library)
+"bR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bS" = (/obj/machinery/access_button{command = "cycle_interior";master_tag = "fuckyou3";name = "interior access button";pixel_x = 32;pixel_y = -26},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/library)
+"bT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou3_inner";locked = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"bU" = (/obj/effect/decal/warning_stripes,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{id_tag = "fuckyou3";pixel_x = 0;pixel_y = -32;tag_airpump = "fuckyou3_pump";tag_chamber_sensor = "fuckyou3_sensor";tag_exterior_door = "fuckyou3_outer";tag_interior_door = "fuckyou3_inner"},/obj/machinery/airlock_sensor{id_tag = "fuckyou3_sensor";pixel_x = 0;pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;id_tag = "fuckyou3_pump"},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/maintenance/library)
+"bV" = (/obj/machinery/door/airlock/external{icon_state = "door_locked";id_tag = "fuckyou3_outer";locked = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"bW" = (/obj/machinery/access_button{command = "cycle_exterior";master_tag = "fuckyou3";name = "exterior access button";pixel_x = -32;pixel_y = 26},/turf/simulated/floor/asteroid,/area/mine/unexplored)
+"bX" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"bY" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"bZ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/maintenance/library)
+"ca" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/library)
+"cb" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/maintenance/library)
+"cc" = (/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/maintenance/library)
+"cd" = (/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/maintenance/library)
+"ce" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/maintenance/library)
+"cf" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/maintenance/library)
+"cg" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/library)
+"ch" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/library)
+"ci" = (/turf/simulated/floor/plating,/area/maintenance/library)
+"cj" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/library)
+"ck" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/library)
+"cl" = (/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 4},/obj/structure/disposalpipe/up{icon_state = "pipe-u";dir = 4},/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"cm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small/emergency,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
+"cn" = (/obj/structure/disposalpipe/down{icon_state = "pipe-d";dir = 8},/obj/structure/cable{icon_state = "11-8"},/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 8},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 8},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/library)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababadaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacabababadaaaaaaaaaaaaaaaaaaadaaaaababababacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacababababaaaaaaaaaaadaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacababaaaaaaaaaaadadadaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaadaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababadaaaaaaaaaaaaaaaaaaadaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacabaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacababababababaaadaaaaaaadaaababababacababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababacaaababababacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacababababababaaaaaaabacababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeafagahaiaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeajakalamaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeanaoapaqaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaadaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadarararararararararadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadarasasasasasasasaradaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasasasasasasasaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadarararararararararadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaratauavavavawaxaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarayazaAaBavavaCaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaraDaEavaFavaGaHaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaraIaJaKaLaMaNaOaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaPaQaPabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaRabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaSaTaSababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaUaVaWababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaXababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaYaZaYababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbbcbdbebfbabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababgbhbibjbibkblbabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababmbnbobpbibibqbrbsbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababtbubibibibvbwbababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbybybybybybxbxbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbybybybybybxaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaaaabxaabababababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbsbsbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababzbAbBbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababCbDbEbabsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababrbababsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababsbsbsbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaabxaaaabxaabxbxbxbxbxabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbFbGbHbIabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxbKbLbMbNbObPababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbJbJbJbJbJbJbxbQbRbSbTbUbVbWababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxbQbQbQbXbYbZababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxbQbQbQcaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbJbJbJbJbJbJbxbQbQbQcaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbJbJbJbJbJbJbxcbbQcccaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxcdcecfcgababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxaabxaaaabxaabxbxchbxbxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcibxbxbxbxbxbxbxbxbxbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcicicicicicicicicicibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbxchbxbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcjcickbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxcicicibxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxclcmcnbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-5.dmm b/maps/Aurora-MapDev/aurora-5.dmm
new file mode 100644
index 00000000000..c04ba79912c
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-5.dmm
@@ -0,0 +1,1978 @@
+"aa" = (/turf/unsimulated/chasm_mask,/area/space)
+"ab" = (/turf/simulated/wall,/area/space)
+"ac" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/space)
+"ad" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/fore)
+"ae" = (/obj/structure/sign/electricshock,/turf/simulated/wall,/area/space)
+"af" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/fore)
+"ag" = (/turf/simulated/mineral/random,/area/space)
+"ah" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/fore)
+"ai" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Fore Solar Array"},/turf/unsimulated/chasm_mask,/area/solar/fore)
+"aj" = (/obj/machinery/power/solar{id = "auxsolarnorth";name = "Fore Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore)
+"ak" = (/turf/simulated/floor/airless,/area/solar/fore)
+"al" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/fore)
+"am" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/fore)
+"an" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/fore)
+"ao" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/fore)
+"ap" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/fore)
+"aq" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/fore)
+"ar" = (/obj/machinery/power/solar{id = "auxsolarnorth";name = "Fore Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore)
+"as" = (/obj/machinery/power/solar{id = "auxsolarnorth";name = "Fore Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/fore)
+"at" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/fore)
+"au" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "solar_tool_airlock";name = "exterior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/fore)
+"av" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aw" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_tool_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"ay" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "solar_tool_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_tool_pump";tag_exterior_door = "solar_tool_outer";frequency = 1379;id_tag = "solar_tool_airlock";tag_interior_door = "solar_tool_inner";pixel_x = 25;req_access = list(13);tag_chamber_sensor = "solar_tool_sensor"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"az" = (/turf/simulated/floor/asteroid,/area/shuttle/arrival/station)
+"aA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aC" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_tool_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aF" = (/turf/simulated/wall/r_wall,/area/maintenance/foresolar)
+"aG" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/machinery/power/solar_control{id = "auxsolarnorth";name = "Fore Solar Control";track = 0},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aH" = (/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/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aI" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_tool_airlock";name = "interior access button";pixel_x = 25;pixel_y = 25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aJ" = (/obj/item/weapon/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aK" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aL" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/binary/pump/on{dir = 1;target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aM" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Fore Solar Maintenance";dir = 1},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aN" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Fore Port"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aO" = (/obj/effect/decal/cleanable/dirt,/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/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aP" = (/turf/simulated/wall/r_wall,/area/maintenance/solarmaint)
+"aQ" = (/obj/machinery/door/airlock/engineering{name = "Gamma Solar Array"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"aR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"aS" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"aT" = (/obj/machinery/light/small{dir = 4;pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"aU" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"aV" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"aW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"aX" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_west_outer";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "arrivals_west";name = "exterior access button";pixel_x = 30;pixel_y = 4;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"aY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"aZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"ba" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_east_outer";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "arrivals_east";name = "exterior access button";pixel_x = -30;pixel_y = 4;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bc" = (/turf/unsimulated/chasm_mask,/area/mine/unexplored)
+"bd" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"be" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "arrivals_west_sensor";pixel_x = -30;pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bf" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "arrivals_east_sensor";pixel_x = 30;pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bg" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomsat)
+"bh" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer)
+"bi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bj" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "arrivals_west";master_tag = "arrival_dock";pixel_x = -30;pixel_y = 0;req_one_access = list(13);tag_airlock_mech_sensor = null;tag_airpump = "arrivals_west_pump";tag_chamber_sensor = "arrivals_west_sensor";tag_exterior_door = "arrivals_west_outer";tag_interior_door = "arrivals_west_inner";tag_shuttle_mech_sensor = null},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1380;id_tag = "arrivals_west_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bk" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bn" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "arrivals_east";master_tag = "arrival_dock";pixel_x = 30;pixel_y = 0;req_one_access = list(13);tag_airlock_mech_sensor = null;tag_airpump = "arrivals_east_pump";tag_chamber_sensor = "arrivals_east_sensor";tag_exterior_door = "arrivals_east_outer";tag_interior_door = "arrivals_east_inner";tag_shuttle_mech_sensor = null},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1380;id_tag = "arrivals_east_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bp" = (/obj/machinery/status_display/arrivals_display,/turf/simulated/wall,/area/hallway/secondary/entry/fore)
+"bq" = (/turf/simulated/wall,/area/hallway/secondary/entry/fore)
+"br" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bs" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_west_inner";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bu" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bv" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Blue Dock Fore"},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bw" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bx" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_east_inner";locked = 1;name = "Arrivals Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"by" = (/turf/simulated/open,/area/turret_protected/tcomsat)
+"bz" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Wing Fore"},/turf/simulated/open,/area/turret_protected/tcomsat)
+"bA" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"bB" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6;icon_state = "intact"},/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"bC" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"bD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1;icon_state = "map"},/obj/machinery/meter,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"bE" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"bF" = (/turf/simulated/floor/plating,/area/tcommsat/computer)
+"bG" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"bH" = (/obj/machinery/light{dir = 1},/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"bI" = (/obj/structure/table/reinforced,/obj/item/stack/material/phoron{amount = 10},/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"bJ" = (/obj/structure/table/reinforced,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/glasses/meson,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"bK" = (/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"bL" = (/obj/machinery/power/port_gen/pacman,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"bM" = (/turf/simulated/floor/asteroid,/area/shuttle/administration/station)
+"bN" = (/obj/effect/landmark{name = "carpspawn"},/turf/unsimulated/chasm_mask,/area/space)
+"bO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"bP" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two";child_tags_txt = "arrivals_west;arrivals_east";frequency = 1380;id_tag = "arrival_dock";pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bQ" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bR" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "arrivals_west";name = "interior access button";pixel_x = 30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bS" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bT" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bU" = (/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "arrivals_east";name = "interior access button";pixel_x = -30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bV" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"bW" = (/turf/simulated/floor/asteroid,/area/shuttle/escape/station)
+"bX" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/open,/area/turret_protected/tcomsat)
+"bY" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"ca" = (/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cb" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5;icon_state = "intact"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cc" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cd" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat)
+"ce" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cf" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cg" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Computer Room"},/obj/item/weapon/pen/blue{pixel_x = -3;pixel_y = 2},/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"ch" = (/obj/structure/ladder/up{pixel_y = 16},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"ci" = (/obj/machinery/computer/telecomms/traffic,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cj" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"ck" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/plating,/area/tcommsat/computer)
+"cl" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_x = -29;pixel_y = 0},/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 50},/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"cm" = (/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"co" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cp" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cq" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cr" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cs" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ct" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cv" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cw" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cx" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cy" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cz" = (/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cA" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cB" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cC" = (/obj/machinery/computer/telecomms/monitor{network = "tcommsat"},/obj/item/device/radio/intercom{name = "General Listening Channel";pixel_x = 28;pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cE" = (/obj/machinery/light{dir = 8},/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"cF" = (/obj/machinery/autolathe,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"cG" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cH" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cI" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cJ" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"cK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat)
+"cL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat)
+"cM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"cN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat)
+"cO" = (/obj/structure/window/reinforced,/turf/simulated/open,/area/turret_protected/tcomsat)
+"cP" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/computer)
+"cQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cS" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cT" = (/obj/machinery/computer/telecomms/server{network = "tcommsat"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cU" = (/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh{name = "Cuban Pete-Meat"},/obj/item/weapon/spacecash/c1,/turf/simulated/floor/plating,/area/tcommsat/computer)
+"cV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/table/reinforced,/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/item/stack/material/steel{amount = 50;pixel_x = 0;pixel_y = 0},/obj/random/tech_supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"cW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"cZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"da" = (/obj/machinery/light{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Blue Dock Port";dir = 4},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"db" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dd" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Blue Dock Starboard";dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"de" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"df" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"dg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"dh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"di" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/tcommsat/computer)
+"dj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"dk" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dm" = (/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dn" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"do" = (/obj/structure/table/reinforced,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/powercell,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"dp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"dq" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"dr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ds" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dt" = (/obj/structure/bed/chair{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"du" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port)
+"dv" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port)
+"dw" = (/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/port)
+"dx" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"dy" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat)
+"dz" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/light,/turf/simulated/open,/area/turret_protected/tcomsat)
+"dA" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat)
+"dB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/blue{icon_state = "12-0"},/obj/machinery/atmospherics/pipe/zpipe/up/supply{icon_state = "up-supply";dir = 1},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{icon_state = "up-scrubbers";dir = 1},/obj/structure/cable/blue,/turf/simulated/open,/area/turret_protected/tcomsat)
+"dC" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dD" = (/obj/machinery/atmospherics/unary/freezer{dir = 2;icon_state = "freezer_1";set_temperature = 73;use_power = 1},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dE" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dF" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381;icon_state = "door_locked";id_tag = "server_access_outer";locked = 1;name = "Telecoms Server Access";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/airlock_sensor/airlock_exterior{frequency = 1381;id_tag = "server_access_ex_sensor";master_tag = "server_access_airlock";pixel_x = 25;pixel_y = 22},/turf/simulated/floor/tiled,/area/tcommsat/computer)
+"dH" = (/obj/machinery/airlock_sensor{frequency = 1381;id_tag = "server_access_sensor";pixel_x = 12;pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1381;id_tag = "server_access_pump"},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{frequency = 1381;id_tag = "server_access_airlock";name = "Server Access Airlock";pixel_x = 0;pixel_y = 25;tag_airpump = "server_access_pump";tag_chamber_sensor = "server_access_sensor";tag_exterior_door = "server_access_outer";tag_exterior_sensor = "server_access_ex_sensor";tag_interior_door = "server_access_inner";tag_interior_sensor = "server_access_in_sensor";tag_secure = 1},/turf/simulated/floor/plating,/area/tcommsat/computer)
+"dI" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/computer)
+"dJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage";req_access = list(61)},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/tcommsat/computer)
+"dK" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dL" = (/obj/structure/bed/chair,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dM" = (/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port)
+"dN" = (/obj/machinery/porta_turret/stationary,/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"dO" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
+"dP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber)
+"dQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/black,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber)
+"dR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber)
+"dS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber)
+"dT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/chamber)
+"dU" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381;icon_state = "door_locked";id_tag = "server_access_inner";locked = 1;name = "Telecoms Server Access";req_access = list(61)},/turf/simulated/floor/tiled/dark,/area/tcommsat/computer)
+"dV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"dW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"dX" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dY" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"dZ" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/light,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ea" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ec" = (/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ed" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ee" = (/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ef" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"eg" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"eh" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"ei" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"ej" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"el" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Central Compartment Fore"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"em" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381;id_tag = "server_access_in_sensor";master_tag = "server_access_airlock";name = "interior sensor";pixel_x = 8;pixel_y = 25},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"en" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"eo" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381;id_tag = "server_access_in_sensor";name = "interior sensor";pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"ep" = (/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"eq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'.";name = "SERVER ROOM";pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"er" = (/turf/simulated/wall,/area/hallway/secondary/entry/port)
+"es" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"et" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"eu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"ev" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"ew" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"ex" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"ey" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ez" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"eA" = (/turf/simulated/wall,/area/hallway/secondary/exit)
+"eB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"eC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"eD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"eE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"eF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"eG" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"eH" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"eI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"eJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"eK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"eL" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"eM" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"eN" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"eO" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Yellow Dock Fore"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"eP" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"eQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"eR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"eS" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"eT" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"eU" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Red Dock Fore"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"eV" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"eW" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two";child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock";frequency = 1380;id_tag = "escape_dock";pixel_x = 25;pixel_y = 0;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"eX" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Solar Array";dir = 4},/turf/unsimulated/chasm_mask,/area/solar/port)
+"eY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"eZ" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar)
+"fa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"fb" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fc" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"fd" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"fe" = (/obj/machinery/telecomms/server/presets/unused,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"ff" = (/obj/machinery/telecomms/broadcaster/preset_right,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"fg" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"fh" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"fi" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"fk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fl" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"fm" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Storage"},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"fn" = (/obj/structure/table/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"fo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"fp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"fq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"fr" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"fs" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"ft" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"fu" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"fv" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"fw" = (/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"fx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"fy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"fz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"fA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"fB" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"fC" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"fD" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"fE" = (/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"fF" = (/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"fG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"fH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"fI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"fJ" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/port)
+"fK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"fL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"fM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"fN" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"fO" = (/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/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"fP" = (/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Fore"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"fQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"fR" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Wing Central";dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fS" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"fT" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"fV" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat)
+"fW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"fX" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"fY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"fZ" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"ga" = (/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "admin_shuttle_dock_sensor";pixel_x = 0;pixel_y = 26},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gb" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock";name = "exterior access button";pixel_x = -6;pixel_y = -28;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gc" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gd" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "admin_shuttle_dock_airlock";pixel_x = 0;pixel_y = 26;req_one_access = list(13);tag_airpump = "admin_shuttle_dock_pump";tag_chamber_sensor = "admin_shuttle_dock_sensor";tag_exterior_door = "admin_shuttle_dock_outer";tag_interior_door = "admin_shuttle_dock_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "admin_shuttle_dock_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"ge" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock";name = "interior access button";pixel_x = -30;pixel_y = 26;req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"gf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"gg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gh" = (/obj/machinery/door/airlock/glass{name = "Blue Dock"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"gi" = (/obj/machinery/door/airlock/glass{name = "Blue Dock"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"gj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"gk" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"gl" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_north_inner";locked = 1;name = "Escape Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"gm" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "escape_dock_north_airlock";name = "interior access button";pixel_x = 30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"gn" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "escape_dock_north_sensor";pixel_x = 0;pixel_y = -25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"go" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "escape_dock_north_airlock";master_tag = "escape_dock";pixel_y = 30;req_one_access = list(13);tag_airlock_mech_sensor = "escape_dock_north_mech";tag_airpump = "escape_dock_north_pump";tag_chamber_sensor = "escape_dock_north_sensor";tag_exterior_door = "escape_dock_north_outer";tag_interior_door = "escape_dock_north_inner";tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "escape_dock_north_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"gp" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_north_outer";locked = 1;name = "Escape Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "escape_dock_north_airlock";name = "exterior access button";pixel_x = 4;pixel_y = -26;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"gq" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port)
+"gr" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port)
+"gs" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/port)
+"gt" = (/turf/simulated/floor/airless,/area/solar/port)
+"gu" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port)
+"gv" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "brig_solar_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gw" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "brig_solar_airlock";name = "exterior access button";pixel_x = 25;pixel_y = -25;req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/port)
+"gx" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "brig_solar_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gy" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "brig_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "brig_solar_airlock";layer = 3.3;pixel_x = 0;pixel_y = -25;req_access = list(13);tag_airpump = "brig_solar_pump";tag_chamber_sensor = "brig_solar_sensor";tag_exterior_door = "brig_solar_outer";tag_interior_door = "brig_solar_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "brig_solar_sensor";layer = 3.3;pixel_x = 12;pixel_y = -25},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gz" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/binary/pump/on{dir = 8;target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gA" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "civilian_eva_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gB" = (/obj/machinery/door/airlock/engineering{name = "Beta Solar Array"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gC" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"gD" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"gE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"gF" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"gG" = (/obj/structure/sign/nosmoking_2{pixel_x = -32;pixel_y = 0},/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"gH" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"gI" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"gJ" = (/obj/machinery/telecomms/relay/preset/telecomms,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"gK" = (/obj/machinery/telecomms/hub/preset,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"gL" = (/obj/machinery/telecomms/relay/preset/station,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"gM" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"gN" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"gO" = (/obj/structure/sign/nosmoking_2{pixel_x = 32;pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"gP" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"gQ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 7},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"gR" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"gS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"gT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"gU" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_x = 29;pixel_y = 0},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"gV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"gY" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"gZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"ha" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"hb" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"hc" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hd" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"he" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hf" = (/obj/item/device/radio/intercom{pixel_y = 27},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Fore"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hg" = (/obj/structure/closet/emcloset,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hh" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"hi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"hj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"hk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"hl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"hm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"hn" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/port)
+"ho" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"hp" = (/obj/machinery/power/solar_control{id = "auxsolarnorth";name = "Fore Solar Control";track = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"hq" = (/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"hr" = (/obj/structure/cable,/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Aft Solar Maintenance";dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"hs" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ht" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"hu" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"hv" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"hw" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"hx" = (/obj/machinery/bluespacerelay,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"hy" = (/obj/machinery/telecomms/processor/preset_three,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"hz" = (/obj/machinery/telecomms/bus/preset_three,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"hA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"hB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"hC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat)
+"hD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"hE" = (/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"hF" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"hG" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"hH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"hI" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"hJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"hK" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"hL" = (/obj/machinery/door/airlock/glass{name = "Yellow Dock"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"hM" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 5},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hN" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hO" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hP" = (/obj/effect/floor_decal/ss13/l1,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hQ" = (/obj/effect/floor_decal/ss13/l3,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hR" = (/obj/effect/floor_decal/ss13/l5,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/ss13/l7,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hT" = (/obj/effect/floor_decal/ss13/l9,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hU" = (/obj/effect/floor_decal/ss13/l11,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hV" = (/obj/effect/floor_decal/ss13/l13,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hW" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hX" = (/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"hY" = (/obj/machinery/door/airlock/glass{name = "Red Dock"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"hZ" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"ia" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"ib" = (/obj/machinery/door/firedoor{dir = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"ic" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port)
+"id" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port)
+"ie" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"if" = (/obj/machinery/telecomms/receiver/preset_right,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"ig" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"ih" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"ii" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"ij" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"ik" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor/tiled,/area/turret_protected/tcomsat)
+"il" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"im" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"in" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"io" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"ip" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"iq" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"ir" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"is" = (/obj/machinery/door/airlock/glass{name = "Yellow Dock"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"it" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"iu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l2,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l6,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l4,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l10,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l8,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l14,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/ss13/l12,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iF" = (/obj/machinery/door/airlock/glass{name = "Red Dock"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"iH" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iJ" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iK" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iL" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iM" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iN" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iO" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"iP" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iQ" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iR" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 6},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iS" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iT" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 5},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iU" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iV" = (/obj/machinery/telecomms/server/presets/command,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iW" = (/obj/machinery/telecomms/server/presets/security,/turf/simulated/floor/tiled/dark,/area/tcommsat/chamber)
+"iX" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"iY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"iZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"ja" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/eastright,/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jb" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4;icon_state = "map"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jd" = (/obj/machinery/door/airlock/glass{name = "Yellow Dock"},/obj/machinery/door/firedoor,/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"je" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jg" = (/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ji" = (/obj/machinery/light,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jk" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jl" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"jm" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"jn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1;external_pressure_bound = 140;external_pressure_bound_default = 140;icon_state = "map_vent_out";use_power = 1;pressure_checks = 0;pressure_checks_default = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"jo" = (/obj/machinery/light,/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Central Compartment Aft";dir = 1},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"jp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1;external_pressure_bound = 0;external_pressure_bound_default = 0;icon_state = "map_vent_in";initialize_directions = 1;internal_pressure_bound = 4000;internal_pressure_bound_default = 4000;use_power = 1;pressure_checks = 2;pressure_checks_default = 2;pump_direction = 0},/turf/simulated/floor/bluegrid{name = "Mainframe Base";nitrogen = 100;oxygen = 0;temperature = 80},/area/tcommsat/chamber)
+"jq" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"jr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"js" = (/obj/item/device/radio/intercom{pixel_x = 32},/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jt" = (/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ju" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"jw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/wall,/area/security/checkpoint2)
+"jx" = (/turf/simulated/wall,/area/security/checkpoint2)
+"jy" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint";req_access = list(1)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"jz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"jA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"jB" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jC" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jD" = (/obj/machinery/light{dir = 8},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"jE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"jF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"jG" = (/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
+"jH" = (/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "admin_shuttle_dock_sensor-s";pixel_x = 0;pixel_y = -26},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"jI" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_outer-s";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock-s";name = "exterior access button";pixel_x = -6;pixel_y = 28;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"jJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "admin_shuttle_dock_inner-s";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"jK" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "admin_shuttle_dock_airlock-s";pixel_x = 0;pixel_y = -26;req_one_access = list(13);tag_airpump = "admin_shuttle_dock_pump-s";tag_chamber_sensor = "admin_shuttle_dock_sensor-s";tag_exterior_door = "admin_shuttle_dock_outer-s";tag_interior_door = "admin_shuttle_dock_inner-s"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1380;id_tag = "admin_shuttle_dock_pump-s"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"jL" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "admin_shuttle_dock_airlock-s";name = "interior access button";pixel_x = -30;pixel_y = -26;req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jM" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jN" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"jO" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint1";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jP" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint1";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jQ" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/obj/machinery/button/remote/blast_door{id = "seccheckpointup";name = "Watchpost Lockdown";pixel_x = 5;pixel_y = 32},/obj/machinery/light_switch{pixel_x = -8;pixel_y = 32},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"jR" = (/obj/structure/closet/wardrobe/red,/obj/structure/reagent_dispensers/peppertank{pixel_x = -30;pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"jS" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"jT" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"jU" = (/obj/structure/closet/wardrobe/red,/obj/machinery/requests_console{department = "Security";departmentType = 5;pixel_x = 30;pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"jV" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint3";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"jW" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"jX" = (/obj/machinery/atmospherics/pipe/simple/hidden{icon_state = "intact";dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_south_inner";locked = 1;name = "Escape Airlock";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"jY" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 6},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "escape_dock_south_inner";name = "interior access button";pixel_x = 30;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"jZ" = (/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "escape_dock_south_sensor";pixel_x = 0;pixel_y = 25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"ka" = (/obj/machinery/light/small{dir = 1},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380;id_tag = "escape_dock_south_airlock";master_tag = "escape_dock";pixel_y = -30;req_one_access = list(13);tag_airlock_mech_sensor = "escape_dock_south_mech";tag_airpump = "escape_dock_south_pump";tag_chamber_sensor = "escape_dock_south_sensor";tag_exterior_door = "escape_dock_south_outer";tag_interior_door = "escape_dock_south_inner";tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"kb" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_dock_south_outer";locked = 1;name = "Escape Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "escape_dock_south_airlock";name = "exterior access button";pixel_x = 4;pixel_y = 26;req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"kc" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/airless,/area/solar/port)
+"kd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/open,/area/turret_protected/tcomsat)
+"ke" = (/obj/structure/window/reinforced,/obj/machinery/light{dir = 1},/turf/simulated/open,/area/turret_protected/tcomsat)
+"kf" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer)
+"kg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"kh" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"ki" = (/obj/machinery/porta_turret{dir = 6},/obj/effect/decal/warning_stripes,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomfoyer)
+"kj" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Foyer"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/turretid/lethal{ailock = 1;check_synth = 1;control_area = "\improper Telecoms Satellite";desc = "A firewall prevents AIs from interacting with this device.";name = "Telecoms lethal turret control";pixel_y = 29;req_access = list(61)},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"kk" = (/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"kl" = (/obj/machinery/porta_turret{dir = 10},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/turret_protected/tcomfoyer)
+"km" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = 32;pixel_y = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"kn" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/open,/area/turret_protected/tcomsat)
+"ko" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"kp" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/yellow{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"kq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"kr" = (/obj/machinery/light{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Incoming";dir = 4},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ks" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"kt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"ku" = (/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kv" = (/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kx" = (/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"ky" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"kz" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Outgoing";dir = 8},/obj/effect/floor_decal/corner/lime/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"kA" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"kB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"kC" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 5},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"kD" = (/obj/machinery/door/airlock/hatch{name = "Telecoms West Wing";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomfoyer)
+"kE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"kF" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"kG" = (/obj/machinery/door/airlock/hatch{name = "Telecoms East Wing";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomfoyer)
+"kH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/turret_protected/tcomsat)
+"kI" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Starboard Wing Aft";dir = 8},/turf/simulated/open,/area/turret_protected/tcomsat)
+"kJ" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"kK" = (/obj/effect/floor_decal/corner/yellow/full,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock North;Airlock South";child_tags_txt = "admin_shuttle_dock_airlock;admin_shuttle_dock_airlock-s";frequency = 1380;id_tag = "admin_shuttle_dock_airlock";pixel_x = -25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"kL" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/yellow/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"kM" = (/obj/machinery/light,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Yellow Dock Aft";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"kN" = (/obj/effect/floor_decal/corner/yellow/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/port)
+"kO" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"kP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"kQ" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "seccheckpoint1";name = "Portside Arrivals Processing";pixel_x = -5;pixel_y = -2},/obj/machinery/button/remote/blast_door{id = "seccheckpoint2";name = "Portside Departures Processing";pixel_x = 5;pixel_y = -2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kR" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{dir = 8},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Processing";dir = 4;pixel_y = -22},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kT" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "seccheckpoint3";name = "Starboardside Arrivals Processing";pixel_x = -5;pixel_y = -2},/obj/machinery/button/remote/blast_door{id = "seccheckpoint4";name = "Starboardside Departures Processing";pixel_x = 5;pixel_y = -2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kU" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"kV" = (/obj/item/device/radio/intercom{pixel_x = 32},/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"kW" = (/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"kX" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"kY" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"kZ" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Red Dock Aft";dir = 1},/obj/effect/floor_decal/corner/red{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"la" = (/obj/effect/floor_decal/corner/red/full{icon_state = "corner_white_full";dir = 4},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/exit)
+"lb" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Port Wing Aft";dir = 4},/turf/simulated/open,/area/turret_protected/tcomsat)
+"lc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!";name = "LETHAL TURRETS";pixel_x = -32;pixel_y = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"ld" = (/obj/machinery/light/small/emergency,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"le" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"lh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
+"li" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lj" = (/obj/machinery/door/window/brigdoor/eastleft{req_access = list(63)},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lk" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"ll" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"ln" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lo" = (/obj/machinery/door/window/brigdoor/westright{req_access = list(63)},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lp" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1;pixel_y = 9},/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lq" = (/obj/effect/floor_decal/corner/lime/full{dir = 4},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lr" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"ls" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint2";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lt" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint2";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lu" = (/obj/machinery/computer/secure_data,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lv" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lx" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"ly" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/effect/floor_decal/corner/blue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lz" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpoint4";name = "Checkpoint Lockdown";opacity = 0},/obj/machinery/door/firedoor,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/turret_protected/tcomfoyer)
+"lB" = (/obj/machinery/power/smes/buildable{charge = 5e+006;input_attempt = 1;input_level = 200000;output_attempt = 1;output_level = 200000},/obj/structure/cable/blue{icon_state = "0-4"},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lC" = (/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Station Intercom (General)";pixel_y = 20},/obj/effect/decal/cleanable/cobweb,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lD" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer)
+"lE" = (/obj/machinery/turretid/stun{ailock = 1;check_synth = 1;control_area = "\improper Telecoms Foyer";desc = "A firewall prevents AIs from interacting with this device.";name = "Telecoms Foyer turret control";pixel_y = 29;req_access = list(61)},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lG" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/turret_protected/tcomfoyer)
+"lH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
+"lI" = (/obj/machinery/computer/power_monitor{name = "telecoms power monitoring"},/obj/machinery/power/sensor{long_range = 1;name = "Powernet Sensor - Telecommunications Grid";name_tag = "Telecommunications Grid"},/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"lK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lL" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"lN" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint";req_access = list(1)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/checkpoint2)
+"lO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "seccheckpointoffice";name = "Checkpoint Lockdown";opacity = 0},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"lP" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lQ" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lR" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lS" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lT" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lU" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small/emergency{dir = 1},/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Power Room Port"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lV" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lW" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Power Room Starboard"},/obj/machinery/light/small/emergency{dir = 1},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lX" = (/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/turret_protected/tcomfoyer)
+"lY" = (/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"lZ" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ma" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/blue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mb" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/tcommsat/entrance)
+"mc" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/hatch{name = "Telecoms Satellite";req_access = list(61)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"md" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"me" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/plaque,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mf" = (/turf/simulated/wall/r_wall,/area/tcommsat/entrance)
+"mg" = (/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mh" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mi" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Lobby Fore"},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mj" = (/obj/effect/floor_decal/corner/lime/full,/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mk" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ml" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/lime{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/lime,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mo" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/status_display{pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mq" = (/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers,/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/cable{icon_state = "11-2"},/obj/structure/lattice,/turf/simulated/open,/area/tcommsat/entrance)
+"mr" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"ms" = (/obj/structure/closet/emcloset,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mt" = (/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Arrivals Terminal Aft";dir = 1},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mv" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mw" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mx" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"my" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mz" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mA" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mB" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mC" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mD" = (/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mE" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mF" = (/obj/machinery/door/airlock/glass{name = "NSS Aurora"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mG" = (/obj/machinery/door/airlock/glass{name = "NSS Aurora"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"mH" = (/turf/unsimulated/chasm_mask,/area/shuttle/syndicate_elite/station)
+"mI" = (/obj/item/weapon/cell,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mJ" = (/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mK" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mL" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mM" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mN" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mO" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mP" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "engineering_surface_inner";locked = 1;name = "Solar Panel Hub Exterior Access";req_access = list(13)},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mQ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 6},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mR" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "engineering_surface_outer";locked = 1;name = "Solar Panel Hub Exterior Access";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mS" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "engineering_surface_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "engineering_surface_pump";tag_chamber_sensor = "engineering_surface_sensor";tag_exterior_door = "engineering_surface_outer";tag_interior_door = "engineering_surface_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "engineering_surface_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "engineering_surface_pump"},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mT" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "engineering_surface_airlock";name = "exterior access button";pixel_x = -27;pixel_y = -26;req_one_access = list(13)},/turf/unsimulated/chasm_mask,/area/space)
+"mU" = (/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"mV" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"mW" = (/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"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"mX" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mY" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"mZ" = (/obj/machinery/bluespace_beacon,/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"na" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"nb" = (/obj/machinery/light/small/emergency{dir = 8},/turf/unsimulated/chasm_mask,/area/tcommsat/entrance)
+"nc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"nd" = (/turf/simulated/mineral/random,/area/tcommsat/entrance)
+"ne" = (/turf/simulated/wall/r_wall,/area/space)
+"nf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"ng" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"nh" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/machinery/light{dir = 8},/obj/machinery/camera/network/command{c_tag = "Surface - Corridor Camera 11";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ni" = (/obj/item/device/radio/intercom{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"nj" = (/turf/simulated/wall,/area/security/vacantoffice)
+"nk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 1;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"nl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 1;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"nm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 1;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"nn" = (/obj/structure/closet/crate,/obj/item/weapon/aicard,/obj/item/device/multitool,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"no" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Lobby Aft";dir = 1},/obj/structure/closet/crate/solar,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"np" = (/obj/structure/closet/malf/suits,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"nq" = (/obj/machinery/light{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/tcommsat/entrance)
+"nr" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"ns" = (/obj/machinery/vending/coffee,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nt" = (/obj/machinery/vending/cola,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nu" = (/obj/machinery/vending/snack,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nv" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nw" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"nx" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ny" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"nz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"nA" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nB" = (/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nC" = (/obj/structure/window/basic{dir = 4},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nD" = (/obj/machinery/button/remote/blast_door{id = "office_shutter";name = "Office Shutters";pixel_x = -8;pixel_y = 22},/obj/machinery/light_switch{pixel_x = -8;pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"nE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"nF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"nG" = (/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"nJ" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"nK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"nL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"nM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"nN" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nO" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nP" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nQ" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nR" = (/obj/structure/window/basic{dir = 4},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/structure/table/standard{name = "plastic table frame"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"nS" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"nT" = (/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"nU" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/toy/figure/assistant,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"nV" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/light/small{dir = 4;pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"nW" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"nX" = (/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"nY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"nZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"oa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"ob" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oc" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"od" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"oe" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"of" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"og" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Vacant Office"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"oh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"oi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"oj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"ok" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"ol" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"om" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Vacant Office 2";dir = 8},/obj/machinery/light{dir = 4;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"on" = (/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar)
+"oo" = (/obj/machinery/door/airlock/engineering{name = "Alpha Solar Array"},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"op" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oq" = (/obj/structure/bed/chair/comfy/beige,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"or" = (/obj/structure/bed/chair/comfy/beige,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Waiting Room";dir = 8},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"os" = (/obj/machinery/newscaster{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ot" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"ou" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"ov" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"ow" = (/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"ox" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oy" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oA" = (/obj/structure/table/woodentable,/obj/random/single{icon = 'icons/obj/items.dmi';icon_state = "lighter-g";name = "randomly spawned lighter";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/flame/lighter},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oB" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oC" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/obj/random/single{icon = 'icons/obj/drinks.dmi';icon_state = "cola";name = "randomly spawned cola";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/reagent_containers/food/drinks/cans/cola},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oD" = (/obj/structure/table/woodentable,/obj/random/single{icon = 'icons/obj/playing_cards.dmi';icon_state = "deck";name = "randomly spawned deck of cards";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/deck},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"oF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{dir = 8;id = "office_shutter";layer = 3.1;name = "Office Shutters"},/turf/simulated/floor/plating,/area/security/vacantoffice)
+"oG" = (/obj/item/weapon/folder/yellow,/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"oH" = (/obj/machinery/firealarm{dir = 2;pixel_y = -24},/obj/machinery/light,/obj/machinery/camera/network/civilian_west{c_tag = "Surface - Vacant Office 1";dir = 1},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"oI" = (/obj/machinery/newscaster{pixel_y = -32},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/carpet,/area/security/vacantoffice)
+"oJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"oK" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/security/vacantoffice)
+"oL" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Aft Solar Maintenance";dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oM" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oN" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oO" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oP" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"oQ" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/obj/random/single{icon = 'icons/obj/items.dmi';icon_state = "lighter-g";name = "randomly spawned lighter";spawn_nothing_percentage = 50;spawn_object = /obj/item/weapon/flame/lighter},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oR" = (/obj/machinery/atm{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"oS" = (/obj/machinery/power/solar_control{id = "roofsolars";name = "Aft Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oT" = (/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},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oU" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_roof_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"oV" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oW" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oX" = (/obj/machinery/atm{pixel_y = -32},/turf/simulated/floor/lino,/area/hallway/secondary/entry/fore)
+"oY" = (/obj/structure/bed/chair/comfy/beige{dir = 1;icon_state = "comfychair_preview"},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/fore)
+"oZ" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pa" = (/turf/simulated/open,/area/turbolift/main_arrivals)
+"pb" = (/obj/structure/ladder/up{pixel_y = 16},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 5},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 10},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/space)
+"pc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pe" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"ph" = (/turf/simulated/wall,/area/storage/primary)
+"pi" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pj" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pl" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "solar_roof_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "solar_roof_pump";tag_chamber_sensor = "solar_roof_sensor";tag_exterior_door = "solar_roof_outer";tag_interior_door = "solar_roof_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "solar_roof_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "solar_roof_pump"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pm" = (/obj/machinery/vending/tool,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary)
+"pn" = (/obj/machinery/lapvend,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary)
+"po" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Primary Tool Storage Fore"},/turf/simulated/floor/tiled,/area/storage/primary)
+"pp" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"pq" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/storage/primary)
+"pr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary)
+"ps" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 10";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pu" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"pv" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/turf/simulated/floor/tiled,/area/storage/primary)
+"pw" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/primary)
+"px" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/primary)
+"py" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pz" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/primary)
+"pA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pB" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "solar_roof_airlock";name = "exterior access button";pixel_x = -25;pixel_y = 25;req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/starboard)
+"pC" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/status_display{pixel_x = -32},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"pD" = (/turf/simulated/floor/tiled,/area/storage/primary)
+"pE" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/storage/primary)
+"pF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary)
+"pG" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 10";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pH" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pI" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "arrivals_surface_airlock";name = "exterior access button";pixel_x = 27;pixel_y = -26;req_one_access = list(13)},/turf/unsimulated/chasm_mask,/area/space)
+"pJ" = (/obj/machinery/light/small/emergency,/turf/unsimulated/chasm_mask,/area/hallway/secondary/entry/fore)
+"pK" = (/obj/machinery/power/solar{id = "aftsolar";name = "Aft Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard)
+"pL" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard)
+"pM" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light_switch{pixel_x = -26},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"pN" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary)
+"pO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary)
+"pP" = (/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"pR" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_surface_outer";locked = 1;name = "Arrivals Docking Exterior Access";req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"pS" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard)
+"pT" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard)
+"pU" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/starboard)
+"pV" = (/turf/simulated/floor/airless,/area/solar/starboard)
+"pW" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/starboard)
+"pX" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard)
+"pY" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard)
+"pZ" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/device/radio/intercom{pixel_x = -32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/storage/primary)
+"qa" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/storage/primary)
+"qb" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"qc" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "arrivals_surface_airlock";pixel_x = -30;pixel_y = 0;req_one_access = list(13);tag_airpump = "arrivals_surface_pump";tag_chamber_sensor = "arrivals_surface_sensor";tag_exterior_door = "arrivals_surface_outer";tag_interior_door = "arrivals_surface_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "arrivals_surface_sensor";pixel_x = 25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2;frequency = 1379;id_tag = "rich_command_pump"},/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"qd" = (/obj/machinery/power/solar{id = "aftsolar";name = "Aft Solar Array"},/obj/structure/cable/yellow,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard)
+"qe" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/requests_console{pixel_x = -32},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"qf" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/storage/primary)
+"qg" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/tiled,/area/storage/primary)
+"qh" = (/obj/machinery/door/airlock/external,/turf/simulated/floor,/area/hallway/secondary/entry/fore)
+"qi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"qj" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "arrivals_surface_outer";locked = 1;name = "Arrivals Docking Exterior Access";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"qk" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"ql" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"qm" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/storage/primary)
+"qn" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qo" = (/obj/item/device/radio/intercom{pixel_y = 27},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qp" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qr" = (/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 9"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qs" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qt" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qu" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "arrivals_surface_airlock";name = "interior access button";pixel_x = -23;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qv" = (/turf/simulated/wall,/area/crew_quarters/sleep/cryo)
+"qw" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/primary)
+"qx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary)
+"qy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qA" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qC" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qE" = (/obj/structure/cryofeed{icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qF" = (/obj/machinery/computer/cryopod{density = 0;pixel_y = 32},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qG" = (/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qH" = (/obj/machinery/cryopod,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qI" = (/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Cryostorage"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qJ" = (/obj/structure/cryofeed,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/storage/primary)
+"qL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"qM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"qN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"qO" = (/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary)
+"qP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qR" = (/obj/machinery/atm{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qS" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"qU" = (/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qW" = (/obj/machinery/cryopod,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"qX" = (/turf/simulated/wall,/area/maintenance/arrivals)
+"qY" = (/obj/machinery/vending/assist,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/storage/primary)
+"qZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/storage/primary)
+"ra" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/machinery/light,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Primary Tool Storage Aft";dir = 1},/turf/simulated/floor/tiled,/area/storage/primary)
+"rb" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/turf/simulated/floor/tiled,/area/storage/primary)
+"rc" = (/obj/structure/table/standard,/obj/item/device/camera,/obj/item/device/camera_film,/turf/simulated/floor/tiled,/area/storage/primary)
+"rd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/storage/primary)
+"re" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"rf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"rg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"rh" = (/turf/simulated/wall,/area/hydroponics/garden)
+"ri" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"rj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"rk" = (/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rl" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rn" = (/obj/random/loot,/obj/structure/table/rack,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"ro" = (/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"rp" = (/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"rq" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/primary)
+"rr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"ru" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/hydroponics/garden)
+"rv" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rw" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rx" = (/obj/machinery/smartfridge/drying_rack,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Public Garden"},/turf/simulated/floor/grass,/area/hydroponics/garden)
+"ry" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rz" = (/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rA" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"rB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"rC" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rD" = (/obj/machinery/alarm{dir = 1;pixel_y = -25},/obj/machinery/cryopod{tag = "icon-body_scanner_0 (EAST)";icon_state = "body_scanner_0";dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rF" = (/obj/machinery/cryopod,/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -29},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rG" = (/turf/simulated/wall,/area/crew_quarters/fitness)
+"rH" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"rI" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"rJ" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"rK" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"rL" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"rM" = (/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"rN" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rO" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"rP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rQ" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rR" = (/obj/structure/flora/grass/green,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rS" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"rT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"rU" = (/obj/machinery/door/airlock/glass{name = "Garden"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"rV" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"rW" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rX" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/cryo)
+"rY" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/alphadeck)
+"rZ" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"sa" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"sb" = (/turf/simulated/wall,/area/crew_quarters/locker)
+"sc" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"sd" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"se" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"sf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"sg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"sh" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"si" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sl" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo)
+"sn" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"so" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"sp" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"sq" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"sr" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"ss" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Locker Rooms Fore"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"st" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"su" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"sv" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker)
+"sw" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"sx" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"sy" = (/obj/machinery/light{dir = 4},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"sz" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"sA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sB" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"sC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo)
+"sH" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)";icon_state = "tube1";dir = 8},/turf/unsimulated/chasm_mask,/area/crew_quarters/sleep/cryo)
+"sI" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"sJ" = (/obj/machinery/camera/network/telecom{c_tag = "Telecomms - Aft Solar Array";dir = 1},/turf/unsimulated/chasm_mask,/area/solar/port)
+"sK" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/starboard)
+"sL" = (/obj/structure/closet/wardrobe/xenos,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"sM" = (/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"sN" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker)
+"sO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"sP" = (/obj/structure/flora/ausbushes/ppflowers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"sQ" = (/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"sR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"sS" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"sT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sU" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sV" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"sW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo)
+"sX" = (/obj/structure/window/reinforced,/turf/unsimulated/chasm_mask,/area/space)
+"sY" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"sZ" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/starboard)
+"ta" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"tb" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tc" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"td" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"te" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tf" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/disposalpipe/junction{dir = 1;icon_state = "pipe-j1"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 6";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"tg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"th" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ti" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"tj" = (/obj/machinery/door/airlock/glass{name = "Garden"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"tk" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"tl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"tm" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hydroponics/garden)
+"tn" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 7";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"to" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"tp" = (/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 8";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tq" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/threedglasses,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tr" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"ts" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/silver,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tt" = (/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tu" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/cryo)
+"tv" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"tw" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"tx" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard)
+"ty" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tz" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker)
+"tB" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"tC" = (/obj/structure/flora/grass/green,/obj/machinery/light,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/grass,/area/hydroponics/garden)
+"tD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"tE" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tF" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tG" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tH" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/sleep/cryo)
+"tI" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"tJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"tK" = (/obj/structure/window/reinforced,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Holodeck";dir = 1;pixel_y = 6},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"tL" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tM" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tN" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/tape_roll,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tO" = (/obj/item/device/radio/intercom{pixel_x = 32},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"tP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"tQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"tR" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"tS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"tT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hydroponics/garden)
+"tU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"tV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"tW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"tX" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/chasm_mask,/area/space)
+"tY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/chasm_mask,/area/space)
+"tZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"ua" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/chasm_mask,/area/space)
+"ub" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"uc" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape_pod1/station)
+"ud" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station)
+"ue" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape_pod1/station)
+"uf" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape_pod2/station)
+"ug" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod2/station)
+"uh" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape_pod2/station)
+"ui" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{icon_state = "swall_c";dir = 4},/area/shuttle/escape_pod3/station)
+"uj" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/station)
+"uk" = (/turf/unsimulated/chasm_mask,/turf/simulated/shuttle/wall{dir = 3;icon_state = "swall_c";dir = 2;layer = 2},/area/shuttle/escape_pod3/station)
+"ul" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"um" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"un" = (/obj/machinery/newscaster{pixel_y = 32},/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uo" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"up" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uq" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"ur" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"us" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"ut" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 5"},/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"uu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"uv" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"uw" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"ux" = (/obj/structure/closet/wardrobe/pjs,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"uy" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/tiled,/area/crew_quarters/sleep/cryo)
+"uz" = (/turf/simulated/floor/asteroid,/area/space)
+"uA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Holodeck Control"},/obj/machinery/door/firedoor{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"uB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/simulated/wall/r_wall,/area/bridge/levela)
+"uC" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380;id_tag = "escape_pod_1";pixel_x = -25;pixel_y = 0;tag_door = "escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"uD" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape_pod1/station)
+"uE" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380;id_tag = "escape_pod_2";pixel_x = -25;pixel_y = 0;tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
+"uF" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape_pod2/station)
+"uG" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 32;pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380;id_tag = "escape_pod_3";pixel_x = -25;pixel_y = 0;tag_door = "escape_pod_3_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
+"uH" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight";dir = 1},/area/shuttle/escape_pod3/station)
+"uI" = (/obj/machinery/washing_machine,/obj/item/device/radio/intercom{pixel_x = -32},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Locker Rooms Washing";dir = 4},/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uJ" = (/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"uO" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"uP" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"uQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"uR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"uS" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"uT" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/crew_quarters/sleep/cryo)
+"uU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"uV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"uW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"uX" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"uY" = (/obj/structure/table/standard,/obj/item/weapon/paper{desc = "";info = "Brusies sustained in the holodeck can be healed simply by sleeping.";name = "Holodeck Disclaimer"},/obj/machinery/light/small{dir = 1},/obj/machinery/button/windowtint{id = "holodeckwin"},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Holodeck North";pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"uZ" = (/turf/simulated/wall/r_wall,/area/bridge/levela)
+"va" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 1";dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"vb" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 2";dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
+"vc" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/machinery/light/small/emergency{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Pod 3";dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
+"vd" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"ve" = (/turf/simulated/floor/asteroid,/area/shuttle/specops/station)
+"vf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/suit,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal";dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vg" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vh" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vi" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vj" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vk" = (/obj/item/device/radio/intercom{pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/status_display{pixel_x = 0;pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vo" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vp" = (/obj/structure/disposalpipe/junction/yjunction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vq" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vs" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"vt" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
+"vu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"vv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"vw" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"vx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"vy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"vz" = (/obj/machinery/computer/HolodeckControl/Exodus,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"vA" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"vB" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_1_hatch";locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"vC" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/escape_pod1/station)
+"vD" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_2_hatch";locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
+"vE" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/escape_pod2/station)
+"vF" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_3_hatch";locked = 1;name = "Escape Pod Hatch";req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
+"vG" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall";dir = 1},/area/shuttle/escape_pod3/station)
+"vH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"vI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"vJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"vK" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vL" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vM" = (/obj/structure/closet/secure_closet/personal,/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2;name = "south bump";pixel_y = -24},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Locker Rooms Aft";dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vN" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light,/obj/machinery/firealarm{dir = 4;pixel_x = 24;pixel_y = 6},/turf/simulated/floor/tiled,/area/crew_quarters/locker)
+"vO" = (/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms)
+"vP" = (/obj/machinery/door/airlock{id_tag = "Dormitory 2";name = "Dorm"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms)
+"vQ" = (/turf/simulated/wall,/area/crew_quarters/toilet)
+"vR" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"vS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"vT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"vU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"vV" = (/turf/simulated/wall,/area/storage/tools)
+"vW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"vX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"vY" = (/obj/machinery/door/airlock/glass{name = "Holodeck Control"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"vZ" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 1;id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 8;id = "holodeckwin"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"wa" = (/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/obj/structure/window/reinforced/polarized{id = "holodeckwin"},/obj/structure/window/reinforced/polarized{dir = 4;id = "holodeckwin"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"wb" = (/turf/simulated/wall,/area/bridge/levela)
+"wc" = (/obj/machinery/light/small/emergency{dir = 8},/turf/simulated/floor/plating,/area/bridge/levela)
+"wd" = (/turf/simulated/floor/plating,/area/bridge/levela)
+"we" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/bridge/levela)
+"wf" = (/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"wg" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ert_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"wh" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "ert_shuttle_dock_airlock";name = "interior access button";pixel_x = 0;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/bridge/levela)
+"wi" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "ert_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "ert_shuttle_dock_airlock";name = "exterior access button";pixel_x = 0;pixel_y = -26;req_one_access = list(13)},/turf/simulated/floor/plating,/area/bridge/levela)
+"wj" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "ert_shuttle_dock_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "ert_shuttle_dock_airpump";tag_chamber_sensor = "ert_shuttle_dock_sensor";tag_exterior_door = "ert_shuttle_dock_outer";tag_interior_door = "ert_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "ert_shuttle_dock_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "ert_shuttle_dock_pump"},/obj/machinery/light/small,/obj/machinery/camera/network/command{c_tag = "Bridge - Fleet Security Dock";dir = 1},/turf/simulated/floor/plating,/area/bridge/levela)
+"wk" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/locker)
+"wl" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Dormitories Fore";pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"wm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms)
+"wn" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"wo" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"wp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"wq" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"wr" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"ws" = (/obj/machinery/door/airlock/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"wt" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"wu" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"wv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"ww" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/storage/tools)
+"wx" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/tools)
+"wy" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Auxiliary Tool Storage"},/turf/simulated/floor/tiled,/area/storage/tools)
+"wz" = (/turf/simulated/floor/tiled,/area/storage/tools)
+"wA" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/storage/tools)
+"wB" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed";name = "Clothing Storage"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"wC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"wD" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_1_berth_hatch";locked = 1;name = "Escape Pod";req_access = list(13)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"wE" = (/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/bridge/levela)
+"wF" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_2_berth_hatch";locked = 1;name = "Escape Pod";req_access = list(13)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"wG" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/bridge/levela)
+"wH" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "escape_pod_3_berth_hatch";locked = 1;name = "Escape Pod";req_access = list(13)},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"wI" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = -32;pixel_y = 0},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"wJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/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/floor/plating,/area/bridge/levela)
+"wK" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"wL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/bridge/levela)
+"wM" = (/obj/structure/table/rack,/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"wN" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"wO" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"wP" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"wQ" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Restrooms";dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"wR" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"wS" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"wT" = (/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"wU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"wV" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/storage/tools)
+"wW" = (/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/storage/tools)
+"wX" = (/obj/structure/closet/athletic_mixed,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"wY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"xa" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"xb" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380;id_tag = "escape_pod_1_berth";pixel_x = -25;pixel_y = 30;tag_door = "escape_pod_1_berth_hatch"},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xc" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xd" = (/turf/simulated/floor/tiled,/area/bridge/levela)
+"xe" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xf" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xg" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380;id_tag = "escape_pod_2_berth";pixel_x = -25;pixel_y = 30;tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xh" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xi" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Corridor 2"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xj" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380;id_tag = "escape_pod_3_berth";pixel_x = -25;pixel_y = 30;tag_door = "escape_pod_3_berth_hatch"},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"xl" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xm" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xn" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xo" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/door/window/westleft,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/bridge/levela)
+"xp" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8;icon_state = "map"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xq" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"xr" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"xs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms)
+"xt" = (/obj/item/weapon/bedsheet/mime,/obj/structure/bed/padded,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"xu" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"xv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"xw" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"xx" = (/obj/machinery/atm{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"xy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"xz" = (/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage";req_access = list(12)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools)
+"xA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"xB" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools)
+"xC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/storage/tools)
+"xD" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/storage/tools)
+"xE" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/storage/tools)
+"xF" = (/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"xG" = (/obj/structure/table/rack,/obj/item/weapon/beach_ball/holoball,/obj/item/weapon/beach_ball,/obj/item/weapon/bikehorn/rubberducky,/obj/item/device/violin,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"xH" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Holodeck Storage";dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"xI" = (/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"xJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/bridge/levela)
+"xK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"xL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela)
+"xM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/bridge/levela)
+"xN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"xO" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/bridge/levela)
+"xQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/bridge/levela)
+"xR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xS" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/door/airlock/command{name = "Shuttle Docking"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"xV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/plating,/area/bridge/levela)
+"xW" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/bridge/levela)
+"xX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/turf/simulated/floor/plating,/area/bridge/levela)
+"xY" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"xZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"ya" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"yb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms)
+"yc" = (/obj/machinery/light_switch{pixel_x = 22;pixel_y = 10},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"yd" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"ye" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"yf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"yg" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 4";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"yh" = (/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"yi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"yj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/storage/tools)
+"yk" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/storage/tools)
+"yl" = (/obj/structure/closet/lasertag/blue,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"ym" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"yn" = (/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"yo" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "centcom_shuttle_dock_airlock";pixel_x = 30;pixel_y = 30;req_one_access = list(13);tag_airpump = "centcom_shuttle_dock_pump";tag_chamber_sensor = "centcom_shuttle_dock_sensor";tag_exterior_door = "centcom_shuttle_dock_outer";tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yr" = (/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela)
+"ys" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yt" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Corridor 1";dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela)
+"yu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yy" = (/obj/machinery/light_switch{dir = 2;name = "light switch ";pixel_x = 0;pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"yB" = (/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela)
+"yD" = (/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yE" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"yF" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"yG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"yH" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"yI" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"yJ" = (/obj/machinery/door/airlock{name = "Unit 3"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"yK" = (/obj/item/device/radio/intercom{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"yL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/storage/tools)
+"yM" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/tiled,/area/storage/tools)
+"yN" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/storage/tools)
+"yO" = (/obj/structure/closet/lasertag/red,/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"yP" = (/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/crew_quarters/fitness)
+"yQ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"yR" = (/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"yS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"yT" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Lobby";dir = 8},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled,/area/bridge/levela)
+"yU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"yV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"yW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"yX" = (/obj/machinery/door/airlock/command{name = "Head of Staff Preparation";req_access = list(19)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge/levela)
+"yY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"yZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"za" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"zb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"zc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"zd" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"ze" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/bridge/levela)
+"zf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/bridge/levela)
+"zg" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"zh" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"zi" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"zj" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"zk" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8;pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"zl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"zm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/tools)
+"zn" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
+"zo" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "command_surface_airlock";name = "exterior access button";pixel_x = 27;pixel_y = -26;req_one_access = list(13)},/turf/unsimulated/chasm_mask,/area/space)
+"zp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "command_surface_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "command_surface_pump";tag_chamber_sensor = "command_surface_sensor";tag_exterior_door = "command_surface_outer";tag_interior_door = "command_surface_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "command_surface_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4;frequency = 1379;id_tag = "command_surface_pump"},/obj/machinery/light/small/emergency,/turf/simulated/floor/plating,/area/bridge/levela)
+"zq" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "Command Docking Exterior Access";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"zr" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "command_surface_airlock";name = "interior access button";pixel_x = -23;pixel_y = 25;req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela)
+"zs" = (/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "command_surface_inner";locked = 1;name = "Command Docking Exterior Access";req_access = list(13)},/turf/simulated/floor/plating,/area/bridge/levela)
+"zt" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"zu" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 8},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"zv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"zw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"zx" = (/obj/machinery/door/airlock/command{name = "Head of Staff Preparation";req_access = list(19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/bridge/levela)
+"zy" = (/obj/machinery/light_switch{pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela)
+"zz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/wood,/area/bridge/levela)
+"zA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela)
+"zB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela)
+"zC" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/bridge/levela)
+"zD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/wood,/area/bridge/levela)
+"zE" = (/obj/structure/table/woodentable,/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/bridge/levela)
+"zF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"zG" = (/obj/structure/ladder/up{pixel_y = 16},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 9},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust";dir = 6},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/space)
+"zH" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Docks";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"zI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/bridge/levela)
+"zJ" = (/obj/machinery/door/airlock/external,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"zK" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/bridge/levela)
+"zL" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"zM" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;layer = 3.3;master_tag = "centcom_shuttle_dock_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/bridge/levela)
+"zN" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/access_button{command = "cycle_interior";frequency = 1380;master_tag = "spare_shuttle_dock_airlock";name = "interior access button";pixel_x = 0;pixel_y = 25;req_access = list(13)},/obj/machinery/camera/network/command{c_tag = "Bridge - Auxiliary Dock"},/turf/simulated/floor/plating,/area/bridge/levela)
+"zO" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "spare_shuttle_dock_airlock";pixel_x = 0;pixel_y = 30;req_one_access = list(13);tag_airpump = "spare_shuttle_dock_pump";tag_chamber_sensor = "spare_shuttle_dock_sensor";tag_exterior_door = "spare_shuttle_dock_outer";tag_interior_door = "spare_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "spare_shuttle_dock_sensor";pixel_x = 0;pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8;frequency = 1380;id_tag = "spare_shuttle_dock_pump"},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/bridge/levela)
+"zP" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "spare_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"zQ" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "spare_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "eng_sl_eva_airlock";name = "exterior access button";pixel_x = -26;pixel_y = 8;req_access = list(10,13)},/turf/simulated/floor/plating,/area/bridge/levela)
+"zR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms)
+"zS" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"zT" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{icon_state = "shower";dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"zU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"zV" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"zW" = (/turf/simulated/wall,/area/hallway/secondary/entry/aft)
+"zX" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"zY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"zZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Aa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"Ab" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Ac" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Ad" = (/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Entrance";dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/turf/unsimulated/chasm_mask,/area/bridge/levela)
+"Ae" = (/obj/machinery/light_switch{pixel_x = -22},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Af" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"Ag" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"Ah" = (/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Ai" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue/diagonal,/turf/simulated/floor/tiled/white,/area/bridge/levela)
+"Aj" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/bridge/levela)
+"Ak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/bridge/levela)
+"Al" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/bridge/levela)
+"Am" = (/obj/structure/bed/chair/office/dark,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/carpet,/area/bridge/levela)
+"An" = (/turf/simulated/floor/carpet,/area/bridge/levela)
+"Ao" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine,/turf/simulated/floor/wood,/area/bridge/levela)
+"Ap" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"Aq" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"Ar" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"As" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"At" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_dock_inner";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/bridge/levela)
+"Au" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"Av" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/simulated/floor/plating,/area/bridge/levela)
+"Aw" = (/obj/structure/ladder/up{pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Ax" = (/turf/simulated/floor/carpet,/area/crew_quarters/sleep/bedrooms)
+"Ay" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"Az" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet)
+"AA" = (/obj/structure/extinguisher_cabinet{pixel_x = -32},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"AB" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"AC" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/tiled,/area/bridge/levela)
+"AD" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/bridge/levela)
+"AE" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/bridge/levela)
+"AF" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/tiled,/area/bridge/levela)
+"AG" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela)
+"AH" = (/obj/structure/table/woodentable,/obj/machinery/camera/network/command{c_tag = "Bridge - Surface Meeting Room";dir = 4},/obj/item/toy/figure/ert,/obj/item/weapon/storage/box/cups,/turf/simulated/floor/wood,/area/bridge/levela)
+"AI" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/turf/simulated/floor/carpet,/area/bridge/levela)
+"AJ" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/blue,/obj/item/weapon/pen{pixel_x = 5;pixel_y = 5},/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/bridge/levela)
+"AK" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/bridge/levela)
+"AL" = (/turf/simulated/floor/wood,/area/bridge/levela)
+"AM" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"AN" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380;id_tag = "centcom_shuttle_dock_airlock";pixel_x = 30;pixel_y = 0;req_one_access = list(13);tag_airpump = "centcom_shuttle_dock_pump";tag_chamber_sensor = "centcom_shuttle_dock_sensor";tag_exterior_door = "centcom_shuttle_dock_outer";tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380;id_tag = "centcom_shuttle_dock_sensor";pixel_x = -25;pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1380;id_tag = "centcom_shuttle_dock_airlock"},/obj/machinery/light/small{dir = 8},/obj/machinery/camera/network/command{c_tag = "Bridge - Administration Dock";dir = 8},/turf/simulated/floor/plating,/area/bridge/levela)
+"AO" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"AP" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"AQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_x = 22;pixel_y = 10},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"AR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"AS" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"AT" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/levela)
+"AU" = (/obj/machinery/vending/coffee,/obj/machinery/status_display{density = 0;layer = 4;pixel_x = -32;pixel_y = 0},/turf/simulated/floor/wood,/area/bridge/levela)
+"AV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/carpet,/area/bridge/levela)
+"AW" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/carpet,/area/bridge/levela)
+"AX" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "centcom_shuttle_dock_outer";locked = 1;name = "Docking Port Airlock";req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior";frequency = 1380;master_tag = "centcom_shuttle_dock_airlock";name = "exterior access button";pixel_x = 25;pixel_y = 0;req_one_access = list(13,65)},/turf/simulated/floor/plating,/area/bridge/levela)
+"AY" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Dormitories Aft";dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"AZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"Ba" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Bb" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"Bc" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/bridge/levela)
+"Bd" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/bridge/levela)
+"Be" = (/obj/machinery/vending/cola,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/bridge/levela)
+"Bf" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/wood,/area/bridge/levela)
+"Bg" = (/obj/structure/sign/double/map/left{pixel_y = -32},/turf/simulated/floor/wood,/area/bridge/levela)
+"Bh" = (/obj/structure/sign/double/map/right{pixel_y = -32},/turf/simulated/floor/wood,/area/bridge/levela)
+"Bi" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/bridge/levela)
+"Bj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"Bk" = (/turf/simulated/floor/asteroid,/area/shuttle/transport1/station)
+"Bl" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Bm" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 3";dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Bn" = (/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/bridge/levela)
+"Bo" = (/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 4},/obj/structure/cable/green{icon_state = "11-4"},/obj/structure/lattice,/turf/simulated/open,/area/bridge/levela)
+"Bp" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"Bq" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"Br" = (/obj/structure/grille,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{icon_state = "rwindow";dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{density = 0;icon_state = "pdoor0";id = "bridge blast";name = "Bridge Blast Doors";opacity = 0},/turf/simulated/floor/plating,/area/bridge/levela)
+"Bs" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"Bt" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Bu" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Bv" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Bw" = (/turf/simulated/mineral/random,/area/bridge/levela)
+"Bx" = (/turf/simulated/floor/asteroid,/area/syndicate_station/surface)
+"By" = (/obj/machinery/atmospherics/pipe/zpipe/up/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Bz" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/chasm_mask,/area/space)
+"BA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"BB" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"BC" = (/obj/structure/window/reinforced{icon_state = "rwindow";dir = 8},/turf/unsimulated/chasm_mask,/area/space)
+"BD" = (/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 2";pixel_x = 0},/turf/unsimulated/chasm_mask,/area/hallway/secondary/entry/aft)
+"BE" = (/turf/simulated/floor/asteroid,/area/skipjack_station/surface)
+"BF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"BG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"BH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"BI" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BJ" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/security{c_tag = "Surface - Custodial Closet"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BK" = (/obj/structure/janitorialcart,/obj/item/weapon/mop,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BL" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"BM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BO" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light/small/emergency{tag = "icon-bulb1 (EAST)";icon_state = "bulb1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"BQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"BR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{icon_state = "intact-supply";dir = 9},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"BS" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BU" = (/obj/structure/closet/jcloset,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"BV" = (/turf/simulated/wall,/area/quartermaster/storage)
+"BW" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance";req_access = list(31)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"BX" = (/obj/machinery/door/airlock{name = "Custodial Closet";req_access = list(26)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
+"BY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"BZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ca" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cb" = (/obj/machinery/light{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Station Intercom (General)";pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cc" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cd" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ce" = (/obj/vehicle/train/cargo/trolley,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cf" = (/obj/vehicle/train/cargo/trolley,/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = 0;pixel_y = 30},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cg" = (/obj/vehicle/train/cargo/engine,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ch" = (/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ci" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Ck" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = 0;pixel_y = 30},/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cl" = (/obj/structure/table/standard,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/clothing/head/soft,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cm" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cn" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Co" = (/obj/machinery/light{dir = 1},/obj/structure/bed/chair,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Cq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Cr" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"Cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"Ct" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Cu" = (/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Loading Bay 2";dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Cy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Cz" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CA" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CB" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"CE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"CF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"CG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"CH" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CL" = (/obj/effect/large_stock_marker,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CM" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"CO" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CP" = (/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"CQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CR" = (/obj/machinery/vending/snack,/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Auxilliary Entrance";dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CS" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CU" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CX" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"CY" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"CZ" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Da" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Db" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dd" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"De" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Df" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/floor_decal/corner/brown,/obj/structure/disposalpipe/junction{icon_state = "pipe-j2";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Dh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Di" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dj" = (/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay";req_access = list(31)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{icon_state = "map-scrubbers";dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Dm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 4},/area/hallway/secondary/entry/aft)
+"Dn" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"Do" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"Dp" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Dq" = (/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Dr" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ds" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Du" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/quartermaster/storage)
+"Dx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Dz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DB" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"DC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"DD" = (/obj/structure/flora/pottedplant/random,/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"DE" = (/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"DF" = (/obj/machinery/light,/obj/machinery/alarm{dir = 1;pixel_y = -22},/obj/machinery/camera/network/civilian_east{c_tag = "Surface - Corridor Camera 1";dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/aft)
+"DG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"DH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"DI" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380;id_tag = "cargo_bay";name = "cargo bay hatch controller";pixel_x = -30;pixel_y = 0;req_one_access = list(13,31);tag_door = "cargo_bay_door"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DK" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 8},/area/quartermaster/storage)
+"DL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DM" = (/obj/structure/closet/secure_closet/cargotech,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Equipment Storage";dir = 8},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"DO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"DP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"DQ" = (/obj/machinery/door/airlock/maintenance,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"DR" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "QMLoad"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DS" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DT" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DU" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/landmark/start{name = "Cargo Technician"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DX" = (/obj/structure/closet/secure_closet/cargotech,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 6},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DY" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"DZ" = (/obj/machinery/computer/supplycomp,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ea" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Eb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ec" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Ed" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Ee" = (/obj/machinery/door/airlock/external{frequency = 1380;icon_state = "door_locked";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Ef" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Eg" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Eh" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ei" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ej" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ek" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"El" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Em" = (/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"En" = (/obj/effect/landmark/start{name = "Cargo Technician"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Eo" = (/obj/structure/closet/secure_closet/cargotech,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ep" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/windowtint{pixel_x = 24;pixel_y = -24},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door.";id = "qmdoor";name = "office door control";pixel_x = 15;pixel_y = -25;req_access = list(41)},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the cargo doors.";id = "cargodoor";name = "cargo door control";pixel_x = 15;pixel_y = -34;req_access = list(41)},/obj/effect/landmark/start{name = "Quartermaster"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Eq" = (/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_x = -30;pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Er" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Es" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Et" = (/turf/simulated/wall,/area/maintenance/substation/civilian_east)
+"Eu" = (/obj/machinery/camera/network/civilian_east{c_tag = "Cargo - Loading Bay 1";dir = 8},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ev" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 1},/area/quartermaster/storage)
+"Ew" = (/turf/simulated/floor/tiled/ramp/bottom{icon_state = "rampbot";dir = 1},/area/quartermaster/storage)
+"Ex" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ey" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/device/megaphone,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ez" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Quartermaster's Office";dir = 8},/obj/machinery/firealarm{dir = 4;layer = 3.3;pixel_x = 26},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EA" = (/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp";pixel_x = 0;pixel_y = 0},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"EC" = (/obj/structure/cable/green{d2 = 4;icon_state = "0-4"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/power/apc{dir = 1;name = "north bump";pixel_x = 0;pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"ED" = (/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Civilian (Surface Level) Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"EE" = (/obj/machinery/power/sensor{name = "Powernet Sensor - Civilian (Surface Level) Subgrid";name_tag = "Civilian (Surface Level) Subgrid"},/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/obj/machinery/light/small{dir = 4;pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"EF" = (/turf/simulated/open,/area/turbolift/cargo_deliverys)
+"EG" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22;pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EK" = (/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EL" = (/obj/machinery/door/airlock/mining{id_tag = "qmdoor";name = "Quartermaster";req_access = list(41)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EM" = (/turf/simulated/floor/tiled/ramp{icon_state = "ramptop";dir = 8},/area/quartermaster/storage)
+"EN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EO" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EP" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"ER" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 2;icon_state = "0-2";pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"ES" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Substation - Civilian (Main Level)"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"ET" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EU" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EW" = (/obj/machinery/door/airlock/mining{id_tag = "qmdoor";name = "Quartermaster";req_access = list(41)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/ramp{icon_state = "ramptop";dir = 8},/area/quartermaster/storage)
+"EY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"EZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light_switch{pixel_x = -24;pixel_y = -24},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fa" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/power/apc{dir = 4;name = "east bump";pixel_x = 24},/obj/structure/cable/green{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Fc" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"Fd" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Civilian (Surface Level) Substation";req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"Fe" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian (Main Level) Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
+"Ff" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Fg" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fh" = (/obj/structure/closet,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fi" = (/obj/structure/closet/secure_closet/quartermaster,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fj" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6;pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4;pixel_y = 7},/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fk" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3;pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fl" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Fm" = (/obj/effect/floor_decal/corner/brown,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fn" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/brown/full{icon_state = "corner_white_full";dir = 8},/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fp" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 8;pixel_x = 25;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Fr" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fs" = (/obj/machinery/door/airlock/glass_mining{name = "Delivery Office";req_access = list(50)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Ft" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fv" = (/obj/item/weapon/storage/box,/obj/structure/table/standard,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0;listening = 1;name = "Station Intercom (General)";pixel_y = 20},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fw" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fx" = (/obj/structure/table/standard,/obj/item/weapon/wrapping_paper,/obj/item/weapon/wrapping_paper,/obj/machinery/requests_console{department = "Cargo Bay";departmentType = 2;pixel_y = 30},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"Fy" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"Fz" = (/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"FA" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{icon_state = "intact-scrubbers";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"FB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"FC" = (/obj/structure/disposalpipe/segment{dir = 1;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/alarm{dir = 1;icon_state = "alarm0";pixel_y = -22},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/quartermaster/storage)
+"FG" = (/obj/structure/disposalpipe/segment{dir = 2;icon_state = "pipe-c"},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FH" = (/obj/structure/table/standard,/obj/item/device/destTagger{pixel_x = 4;pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4;pixel_y = 3},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FI" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/quartermaster/storage)
+"FJ" = (/obj/machinery/firealarm{dir = 8;pixel_x = -24},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Mail Room";dir = 4},/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FK" = (/obj/structure/filingcabinet/filingcabinet,/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FL" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"FM" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal/deliveryChute,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FN" = (/obj/effect/floor_decal/corner/brown{icon_state = "corner_white";dir = 9},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FO" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FP" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/storage)
+"FQ" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FR" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FS" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FT" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FU" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea";dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FW" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white{icon_state = "corner_white";dir = 4},/obj/effect/floor_decal/corner/paleblue,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+"FX" = (/obj/machinery/door/firedoor,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/storage)
+"FY" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/sortjunction/flipped{dir = 1;name = "Sorting Office";sortType = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"FZ" = (/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Ga" = (/obj/machinery/door/airlock/maintenance,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gb" = (/obj/effect/decal/warning_stripes,/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gc" = (/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "2-8"},/obj/random/junk,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gd" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Ge" = (/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gf" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gg" = (/obj/structure/cable{icon_state = "11-4"},/obj/structure/disposalpipe/down{icon_state = "pipe-d";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/supply{icon_state = "down-supply";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{icon_state = "down-scrubbers";dir = 4},/obj/structure/lattice,/turf/simulated/open,/area/maintenance/arrivals)
+"Gh" = (/obj/structure/cable{icon_state = "12-0"},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gi" = (/obj/machinery/light/small/emergency,/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
+"Gj" = (/turf/simulated/floor/asteroid,/area/supply/station)
+"Gk" = (/obj/structure/sign/double/map/right{pixel_y = 32},/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/fore)
+"Gl" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8;name = "Station Intercom (General)";pixel_x = -28},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 10},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gn" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/structure/cable/green{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/bridge/levela)
+"Go" = (/obj/machinery/door/airlock/maintenance,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"Gp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gq" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gr" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue{icon_state = "corner_white";dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gs" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/paleblue/full{icon_state = "corner_white_full";dir = 8},/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gt" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/bridge/levela)
+"Gu" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela)
+"Gv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/bridge/levela)
+"Gw" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10;icon_state = "intact"},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/bridge/levela)
+"Gx" = (/turf/simulated/open,/area/turbolift/command_station)
+"Gy" = (/turf/simulated/open,/area/turbolift/command_station)
+"Gz" = (/turf/simulated/open,/area/turbolift/command_station)
+"GA" = (/turf/simulated/open,/area/turbolift/command_station)
+"GB" = (/turf/simulated/open,/area/turbolift/command_station)
+"GC" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela)
+"GD" = (/turf/simulated/open,/area/turbolift/command_station)
+"GE" = (/turf/simulated/open,/area/turbolift/command_station)
+"GF" = (/turf/simulated/open,/area/turbolift/command_station)
+"GG" = (/turf/simulated/open,/area/turbolift/command_station)
+"GH" = (/turf/simulated/open,/area/turbolift/command_station)
+"GI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela)
+"GJ" = (/turf/simulated/open,/area/turbolift/command_station)
+"GK" = (/turf/simulated/open,/area/turbolift/command_station)
+"GL" = (/turf/simulated/open,/area/turbolift/command_station)
+"GM" = (/turf/simulated/open,/area/turbolift/command_station)
+"GN" = (/turf/simulated/open,/area/turbolift/command_station)
+"GO" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela)
+"GP" = (/turf/simulated/open,/area/turbolift/command_station)
+"GQ" = (/turf/simulated/open,/area/turbolift/command_station)
+"GR" = (/turf/simulated/open,/area/turbolift/command_station)
+"GS" = (/turf/simulated/open,/area/turbolift/command_station)
+"GT" = (/turf/simulated/open,/area/turbolift/command_station)
+"GU" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/bridge/levela)
+"GV" = (/turf/simulated/open,/area/turbolift/command_station)
+"GW" = (/turf/simulated/open,/area/turbolift/command_station)
+"GX" = (/turf/simulated/open,/area/turbolift/command_station)
+"GY" = (/turf/simulated/open,/area/turbolift/command_station)
+"GZ" = (/turf/simulated/open,/area/turbolift/command_station)
+"Ha" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5;icon_state = "intact"},/obj/structure/cable/green{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/bridge/levela)
+"Hb" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/bridge/levela)
+"Hc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/structure/cable/green{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/bridge/levela)
+"Hd" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/storage)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeacacacacacabaaafaaabacacacacacaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaaaaaaaaaaaaaaacaaaaaaaaaaaaaaahaaaiaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagaaaaaaaaaaaaacaaajajajajajaaakaaajajajajajaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaaaaacaaamalalalalanakaoapapapapaqaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaaaaacaaarararararaaakaaarararararaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagaaacaaaaaaaaaaaaaaakaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaaacaaajajajajajaaakaaasasasasasaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaaacaaamalalalalanakaoapapapapaqaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaaaaacaaarararararaaakaaarararararaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagaaaaacaaaaaaaaaaaaaaakaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagaaaaacaaajajajajajaaakaaajajajajajaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagaaaaacaaamalalalalanakaoapapapapaqaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagaaaaacaaarararararaaataaarararararaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagaaaaacaaaaaaaaaaaaaaauaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagaaaaaaaaaeacacacacacacavawavacacacacacacaeaaaaagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaxayaxaaaaaaaaaaaaaaaaagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaAaBaCaDaEaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaagaFaGaIaHaFagaaaaaaagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaFaJaLaKaFagagaaagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaFaMaOaNaFagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaFaFaQaFaFagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaPaSaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaUaTaPagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazazazazazazazazazazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaPaVaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaXaYaaaaaaaZbabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaPaVaPbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcaPagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdbebdaaaaaabdbfbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaagagagaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbgbgbgbgbgbgbgbgbgbgbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabibjbkblblblbmbnboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaagagaaaaaaaaaaaaaaagagagagagagagagagaPaVaPbcbcbgbgbgbgbgbgbgbgbgbgbgbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhbhagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpbqbrbsbtbubvbwbrbxbtbqbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagaPaVaPbcbgbgbgbybybzbAbBbCbDbEbgbhbhbhbhbhbhbhbhbFbhbGbHbIbJbKbLbhbhagagagagagagaaaaaaaaaaaaaaaaaaaaaabMbMbMbMbMbMbMaaaaaaaaaaaabNaaaaaaaaaaaaaaaabObPbQbRbSbTbTbTbSbUbQbVbOaaaaaaaaaaaabNaaaaaaaaaaaaaaaabWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaagagagagaPaVaPbcbgbgbybybybXbYbZcacbcccdbhcecfcgchcicjbhckbhclcmcmcmcmbLbhbhagagagagagagagagaaaaaaaaaaaaaaaabMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaacncocpcqcqcpcrcpcqcqcpcscnaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaPaVaPaPbgbgbybybybXctcvcucwcxcdbhczcycBcAcDcCbhckbhcEcmcmcmcmcFbhbhagagagagagagagagagaaaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacncGcHcqcqcHcIcHcqcqcHcJcnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaeacacacacacacacacacacacacacaeaaagagagagaPaVaPbcbgbgbybybybycKcLcMcNcKcOcPcQcRcmcmcScTbhcUbhcVcWcXcYcYcZbhbhagagagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacndacqcqcqcqdbdcdcdcdcddcnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacaaagagagagaPaVaPbcbgbgbybybybXdedgdfdhdhdjdidldkdmdkdnbhbhbhbhdobKdpdqbKbKbhbhagagagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacncocpcqdrdsdtcpcqcqcpcscnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaadudwdvaadudwdvaadudwdvaaacaaagagagagaPaVaPbcbgbgbybybybXdxdydzdAdAdBbhdCdDdEcmdGdFdHdIbhbhbhdJbhbhbhbhbhbhagagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaacncGcHcqcqcHdLdKcqcqcHcJcnaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaadudMdvaadudMdvaadudMdvaaacaaaaagagagaPaVaPbcbgbgcadNbybXdxcddOdOdOdOdOdPdQdRdSdTbhbhdUbhdObXdVcdbydNbybgbgagagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaadWdXdYdYdZeaebeceddYdYeedWaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaadudMdvaadudMdvaadudMdvaaacaaaaagagagaPaVaPbcbgbgbybybybXefegdOeheheheiekejelehenemeoepeqdObXdVcdbybybybgbgagagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMaaaaaaaaereseteteteteteuerbqevewexbqeyebezbqevewexbqeAeBeCeCeCeCeCeDeAaaaaaaaabWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaadudMdvaadudMdvaadudMdvaaacaaaaagagagaPaVaPbcbgbgbybybybXeEeFdOehepepepeGepeHepeGepepepehdObXdVcdeIeJeKbgbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaereMeLeNeOeLeNePeQaaaaaaaabOeyebezbOaaaaaaaaeReTeSeVeUeSeVeWeAaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaabacacabeXdudMdvaadudMdvaadudMdvaaacaaeYeZeZeZeZaVaPbcbgbgbybybybXfafbdOehfcfdfeeGepffepeGepfgfhehdOfifjcdfkflfmfnbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMfofpfpfqfsfrftfufrfvfwfxaaaaaaaafydXfzeefyaaaaaaaafAfCfBfDfEfBfDfFfGfHfHfIbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaacaaaaaaaaaafJaaaaaafJaaaaaafJaaaafKfLfMfOfNfPeZaVaPbcbgbgbybybybXfQfRdOehepepepeGepfSepeGepepepehdOfTfUfVfWfXfYfZbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMgbgagdgcgefufufufugffwggaabqevexbqghgighbqevexbqaagjfCfEfEgkfEfEgmglgogngpbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaacaagrgqgsgtgtgtgtgtgtgtgtgtgtgugwgvgygxgAgzgCgBgDaPbcbgbgbybybybXgEgFdOgGgHgIgJenehgKehengLgMgNgOdOgQgPdggRgSgTgUbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMgVfpgWgXgYgZhafufugfhberbqbqhdhchchchehchfhchgbqbqeAhhfEfEhifEfEhjhkhlfHhmbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaacaaaaaaaaaahnaaaaaahnaaaaaahnaaaafKfLhohphqhreZhsaPbcbgbgbybybybXhthudOehhvhwhxeGepfSepeGhxhyhzehdOhAhBhChDhEhFhGbgbgagagagagagagagagagagaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaahHhIhJfrhKfufrhKfwhLhNhMhOhPhQhRhShThUhVhWhchXhYfCfBfDhifBfDiahZibaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaabacacabaaduicdvaaduicdvaaidicdvaaacaaieeZeZeZeZaVaPbcbgbgbybybybXdVcddOehepepepeGepifepeGepepepehdOigihcdfkiiijikbgbgagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaahHilinimioipiriqitisiviuixiwiziyiBiAiDiCiEixiGiFiIiHiJiKiMiLiOiNibaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaaduicdvaaduicdvaaidicdvaaacaaagagagagaPaVaPbcbgbgbybybybXdxcddOehiPiQiRiSepeHepiTiUiViWehdOiXiYcdiZeJeKbgbgbgagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaahHjajbfrftjcfrftjejdjgjfjhdYjidYdYdYjidYjjcqjkhYjlfBfDhifBfDiajmibaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaaduicdvaaduicdvaaidicdvaaacaaagagagagaPaVaPbcbgbgbybybybXdxcddOehehehjnehehjoehehjpehehehdObXdVcdbybybybgbgagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMgVfpjqjrgYfufujcfufujserjtjueejvjwjxjyjxjAjzdXjBjCeAjDfEfEhifEfEhjjEjFfHhmbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaaduicdvaaduicdvaaidicdvaaacaaaaagagagaPaVaPbcbgbgcadNbybXdVcddOdOdOdOdOdOdOjGdOdOdOdOdOdOdObXdVcdbydNcabgbgagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMjIjHjKjJjLfufujMfufujNerjPjOjPjxjRjQjTjSjUjxjVjVjVeAjWfEfEhifEfEjYjXkajZkbbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaadukcdvaadukcdvaaidkcdvaaacaaaaagagagaPaVaPbcbgbgbybybybXdVkdkecOcOkfkgkikhkjkkklkmkfcOcOkekndVcdbybybybgbgagagagagagagagagagagaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMfofpfpkofsfrftfufrftkperkrkqksktkukvkwkvkxktkycqkzeAkAfBfDhifBfDfFkBfHfHfIbWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaagagagaPaVaPbcbgbgbybybybXkCdgdgdgdgkDkEkEkEkFkEkEkEkGdgdgdgdgkHcdbybykIbgbgagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaerkKkJkLkMkJkLkNerkOkqkykPkRkQkSkTkUkPkycqkVeAkWkXkYkZkXkYlaeAaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaeacacacacacacacacacacacacacaeaaagagagagaPaVaPbcbgbglbbybybydAdAdAdAdAkflcldkklelfldkmkfdAdAdAdAdAbybybybybgbgagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaereslglglglglglherlikqkyljlklllmlnlplokycqlqeAeBeCeCeCeCeCeDeAaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaPaVaPaPbgbgbybybybybybybybykfkfkfkfkflrkfkfkfkfbgbybybybybybybybybgbgagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaabqltlsltjxlvlulwlxlyjxlzlzlzbqaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagaPaVaPbcbgbgbybybybybybybybylAlBkhlDlClFlElGkklIlHbybybybybybybybybgbgagagagagagagagagagaaaaaaaabMbMbMbMbMbMbMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaalJhNlKlLjAlMjwlNjAlMlOlPlQhXlJaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagaPaVaPbcbgbgbgbybybybybybybgkflSlRlUlTlVkhlWkhlXbgbgbybybybybybybgbgbgagagagagagagagagagagagaaaaaaaaaabMbMbMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaacnjgkqcqlYlZlYmalYlZlYcqcqjkcnaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagaPaVaPbcbcbgbgbgbgbgbgbgbgbgkfkfkfkfmbmcmbkfkfkfbgbgbgbgbgbgbgbgbgbgagagagagagagagagagagagagagaaaaaaaaaabMbMbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnjgmdiEixixixmecqcqcqcqcqjkcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbgbgbgbgbgbgbgbgkfkfmfmfmgmhmimfmfkfkfbgbgbgbgbgbgbgbgagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWmjmkmlcqcqcqjfmmmmmmmnmojCdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbcbcbcbcbcbcbcbcbcbcmfmfmgmhmgmfmfbcbcbcbcmfmpmpmqmrmfagagagagaaaaaaaaaaaaaaagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbqbqmsmkmtmkmumkmvmkmwbqbqbqagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagaPaVaPbcbcbcbcbcbcbcbcbcbcbcbcbcmfmxmymAmzmBmfmfmfmfmfmfmCmDmEmDmfmfmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqevexbqmFmGmFbqevexbqagagagagagagagagaaaaaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagaPaVaPaPaPaPaPaPaPaPaPaPaPaPaPaPmfmImgmKmJmMmLmNmNmNmNmLmNmNmOmQmPmSmRmTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOcqkqcqbOaaaaaaaaaaagagagagagagagagaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaPmUaRaRaRaRaRaRaRaRaRaRaRaRaRmWmVmXmXmZmYmgmfmfmfmfmfmfmfmfmfnamfmfmfnbaaagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafycqkqcqfyaaaaaaaaaaaaagagagagagagagaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaVmfmgmgncmgmgmfndndagagagagagneneneagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqnfewewewngbqnhkqninjnknlnlnlnmnjnjnjnjagagagaaaaaaaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagaPaVmfnnnonpnpnqmfagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaalJnrnsntnunvnwnxnycqnznAnAnBnAnCnDnEnFnjagagagaaaaaaaaaaaaaaagagmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagaPaVmfmfmfmfmfmfmfagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnnGnGnGnHnInwnJnKnLnMnNnOnPnQnRnSnTnUnjagagagagaaaaaaaaagagagagmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagaPmUaRaRaRnWnVaPagagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnnXnYnZoaobocodoeixogofoiohokojololomnjagagagagagaaaaaaagagagagmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagaPaPaPononooononagagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnopoqnGoporbqoskqcqotnAounBovnCnTnTownjagagagagagagaaaaaaagaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagagagonoxozoyonagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnoAoBnGoDoCbOoEjfjhoFnAoGoHoInCnToJoKnjagagagagagagaaaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagagagagagagagonoLoNoMonagagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnoOoDoPoQoBcnoEkqoRnjnjnjnjnjnjnjnjnjnjagabagagagagagaaaaaaaaaamHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagaaaaaaaaaaaaagonoSoUoTonagagagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadWoVoWoXoYoVfyoEkqoZbqpapapapapapapabqagagpbagagagagagaaaaaaaaaaaamHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagaaaaaaaaaaaaaaaapcpdpepfpgaaaaagagagagagagagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaphphphphphphphpipjnwbqpapapapapapapabqagagaaaaaaagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaapkplpkaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagphpmpnpopppqproEkqpsbqpapapapapapapabqagaaaaaaaaaaaaaaaaaaaaagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagaaaaaaaeacacacacacacptpuptacacacacacacaeaaagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagphpvpwpwpwpxpzpypAcqbqpapapapapapapabqaaaaaaaaaaaaaaaaaaagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagaaaaaaaaacaaaaaaaaaaaaaapBaaaaaaaaaaaaaaacaaagagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagphpCpDpDpDpEpFpGkqpHbqpapapapapapapabqpIpJaaagagagaaaaagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaaaaaaaaaaacaapKpKpKpKpKaapLaapKpKpKpKpKaaacaaagagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagphpMpDpDpDpNpOoEpQpPbqpapapapapapapabqpRbqagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaaaaaaaaaaacaapTpSpSpSpSpUpVpWpXpXpXpXpYaaacaaagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagphpZpDqapDqbpOoEkqoZbqpapapapapapapabqqcbqagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaucudueaaufuguhaauiujukaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaacaaqdqdqdqdqdaapVaaqdqdqdqdqdaaacaaagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagphqepDpDqfqgpOoEkqcqbqbqbqbqbqbqbqbqbqqjbqbqbqagagagagagagagagagagaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguBuDuCuDuBuFuEuFuBuHuGuHuBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaapVaaaaaaaaaaaaaaacaaaaaaaaagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagphqkpDpDqlqmpOqnkqcqqocqqqcqqrcqcqcqcqquqpGkbqqvqvqvqvqvqvqvagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuDvauDuZuFvbuFuZuHvcuHuZaaaaaaaavdaaaaveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapKpKpKpKpKaapVaapKpKpKpKpKaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagphqwpDpDqlpDqxoEqyixixixqzixqAixixixixqBqDqCbqqEqGqFqIqHqJqvagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZvCvBvCuZvEvDvEuZvGvFvGuZuZuZuZvHvIvJveveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapTpSpSpSpSpUpVpWpXpXpXpXpYaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagphpDqKqLqMqNqOqPqQcqcqcqcqcqqRcqcqcqcqcqqTqSbqqEqGqUqVqWqJqvagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagwbwcwdweuZwcwdweuZwcwdweuZuZwfwhwgwjwiveveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaqdqdqdqdqdaapVaaqdqdqdqdqdaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagqXqXqXqXphqYqZrarbrcrdoEkqcqrerfrfrgrhrirfrfrjcqqTrkbqqEqGrlrmqWqJqvagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuZwDwEuZuZwFwGuZuZwHwEuZuZwIwKwJwLvJveveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaapVaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagqXrnrorpphphrqphphphbqrrrscqrtrurvrwrxryrzrArBcqrCjhbqqErDrErmrFqJqvagaaaaaaaarGrIrHrHrJrJrHrHrHrJrHrKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZxcxbxdxexfxgxdxhxixjxlxkxnxmxpxoxqaaaaveveveveveveveveveveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapKpKpKpKpKaapVaapKpKpKpKpKaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXrnrMrLrLrLrLrLrLrLrOrNrPcqrtrQrRrSryrSrzrTrUmmrVcqbqqvqvrWrXqvqvqvaaaaaaaaaarGrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZuZuZuZuZuZxOxdxdwbxPxQxdwbxdxRxTxSxUxdxpxouZuZuZuZuZxVxXxWuZuBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaapTpSpSpSpSpUpVpWpXpXpXpXpYaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXqXsasbsbsbsbsbsbsbbqoEkqcqrBscsdrSserSrzsfsgcqqTcqnwshsisjsksislsmaaaaaaaaaasnrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZGlyqGmyrysuZuZytyuyuyuyvywyxyyyxyzyByAyCyDxpxoyEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaqdqdqdqdqdaapVaaqdqdqdqdqdaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagqXsosbspsqsrssstsusvoEkqnirhswsxrSserSsdsyrhcqszixsBsAsAsCsDsEsFsGsHaaaaaaaasIrYrYrYrYrYrYrYrYrYrYsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZyQyRySyRyTuZuZyUyVyWyVyYyXyZwbzbzazcuZuZzdwKzezfyWyVyVyVyVyVyVyVyVyVyVzgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaasJaasKaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagqXsosbsLsMsMsMsMsMsNoEkqcqsOsPrzrSryrSrzsQsRcqqTnJsSsTsTsUsTsTsVsWsXsXsXsXsXsYrYrYrYrYrYrYrYrYrYrYsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozqzpzszrztzuzvzwzxzyzzzAzAzBzCzDzEzFaaaaaazGuZzHzIzJzKzLzLzLzJzMzJzLzLzNzPzOzQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeacacacacacabaasZaaabacacacacacaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagqXqXqXqXtasbtbsMtctdtesMsNtfthtgtjtitltktmsQsQsQrtnxtotnbqtptqtrtstttttutvtvtvtvtvtwrYrYrYrYrYrYrYrYrYrYsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAduZuZuZAeAfAgAiAhuZAjAkAlAlAmAlAnAoApaaaaaaaauZuZuZAqAryVyVAsAuAtAvyVyVyVyWtWvJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaatxaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagqXrorororosbtysMtztdtesMtAoEkqcqsRtBrysdtCsdrzsdrtcqqToEtDtttEtFtGsAsAtHtItItItJtKtwrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZGnGoGpGqGrGsGtuZAHAkAIAJAJAIAKALApaaaaaaagagaaaaaaAMaaaaaaAOANAPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagqXrosbsbsbsbtLsMtMtNtdtOsboEkqcqtPrftQtRrhtStQrftTcqqToEtUtttttVttttttsmtXtXtYtZuaubrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZGuuZuZuZuZuZuZuZAUAVAWAWAWAWAnALApaaaaaaagaaaaaaaaaaaaaaaaxqAXxqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagaaagagqXrosbulunumuoupuqupupupuruskqcqcqcqcqcqutcqcqcqcqcqqToEuuuvuwttuxuyuvsWaarGrGuArGrGrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZGvGwGxGxGxGxGxuZBeBfBgBhALALALBiBjaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagaaaaaaagqXrosbuIuJuJsMsMuKuLuMuMuOuNuPixixixuQixqzixixuRixiEuSoEbqqvqvuTqvqvqvqvaauUuVuWuYuXrYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuZGuGxGxGxGxGxuZuZuZuZuZBpBqBqBruZaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaaaaaaaaagqXrosbuluJvfsMsMvgvhsMsMvivjnKvkvlnLnKvmvnvovpnKnLvqvsvrvtvuvuvuvvvwqXagagrGvyvxvzvArYrYrYrYrYrYrYrYrYrYrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuGxGxGxGxGxwduZagagagaaaaaaaaaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqXrosbsbsbsbsMvKvLvMvLvNsbvOvPvOvOvQvRvQvQvQpipjnwvSvTvUvVvWvTvXroqXqXagrGrGvYrGrGrGvZrHrHrJrHrHrHrHrJrHwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuGxGxGxGxGxwduZagagaaaaaaaaaaaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqXrororprosbwksbsbsbsbsbsbwlwmwnvOwowpwqwrvQwswtwuwvwwwxwywzwAwvroqXagagrGwBwCwBrGagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuGxGxGxGxGxwduZaaaaaaaaaaaaaaaaaaaaaaaaaaaaBkBkBkBkBkBkBkBkBkBkBkBkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqXqXqXqXrororororororowMvOwNwmwOvOwPwQvQvQvQwRwSwTwUwVwzwWwzwAwvroqXagagrGwXwZwYrGagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZGvHbHbHcwdwdwduZaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagqXqXqXqXqXqXrororovOxrxsxtvOxuxvxwwrvQxxxyxAxzxCxBxDwzxEwvxFqXagagrGxGxIxHrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZuZuZuZGuuZuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagqXxYxZrovOyaybycvOydyevQvQvQygyfyhyiwzyjwxwzykwvroqXagagrGylymynrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaguZGuuZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagqXqXqXrovOyFyGyHvOyIxvyJwrvQyKyfyhwvwzyLyMwzyNwvroqXagagrGyOynyPrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXrovOyHzhzivOvQzjvQvQvQzkyfyhzlvTvUvVvWvTzmroqXqXqXrGrGznrGrGagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagqXrovOyazRzSvOzTzUzVvQzWzXzYzZAaAbAcqXrprororororororororpqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagqXrovOwnAxxtvOzTAyAzvQzWAAyfyhABAbAcqXroqXqXqXqXqXqXqXqXqXqXagagaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagaguZGuuZagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagqXrovOwNAxAQvOvQvQvQvQzWASARyhABAbAcqXroqXagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaguZuZATwbuZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagqXrpvOwnAxAYvOagagagaazWzXyfyhAZAbBaqXroqXagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaguZBbBcBduZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagqXqXqXqXqXqXqXroqXqXBlqXqXqXqXqXqXzWzXyfBmzWqXqXqXroqXagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaguZBoBnwduZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagqXrorororororororororororororprorpBszXyfyhBsrorororoqXagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzaguZuZuZuZuZagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagqXqXqXroqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXzWBtBuBvzWqXqXqXqXqXagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBwBwBwBwBwagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagqXAwByroqXagagagagagagagagaaaaaaaaagaaBzBAyfBBBCBDagagagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagqXroBFBGqXagagagagagagaaaaaaaaaaaaaaaaBzBAyfBBBCaaaaaaagagagagagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagqXqXqXBHqXagagagagaaaaaaaaaaaazWzWzWzWzWBAyfBBBCaaaaaaaaaaagagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagqXBHqXagagagagaaaaaaaaaaaazWBIBJBKzWBAzYBLBCaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqXqXqXBHqXagagagagagaaaaaaaaaazWBMBNBOzWBAyfBBBCaaaaaaaaaaaaagagagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqXBPBQBRqXagagagagagagaaaaaaaazWBSBTBUzWBAyfBBBCaaaaaaaaaaaaaaagagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBVBVBVBVBWBVBVBVBVBVBVBVBVBVBVBVBVzWzWzWBXzWzWBtBuBvzWaaaaaaaaaaaaaaaaagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaBYBZCaCbCcCdCeCfCeCgChCiCjClCkCmBVCnCoyhCpCqCrzXyfyhCsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaCtCuChChCvChChChCwChChCxCyCzChCABVCByhyhCpCCwTzXzYzZCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCECFCGCHCICJCKChCLCMCLCLChCxCNCOChCPBVCRCQCTCSCVCUCXCWyhCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCYCZCYDbDaChDcChChChChDdDeDfDgDiDhDkDjDmDlyhyhyhDnDoyhyhCDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBxBxBxBxBxBxBxuzuzuzaaaauzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjDpDqDpDrChChDsDtDtDtDtDuDvDxDwDzDyDABVDBDCyhyhDDDEDoDFyhDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBxBxBxBxBxBxBxBxBxuzuzaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCECFDHDIChChChChChChChCxDJCADKCODLDMBVDNDODODPBVBVDQzWzWzWagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjDpDqDpDSDRDTDTDTDRChChCxDJDUCjDWDVDXBVDYDZEaEbBVEcEdqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjEeEfEeEgEgEhEgEgEgEiCIEjEkChElEmEnEoBVEqEpChErBVEsEtEtEtEtagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjCECFDHBVBVBVBVBVBVBVBVHdDJEuBVEwEvBVBVEyExEAEzBVEBEDECEEEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaaaBVEFEFEFEFEFEFBVCxEHEICjEKEJEMELENEOCwEPBVEQEtERESEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjGjGjaaaaagBVEFEFEFEFEFEFBVETDJChElEUEVEXEWEZEYEYFaBVFbFdFcFeEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzBxBxBxBxBxBxBxuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGjGjGjGjGjaaaaaaagBVEFEFEFEFEFEFBVFgDJChBVBVBVBVBVFhFiFkFjBVFlEtEtEtEtagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBxBxBxBxBxBxBxBxBxuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaagagBVEFEFEFEFEFEFBVFgDJFmBVFoFnFpBVBVBVBVBVBVFqqXagagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagBVEFEFEFEFEFEFBVFrDsDxFsFtFuEIFvFxFwFyFzFBFAqXagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagBVEFEFEFEFEFEFBVFCFDFEFFFGChChChChFHBVFlqXqXqXagagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagBVBVBVBVBVBVBVBVBVBVBVBVFIFJChChChFKFLFlqXagagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagBVFMFNChCwChFOFPFlqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagBVFQDSDTChFRFSBVFlqXagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagBVFTFUFVFFDeFWFXFYqXagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagagagagagagagagagagagagagagBVBVBVBVBVBVBVBVFlqXagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzagagagagagagagagagaaaaaaagagagagagagagagagqXFzFZqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaagagagagagagaaaaaaaaaauzuzaaaaagagagagagqXGaqXqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaqXqXFlqXqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaauzaaaaaaaaaaaaqXGbGdGcqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaqXGeFlGfqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzaaaaaaaaaaaaqXGgGiGhqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzaaaaaaaaaaaaqXqXqXqXqXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxuzBxBxBxBxBxuzBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxuzBxBxBxBxBxuzBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBxBxBxBxBxuzuzuzuzuzuzuzBxBxBxBxBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEuzuzBEuzuzuzBEuzuzuzuzuzBEuzuzuzBEuzuzBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEBEBEBEuzuzuzBEBEBEBEBEBEBEuzuzuzBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEuzuzBEBEBEBEBEBEBEBEBEuzuzBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEuzuzBEBEBEBEBEBEBEBEBEuzuzBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzBEBEBEBEBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBEBEBEBEBEBEBEBEBEuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzBEBEBEBEBEBEBEuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzuzuzuzuzuzuzuzuzuzuzuzuzuzuzuzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-6.dmm b/maps/Aurora-MapDev/aurora-6.dmm
new file mode 100644
index 00000000000..3d4cf0b5f31
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-6.dmm
@@ -0,0 +1,509 @@
+"aa" = (/turf/space,/area/space)
+"ab" = (/turf/simulated/floor/asteroid,/area/space)
+"ac" = (/turf/simulated/mineral/random/high_chance,/area/space)
+"ad" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/reinforced/airless,/area/space)
+"ae" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space)
+"af" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/reinforced/airless,/area/space)
+"ag" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space)
+"ah" = (/turf/simulated/floor/reinforced/airless,/area/space)
+"ai" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space)
+"aj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/simulated/wall/r_wall,/area/space)
+"ak" = (/obj/structure/lattice,/turf/space,/area/space)
+"al" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space)
+"am" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"an" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/reinforced/airless,/area/space)
+"ao" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/reinforced/airless,/area/space)
+"ap" = (/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"aq" = (/turf/simulated/open,/area/space)
+"ar" = (/turf/simulated/wall/r_wall,/area/tcommsat/lounge)
+"as" = (/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (EAST)";icon_state = "warning";dir = 4},/turf/simulated/floor/reinforced/airless,/area/space)
+"at" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"au" = (/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"av" = (/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aw" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"ax" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/reinforced/airless,/area/space)
+"ay" = (/obj/structure/table/rack,/obj/random/smalltank,/obj/random/firstaid,/obj/random/loot,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"az" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aB" = (/obj/machinery/alarm{dir = 8;icon_state = "alarm0";pixel_x = 24},/obj/structure/dispenser/oxygen,/obj/machinery/light{dir = 4;status = 2},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aC" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 8},/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (EAST)";icon_state = "warning";dir = 4},/turf/simulated/floor/reinforced/airless,/area/space)
+"aD" = (/obj/structure/cable/blue{d2 = 2;icon_state = "0-2"},/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/table/standard,/obj/random/powercell,/obj/random/powercell,/obj/random/tool,/obj/random/junk,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aG" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aH" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/reinforced/airless,/area/space)
+"aI" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/reinforced/airless,/area/space)
+"aJ" = (/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/lounge)
+"aK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/reinforced/airless,/area/space)
+"aL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aM" = (/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/table/standard,/obj/random/powercell,/obj/random/loot,/obj/random/tool,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aN" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/tcommsat/lounge)
+"aO" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space)
+"aP" = (/obj/structure/cable/blue{tag = "icon-11-4 (EAST)";icon_state = "11-4";dir = 4},/obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{tag = "icon-down-scrubbers (NORTH)";icon_state = "down-scrubbers";dir = 1},/obj/machinery/atmospherics/pipe/zpipe/down/supply{tag = "icon-down-supply (NORTH)";icon_state = "down-supply";dir = 1},/turf/simulated/open,/area/space)
+"aQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)";icon_state = "intact-scrubbers";dir = 5},/obj/item/clothing/glasses/night,/obj/random/powercell,/obj/random/loot,/obj/random/tool,/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/hatch{name = "Telecoms Control Room";req_access = list(61)},/obj/machinery/door/firedoor,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aX" = (/obj/structure/lattice,/turf/simulated/open,/area/space)
+"aY" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"aZ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space)
+"ba" = (/obj/structure/closet/secure_closet/personal,/obj/random/contraband,/obj/random/medical,/obj/random/tech_supply,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bb" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bc" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/loot,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bd" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge)
+"be" = (/obj/structure/sink{pixel_y = 28},/obj/structure/mirror{pixel_x = 32},/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge)
+"bf" = (/obj/structure/flora/pottedplant/random,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bg" = (/obj/structure/banner,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"bj" = (/obj/structure/flora/pottedplant/random,/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bk" = (/obj/effect/floor_decal/industrial/warning,/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"bl" = (/obj/effect/floor_decal/industrial/warning,/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space)
+"bm" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bn" = (/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bo" = (/obj/structure/bed,/obj/item/weapon/bedsheet/blue,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bp" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge)
+"bq" = (/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge)
+"br" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/freezer,/area/tcommsat/lounge)
+"bs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{tag = "icon-intact-supply (NORTHWEST)";icon_state = "intact-supply";dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHWEST)";icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"bx" = (/obj/machinery/computer/arcade,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"by" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/loot,/obj/random/belt,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bA" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/coin,/obj/random/colored_jumpsuit,/obj/random/tool,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bB" = (/obj/machinery/alarm{dir = 4;pixel_x = -23;pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bD" = (/obj/machinery/vending/cola,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bE" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"bF" = (/obj/structure/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/yellow,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bI" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/obj/structure/sign/deathsposal{pixel_y = 32},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bJ" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/obj/structure/table/reinforced,/obj/item/weapon/material/ashtray/plastic,/obj/item/weapon/cigbutt/cigarbutt,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bK" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8;icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bM" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"bO" = (/obj/machinery/vending/snack,/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"bQ" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/colored_jumpsuit,/obj/random/booze,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bR" = (/obj/structure/closet/secure_closet/personal,/obj/random/medical,/obj/random/colored_jumpsuit,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bT" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"bU" = (/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space)
+"bV" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/obj/structure/curtain/open/bed,/obj/structure/window/reinforced/tinted,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bW" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/structure/curtain/open/bed,/obj/structure/window/reinforced/tinted,/turf/simulated/floor/carpet,/area/tcommsat/lounge)
+"bX" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bY" = (/obj/structure/table/reinforced,/obj/item/trash/tray,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"bZ" = (/obj/structure/table/reinforced,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"ca" = (/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cb" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"cd" = (/obj/structure/cable/blue{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"ce" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cf" = (/obj/structure/table/reinforced,/obj/item/trash/tastybread,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cg" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -4;pixel_y = 0},/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"ch" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"ci" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)";icon_state = "intact-scrubbers";dir = 5},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cj" = (/obj/structure/bed/chair,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/blue{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"ck" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Lounge";req_access = list(61)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cl" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cm" = (/obj/structure/table/reinforced,/obj/item/trash/koisbar,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9;pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHWEST)";icon_state = "intact-scrubbers";dir = 9},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"co" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/blue{icon_state = "0-4"},/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"cq" = (/obj/structure/table/reinforced,/obj/item/weapon/deck/tarot,/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cr" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cs" = (/obj/machinery/alarm{dir = 1;pixel_y = -22},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"ct" = (/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cu" = (/obj/structure/cable/blue{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cv" = (/obj/structure/cable/blue{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcommsat/lounge)
+"cw" = (/obj/machinery/vending/dinnerware,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cx" = (/obj/machinery/light,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cy" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/simulated/floor/lino,/area/tcommsat/lounge)
+"cz" = (/turf/simulated/wall/r_wall,/area/security/checkpoint2)
+"cA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"cE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"cF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)";icon_state = "rwindow";dir = 1},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/tcommsat/lounge)
+"cG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cH" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/button/remote/blast_door{id = "seccheckpointup";name = "Watchpost Lockdown";pixel_x = 5;pixel_y = 32},/obj/machinery/light_switch{pixel_x = -8;pixel_y = 32},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cI" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/table/standard,/obj/item/device/camera,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cJ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cK" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cL" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cM" = (/obj/structure/sign/electricshock{pixel_y = 32},/turf/simulated/floor/reinforced/airless,/area/space)
+"cN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cO" = (/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cP" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/table/standard,/obj/item/device/binoculars,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cQ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cR" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space)
+"cS" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"cT" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_y = 0},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cU" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light{dir = 4;status = 2},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cW" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/bed/chair,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cX" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"cY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"cZ" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"da" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/structure/table/standard,/obj/item/weapon/dice,/obj/item/weapon/deck/cards,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"db" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"dc" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled{icon_state = "vault";dir = 5},/area/security/checkpoint2)
+"dd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"de" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"df" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"dg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/machinery/door/blast/regular{id = "seccheckpointup"},/turf/simulated/floor/plating,/area/security/checkpoint2)
+"dh" = (/obj/random/loot,/turf/space,/area/space)
+"di" = (/obj/random/junk,/turf/simulated/floor/asteroid,/area/space)
+"dj" = (/obj/effect/landmark/corpse/engineer/rotten,/turf/simulated/floor/asteroid,/area/space)
+"dk" = (/turf/simulated/wall,/area/space)
+"dl" = (/obj/structure/boulder,/turf/simulated/floor/asteroid,/area/space)
+"dm" = (/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)";icon_state = "warning_dust";dir = 5},/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (SOUTHWEST)";icon_state = "warning_dust";dir = 10},/turf/simulated/floor/airless{icon_state = "asteroidplating"},/area/space)
+"dn" = (/obj/structure/boulder{icon_state = "boulder3"},/turf/simulated/floor/asteroid,/area/space)
+"do" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/effect/floor_decal/sign/ex,/turf/simulated/floor/reinforced/airless,/area/space)
+"dp" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/machinery/power/solar{id = "roofsolars";name = "Roof Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
+"dq" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/obj/machinery/power/solar{id = "roofsolars";name = "Roof Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
+"dr" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxport)
+"ds" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxport)
+"dt" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport)
+"du" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxport)
+"dv" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space)
+"dw" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space)
+"dx" = (/turf/simulated/floor/airless,/area/solar/auxport)
+"dy" = (/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport)
+"dz" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport)
+"dA" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space)
+"dB" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (EAST)";icon_state = "warning";dir = 4},/turf/simulated/floor/airless,/area/space)
+"dC" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space)
+"dD" = (/obj/machinery/power/solar{id = "roofsolars";name = "Roof Solar Array"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
+"dE" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport)
+"dF" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/sign/pods,/turf/simulated/floor/reinforced/airless,/area/space)
+"dG" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport)
+"dH" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"dI" = (/turf/simulated/wall/r_wall,/area/space)
+"dJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"dK" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/airless,/area/space)
+"dL" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space)
+"dM" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/airless,/area/space)
+"dN" = (/obj/effect/floor_decal/industrial/warning/cee,/turf/simulated/floor/reinforced/airless,/area/space)
+"dO" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/space)
+"dP" = (/obj/structure/cable{d1 = 4;d2 = 8;icon_state = "4-8";tag = ""},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space)
+"dQ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space)
+"dR" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space)
+"dS" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space)
+"dT" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/random/junk,/turf/simulated/floor/reinforced/airless,/area/space)
+"dU" = (/turf/simulated/wall/r_wall,/area/maintenance/solarmaint)
+"dV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)";icon_state = "rwindow";dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"dW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"dX" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space)
+"dY" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/space)
+"dZ" = (/obj/structure/ladder{icon_state = "ladder01";pixel_y = 16},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ea" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/atmospherics/pipe/zpipe/down/supply,/obj/structure/lattice,/turf/simulated/open,/area/maintenance/solarmaint)
+"eb" = (/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ec" = (/obj/machinery/power/apc{dir = 8;name = "west bump";pixel_x = -24},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ed" = (/obj/structure/cable{d2 = 8;icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ee" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ef" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"eg" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 4;icon_state = "alarm0";pixel_x = -22},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Aft Solar Maintenance";dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"eh" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ei" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ej" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ek" = (/obj/machinery/power/solar_control{id = "roofsolars";name = "Aft Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"el" = (/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},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"em" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;master_tag = "solar_roof_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"en" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"eo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ep" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)";icon_state = "rwindow";dir = 4},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"eq" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_inner";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"er" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"es" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379;id_tag = "solar_roof_airlock";pixel_x = 25;req_access = list(13);tag_airpump = "solar_roof_pump";tag_chamber_sensor = "solar_roof_sensor";tag_exterior_door = "solar_roof_outer";tag_interior_door = "solar_roof_inner"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "solar_roof_sensor";pixel_x = 25;pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1;frequency = 1379;id_tag = "solar_roof_pump"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"et" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"eu" = (/obj/machinery/door/airlock/external{frequency = 1379;icon_state = "door_locked";id_tag = "solar_roof_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/solarmaint)
+"ev" = (/obj/structure/closet/crate/solar,/turf/simulated/floor/reinforced/airless,/area/space)
+"ew" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/airless,/area/space)
+"ex" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;master_tag = "solar_roof_airlock";name = "exterior access button";pixel_x = -25;pixel_y = 25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/turf/simulated/floor/airless,/area/space)
+"ey" = (/obj/structure/cable{tag = "icon-1-8 (WEST)";icon_state = "1-8";dir = 8},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space)
+"ez" = (/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space)
+"eA" = (/obj/structure/cable{tag = "icon-1-2 (EAST)";icon_state = "1-2";dir = 4},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/airless,/area/space)
+"eB" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 5},/turf/simulated/floor/airless,/area/space)
+"eC" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space)
+"eD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning";dir = 10},/obj/random/loot,/turf/simulated/floor/reinforced/airless,/area/space)
+"eE" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space)
+"eF" = (/obj/structure/cable{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/airless,/area/space)
+"eG" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/reinforced/airless,/area/space)
+"eH" = (/obj/structure/cable{tag = "icon-11-2 (NORTH)";icon_state = "11-2";dir = 1},/obj/structure/lattice,/turf/simulated/open,/area/space)
+"eI" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/reinforced/airless,/area/space)
+"eJ" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/reinforced/airless,/area/space)
+"eK" = (/obj/effect/landmark/map_data{height = 6},/turf/space,/area/space)
+"eL" = (/turf/space,/area/syndicate_station/above)
+"eM" = (/turf/space,/area/skipjack_station/above)
+"eN" = (/obj/machinery/light,/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2)
+"eO" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2)
+"eP" = (/obj/machinery/light{dir = 8;icon_state = "tube1";pixel_x = 0},/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2)
+"eQ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/reinforced/airless,/area/security/checkpoint2)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacababacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacababababacacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaadaeafaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaabababababacabababababababababacacababaaaaaaaaaaaaaaaaaaaaaaaaagahaiaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabababababababababababababababacacacabababababababaaaaaaaaaaaaadahahahafaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaabababababababababababababababababababababababacabababababaaaaaaabagahahahaiabaaaaaaababababababacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaababababababababababababacababababababababababababacacababababababagahahahaiababaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaababababababababababababacacacabababababababababababababababababababagahahahaiababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaacabababababababababababacacacacabadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeahahahahahaeaeaeaeaeaeaeaeaeaeaeaeafabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaacacacabababababababababababacacababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaacacacabababababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakadaeafaaaaaaadalamakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaacabababababababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahanaoababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakagahaiaaaaaaagahaiakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaacacacaaaaacacabababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakagahahaeaeaeahahaiakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaacacaaaaaaaaaaaaaaabacabababababababagahahahahahahanananahahahahahapahahahahahahahahahahahahahahahahahafababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadajahahahahahahahahahajafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababagahahahahahaoaqaqaqagahahahahanararararararararahahahahahahahahahaiababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqagahahahaiaqaratauauavauawarahahahahahahahahahaiababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaxanahanaoaqarayazauauaAaBarapahahahahahahahahaiabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaqaqaCaqaqaqaraDaEauauaFaGaraHahahahahahahahahaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqadaIanaIaIaKaJaMaLauauaFararaNarahahahahahahahaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaOaqaqaqaqaParaRaQaSaSaUaTaWaVarahanahananananahafabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaXaXaXaXaOaXararararararararararararaYararaXaZaXaXaXaXagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaOaqarbabbbcarbdbearbfauaubgbhbjbiaqaZaqaqaqaqagaiababababacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaeaeaeananbkblahahahahahananananaeaeaeaeaeaeaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaOaqarbmbnboarbpbqbrbsbubtbtbvbxbwaqaZaqadaeaeahahafababababababababababaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajahahahahahahahaiaqaqaqaqagahahahaiaqaqaqaqagahahahahahahahajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeahahahahahaiaqaqaqaqaOaqarbybzbAararararbBbCauauaubDbwaqaZaqagahahahahaiababababababacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeahahahahahahahahaiaqaqaqaqbEahahahaiaqaqaqaqagahahahahahahahahaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahaiaqaqaqaqaOaqarbFbGbHarbIbJbKbKbLaubMaubObNaqaZaqagahahahahaiababababacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahaiaqadaeaeahahahahahbPalamaqagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahaiaqaqaqaqaOaqarbQbGbRarauauauaubSararbTararaqagaIahahahahahaiababacacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahahaeahahahahahahahahbUahahaeahahahahahahahahahahanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahaiaqaqaqaqaOaqarbVbGbWaraubXbYbXbSbZcacacbaraqaZaqagahahahahaiababacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahapahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanananahahahahahaiaqaqaqaqaOaqcccdaFauaraubXcebXbScfcacacgaraqaZaqagahahahahaiababacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaOaqchcjciaSckaSclcmclcnbZcacacoaraqaZaqaxananahahaoabababacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahaheNahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaOaqcpcqcrcsarcuctctctcvarcwcxcyaraqaZaqaqaqaqagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahahahahahczcAczcBczcCczahahahahahahahahahahahahahaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaXaXaXaXaOaXarararararcEcDcDcDcFarararararaXaZaXaXaXaXagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahcGcIcHcKcJcLcGahahahahahahahahahahahahahahasaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaOaqaqaqaqagcMahahahahahahaiaqaqaqaqaZaqaqaqaqagaiababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanbkahahahahahahahahahahahahcNcPcOcOcOcQcNahahahahahahahahahahahahananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahaiaqaqaqaqaxcRcRcRcSahahahahahahahahapcRcRcRcRaoaqaqaqaqagaiababababacababababaaaaaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajahahahahahahahahahaheOczcTcOcOcOcUczePahahahahahahahahahahajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaqaqaqaqaqagahahahahahahahaiaqaqaqaqaqaqaqaqaqagaiababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanananananananahahahahcVcWcOcOcOcXcVahahahahanananananananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababagahahahahaiaqaqaqaqaqaqaqaqadahahahahahahahahahafaqaqaqaqaqaqaqaqagaiababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahcYdacZdbdbdccYahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababagahahahahaiaqaqaqaqaqaqaqaqagahahahahahahahahahaiaqaqaqaqaqaqaqaqagaiabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahczdddeczdfdgczahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababagahahahahahafaqaqaqaqaqaqadahahahahahahahahahahahafaqaqaqaqaqaqadahaoabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahaheQahapahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaababababababababababababagahahahahahahaeaeaeaeaeaeahahahahahahahahahahahahahaeaeaeaeaeaeahaoababacababababacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaabababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiabababababababacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaabababababababababababababagahahahahahahahahahahahapahahahahahahahahahahahahahahahahahahahaiabababababababacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahahahanaoacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaabababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaeafababababacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananahahahahahananaoacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaababababababababababababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahaiaqaqaqaqaqacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababagahahahahahahahahahahahahahahahahahahahahahahanananananananananananaoabababacababababacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaaaaaaaagahahahaiaqaqaqaqaqaqabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaxanananananananananananananahahahahahahahahaiabababababababababababababacacacacababababacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeahahahahahaeaeaeaeaeaeaeaeafabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababagahahahahahahahaiabababababababababababacacacacacacacabababacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagapahahahahahahahahahahahahahahahahahaiabababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababagahahahahahahahaoabacacabababababababacacacacacacacacacababacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabababacaaacaaaaababacacaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababagahahahahahahaiabababacabababababababacacacacabacacacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabababacacacabababacacacaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaxananahahahahaiababababababababababacacacacdiababababacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabababababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLaaeLeLeLeLeLaaeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababagahahahaiababababababababababacacacacabababababacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaiabacacababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLaaeLeLeLeLeLaaeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababagahahahaiababababababababababacacacdjababababacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahaoabdkacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLaaaaaaaaaaaaaaeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaabagahahahaiabababababababababacacacacacacacdldlacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahadaeaeaeaeaeafaiababdmacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaxahahahaoaaaaabababababababacacacacacacacdnacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahagahahahahahaiaiababababacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaagahaiaaaaaaaaaaaaaaaaacacacacacacacacacabacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahagahahahahahaiaiabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaxanaoaaaaaaaaaaaaaaaaacacacacacacacacacabacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahagahahahahahaiaiababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacababacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahagahahahahahaiaiabababababababababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacabababacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabagahahahahahahahahahahagahahahahahaiahaeafababababacababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacabababababacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacabagahahahahahahahahahahdoanananananaoahahaiababababababababababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababagahahahahahahahahahapbUahahahahahahahahahaeafababababababababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababagahahahahahahahahahahahahahahahahahahahahahahaeaeaeaeaeaeafababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacababagahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaganananananananananananananbkanananananananananananahahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababadaeaeaeaidpdrdqahdpdrdqahdpdrdqagahaidpdrdqahdpdrdqahdpdrdqagahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababagahahahaidpdsdqahdpdsdqahdpdsdqagahaidpdsdqahdpdsdqahdpdsdqagahahaiabaaaaaaaaadaeaeaeaeaeaeaeaeaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMaaaaeMaaaaaaeMaaaaaaaaaaeMaaaaaaeMaaaaeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacabababababababagahahahaidpdsdqahdpdsdqahdpdsdqagahaidpdsdqahdpdsdqahdpdsdqagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMaaaaaaeMeMeMeMeMeMeMaaaaaaeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacababababababaxahahahaidpdsdqahdpdsdqahdpdsdqaganaidpdsdqahdpdsdqahdpdsdqagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMaaaaeMeMeMeMeMeMeMeMeMaaaaeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacabababababagahahaidpdsdqahdpdsdqahdpdsdqaOdtaZdpdsdqahdpdsdqahdpdsdqagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMaaaaeMeMeMeMeMeMeMeMeMaaaaeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacababacacacabababababagahahaiahduahahahduahahahduahdvdudwahduahahahduahahahduahagahahaiaaaaaaaaaaagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababacababadaeaeahahahaidxdxdxdxdxdxdxdxdxdxdxdxdydxdxdxdxdxdxdxdxdxdxdxahagahahahaeaeaeaeaeahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacabacacabagahahahahahaiahdzahahahdzahahahdzahdAdBdCahdzahahahdzahahahdzahagahahahanananahanahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacababababagahahahahahaidDdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahahaiaqaqaqaZaqagahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacabababaaaddFafaaaddFafaaaddFafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaababagahahahahahaidpdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahahaiaqadaeahaeahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacababacabadapahahaeahahahaeahahahafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaabagahahahahahaidpdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahahaoaqagahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacababababagahahahahahahahahahahahaiaaaaaaaaajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaabagahahahahahaidpdEdqahdpdEdqahdpdEdqagdBaidpdEdpahdpdEdqahdpdEdqagahaiababagahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacabababacabagahahahahahahahahahahahahaeaeaeaeahafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahaidpdGdqahdpdGdqahdpdGdqagdBaidpdGdpahdpdGdqahdpdGdqagahaoabadahahahahanananananananananananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababacacabagahahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahaeaeaeaeaeaeaeaeaeaeaeaedBaeaeaeaeaeaeaeaeaeaeaeaeahaiababagahahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababagahahahahahahahahahahahahahahahahahaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananahahahahahahahahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababadaeaeaeafabagahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaxananananahahahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdHahahahahahaeahahahahahahahahahahahahahahahahahahcRcRcRcRcRcRcRcRajakakakakakakajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababagahahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagahahahahahahahahahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaxanahahahahahahahahahdBahahahahahahahahahahahahahaiababagahahahaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahahahahahahahahananandIahahahahahaeaeaeaeaeaeaeaeaeaeaeafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababagahahahahahahahahdBahahahahahahahahahahahahbUapaeaeahahahahaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahaiaaaaakdmbEahahahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababagahahahahahahahahdBahahahahahahahahahapahahahahahahahahahaiababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxanahahahahahahahahahahahahahahahdJaaaaakakaxanananahananajahahahanananananaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeMeMeMeMeMeMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababacabababbEdKdLdLdLdLdLdLdLdMahahahahahahahahahahbUbkanananananananaoababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababagahahahahahahahahahahahahahahaiaaaaaaababaaaaaadNaaaaakagahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacababababababababagdOahahahahahananananahahahahahahahahahaiabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaxahahahahahahahahahahahahahahaiaaaaaaacaaaaaaaaaaaaaaakaxanaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacababababababababagdOahahahahaiabababaqagahahahahahahahahaiabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagahahahahahahahahahahahahahaiaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababadaeaeaeaeaeahdOahahahahahaeaeaeaeahahahahahahahahahaiababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagapahahahanananananananananaoaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababdQdPdPdRdSdLdLdMahahahahahahahahahahahahahahahahahahaiabababacacababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadTanananaoabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababdUdUdWdVdUdXdYanananananananananananananahahahanananananaoababacacacacacabababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababdUdZeaebdUdXdYababababababaqaqaqaqabaqaqagahaiaaaaabababababacacacacacababacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdUeceeedefdXdYababababaqaqaqaqaqaqaqaqaqagahaiaaaaaaaaabababacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdUegeiehejdXdYababaqaqaqaqaqaqadaeaeaeaeahahaiaaaaaaaaaaaaababacababacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdUekemelendXdYababaqaqaqaqaqaqagahahahahahahaiaaaaaaaaaaaaaaabacabacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdUeoeqepdUdXdYabababaqaqaqaqaqagahahahahahahaiaaaaaaaaaaaaaaabababacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdUereserdUdXdYababababaqaqaqaqagahahahahahahaiaaaaaaaaaaaaaaaaabacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaheteuetevdXdYaeaeaeaeaeaeaeaeahahahahahahahahafaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahapexeweweyeAezezezezezezezezezezeBahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeahahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahahaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahanaoabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahahahahahahahahahahahahahahahahahahahahaheCahahahahaeafababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananahahahahahahahahahahahahahahahahahahaheCahahahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakakakakakakajagadaeaeaeaeafahahahahahahahahahahahaheCahahahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagagahahahahaiahahahahahahahahahahahaheCahahahahahaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabagagahahahahaiahahahahahahahahahahahaheCahahahananaoabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababagagahahahahaiahahahahahahahahahahahaheCahahaiababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababagagahahahahaiahahahahahahahahahahahaheCahahaiababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababagdoananananaoahahahahahahahahahahahaheCahanaoababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaxananananananananananahahahahahahahaheCaiababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbEahahahahahahaheCaiababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababagbUapahahahahaheCaiabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacabababababababababagapbUahahahahaheCaiababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababacacdiabeDanananananahaheCaiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababababaaaaaaacababababababababagaheCaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacabababaaaaaaaaaaaaaaaaaaabababababagaheCaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaheEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadahaheCafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahaheCaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagahaheFaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaheGeHeIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxananeJaoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+eKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-7.dmm b/maps/Aurora-MapDev/aurora-7.dmm
new file mode 100644
index 00000000000..9b84cc7311d
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-7.dmm
@@ -0,0 +1,1458 @@
+"aa" = (/turf/space,/area/space)
+"ab" = (/turf/simulated/mineral/random/high_chance,/area/space)
+"ac" = (/obj/structure/lattice,/turf/space,/area/space)
+"ad" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/northeast)
+"ae" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/northwest)
+"af" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest)
+"ag" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest)
+"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"ai" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"aj" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"ak" = (/obj/structure/table/woodentable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"al" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"am" = (/obj/item/weapon/bedsheet/captain,/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"an" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ao" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ap" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aq" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"ar" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"as" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"at" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"au" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"av" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/remains/xeno{desc = "A dirty collar around its neck reads 'Chauncey'."},/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"ax" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ay" = (/turf/simulated/wall,/area/derelict/hallway/northeast)
+"az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"aA" = (/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aB" = (/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aC" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aD" = (/obj/item/weapon/tank/jetpack/oxygen,/obj/structure/table/rack,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aE" = (/obj/structure/table/woodentable,/obj/machinery/photocopier/faxmachine,/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aF" = (/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"aG" = (/obj/random/energy_antag,/obj/item/weapon/card/emag_broken,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aH" = (/obj/item/weapon/gun/energy/stunrevolver,/turf/space,/area/space)
+"aI" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters";req_access = list(20)},/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aJ" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aK" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"aL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/space,/area/derelict/hallway/northwest)
+"aM" = (/obj/machinery/door/airlock/command{id_tag = "captaindoor";name = "Captain's Office";req_access = list(20)},/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aN" = (/obj/item/weapon/material/shard,/turf/space,/area/space)
+"aO" = (/obj/structure/table/woodentable,/obj/item/weapon/hand_tele,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aP" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"aR" = (/obj/machinery/artifact,/turf/simulated/floor/asteroid,/area/space)
+"aS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/space,/area/derelict/hallway/northwest)
+"aT" = (/obj/structure/displaycase,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aU" = (/obj/structure/computerframe{anchored = 1},/obj/machinery/light,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aV" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aW" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aX" = (/obj/structure/table/woodentable,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aY" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"aZ" = (/obj/machinery/photocopier,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"ba" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/northwest)
+"bb" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"bc" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space)
+"bd" = (/turf/simulated/wall,/area/derelict/hallway/northwest)
+"be" = (/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bf" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bg" = (/obj/structure/table,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bh" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bi" = (/obj/structure/cryofeed{tag = "icon-cryo_rear (EAST)";icon_state = "cryo_rear";dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bj" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bk" = (/obj/structure/bed,/obj/item/weapon/material/shard,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space)
+"bm" = (/obj/structure/lattice,/turf/space,/area/derelict/hallway/northwest)
+"bn" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bo" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bp" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bq" = (/obj/machinery/constructable_frame/machine_frame,/obj/structure/window/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"br" = (/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bs" = (/obj/structure/target_stake,/obj/structure/grille/broken,/turf/space,/area/space)
+"bt" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"bu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"bv" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/obj/item/tape/engineering{icon_state = "engineering_v"},/turf/space,/area/space)
+"bw" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/obj/structure/lattice,/turf/space,/area/space)
+"bx" = (/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/space,/area/space)
+"by" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bz" = (/obj/structure/table,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bA" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bB" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bC" = (/obj/item/clothing/ears/earmuffs,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bD" = (/obj/item/weapon/melee/baton,/turf/space,/area/space)
+"bE" = (/obj/item/ammo_casing/a145,/turf/space,/area/space)
+"bF" = (/turf/simulated/floor/asteroid,/area/space)
+"bG" = (/obj/item/tape/engineering{icon_state = "engineering_v"},/obj/structure/lattice,/turf/space,/area/space)
+"bH" = (/obj/item/stack/material/cyborg/glass,/turf/space,/area/space)
+"bI" = (/obj/structure/computerframe,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"bJ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"bK" = (/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"bL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"bM" = (/obj/machinery/constructable_frame/machine_frame,/obj/machinery/light{tag = "icon-tube1 (NORTH)";icon_state = "tube1";dir = 1},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"bN" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"bO" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"bP" = (/obj/structure/bed,/obj/structure/window/reinforced,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling";name = "dead spider"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"bQ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bR" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"bS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"bT" = (/obj/item/ammo_casing/a762,/turf/space,/area/space)
+"bU" = (/turf/simulated/floor/airless,/area/space)
+"bV" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"bW" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"bX" = (/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"bY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"bZ" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"ca" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"cb" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"cc" = (/obj/machinery/door/airlock/security{icon_state = "door_locked";name = "Insanity Ward";req_access = list(2)},/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"cd" = (/obj/structure/door_assembly/door_assembly_sec,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ce" = (/obj/item/weapon/gun/energy/laser/practice{desc = "This laser gun has been modified in some way.";name = "modified laser gun"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cf" = (/obj/structure/lattice,/obj/item/ammo_casing/a145,/turf/space,/area/space)
+"cg" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/space)
+"ch" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ci" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"cj" = (/obj/machinery/door/airlock/freezer{autoclose = 0;icon_state = "door_open";name = "Command Bathroom"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ck" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/ash,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"cl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/giant_spider/nurse,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"cm" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/northeast)
+"cn" = (/obj/item/weapon/gun/projectile/sec/flash,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"co" = (/obj/structure/grille,/turf/space,/area/space)
+"cp" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
+"cq" = (/obj/machinery/door/blast/regular,/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/simulated/floor{icon_state = "dark"},/area/derelict/hallway/northwest)
+"cr" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"cs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"ct" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"cu" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload";req_access = list(16)},/obj/item/tape/engineering{icon_state = "engineering_door";layer = 4},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"cv" = (/obj/machinery/door/airlock/highsecurity{name = "AI Upload Access";req_access = list(16)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"cw" = (/obj/structure/table/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cx" = (/obj/item/ammo_casing/a145,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cy" = (/obj/random/energy,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"cz" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/space,/area/space)
+"cA" = (/obj/structure/closet/crate{name = "Camera Assembly Crate"},/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"cB" = (/obj/structure/girder/reinforced,/turf/space,/area/space)
+"cC" = (/obj/structure/closet/secure_closet/hop2,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cD" = (/obj/item/stack/material/wood,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"cE" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"cF" = (/obj/item/stack/material/wood,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cG" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"cH" = (/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"cI" = (/obj/structure/bed,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"cJ" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"cK" = (/obj/item/ammo_casing/a762,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cL" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"cM" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server";req_access = list(16)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"cN" = (/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cO" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cP" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2";req_access = list(2)},/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"cQ" = (/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cR" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"cS" = (/obj/item/weapon/storage/toolbox/electrical,/turf/space,/area/space)
+"cT" = (/obj/structure/table/standard,/turf/simulated/floor/bluegrid,/area/derelict/hallway/northwest)
+"cU" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"cV" = (/obj/machinery/door/airlock/highsecurity{autoclose = 0;icon_state = "door_open";name = "Secure Armoury Section";req_access = list(3)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"cW" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"cX" = (/obj/item/tape/engineering{icon_state = "engineering_v"},/obj/item/tape/engineering{icon_state = "engineering_h"},/turf/space,/area/space)
+"cY" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"cZ" = (/obj/item/stack/rods,/turf/space,/area/space)
+"da" = (/obj/structure/bed,/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"db" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"dc" = (/obj/item/weapon/gun/energy/laser/practice,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"dd" = (/obj/item/weapon/storage/box/flashbangs,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"de" = (/obj/machinery/power/solar{id = "auxsolareast";name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"df" = (/obj/structure/lattice,/obj/item/weapon/circuitboard/aiupload,/turf/space,/area/space)
+"dg" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/northwest)
+"dh" = (/obj/structure/grille/broken,/turf/space,/area/space)
+"di" = (/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"dj" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1";req_access = list(2)},/turf/simulated/floor/plating,/area/derelict/hallway/northeast)
+"dk" = (/obj/machinery/constructable_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dl" = (/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dm" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dn" = (/turf/simulated/floor/tiled/airless,/area/space)
+"do" = (/obj/item/ammo_casing/c45,/turf/space,/area/space)
+"dp" = (/obj/random/projectile,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dq" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dr" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"ds" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dt" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"du" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dv" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dw" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/derelict/hallway/northwest)
+"dx" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dy" = (/obj/structure/door_assembly/door_assembly_sec,/turf/space,/area/space)
+"dz" = (/obj/item/weapon/folder/blue,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dA" = (/obj/machinery/power/solar{id = "auxsolareast";name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dB" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dC" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/space)
+"dD" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/space)
+"dE" = (/obj/effect/decal/cleanable/dirt,/turf/space,/area/space)
+"dF" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"dG" = (/obj/item/weapon/folder/red,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"dH" = (/obj/structure/table/standard,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dI" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dJ" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dK" = (/obj/item/weapon/folder/blue,/obj/item/weapon/stool,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dL" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dM" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 8;icon_state = "twindow"},/turf/space,/area/derelict/hallway/northeast)
+"dN" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/derelict/hallway/northeast)
+"dO" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 1},/turf/space,/area/derelict/hallway/northeast)
+"dP" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"dQ" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dR" = (/turf/space,/area/derelict/hallway/northwest)
+"dS" = (/obj/structure/window/reinforced/tinted{dir = 4;icon_state = "twindow"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/derelict/hallway/northeast)
+"dU" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"dV" = (/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"dW" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"dX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"dY" = (/obj/structure/lattice,/obj/item/clothing/shoes/magboots,/turf/space,/area/space)
+"dZ" = (/obj/structure/lattice,/obj/item/stack/rods,/turf/space,/area/space)
+"ea" = (/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eb" = (/obj/structure/cryofeed,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"ec" = (/obj/machinery/constructable_frame/machine_frame,/turf/space,/area/space)
+"ed" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ee" = (/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ef" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eg" = (/turf/simulated/wall/r_wall,/area/space)
+"eh" = (/obj/item/weapon/folder/red,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ei" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/space)
+"ej" = (/obj/item/weapon/pen,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ek" = (/obj/structure/bed,/turf/simulated/floor/airless,/area/space)
+"el" = (/obj/structure/lattice,/obj/structure/cryofeed,/turf/simulated/floor/airless,/area/space)
+"em" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"en" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eo" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ep" = (/turf/simulated/wall,/area/space)
+"eq" = (/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"er" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"es" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"et" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"eu" = (/obj/item/weapon/bedsheet/mime,/turf/space,/area/space)
+"ev" = (/obj/structure/bed,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ew" = (/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/broken_bottle,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ex" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ey" = (/obj/structure/table/woodentable,/obj/item/device/radio,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"ez" = (/obj/structure/table/woodentable,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"eA" = (/obj/item/weapon/moneybag,/turf/simulated/floor/airless,/area/space)
+"eB" = (/obj/structure/lattice,/obj/item/device/megaphone,/turf/space,/area/space)
+"eC" = (/obj/structure/closet/coffin,/turf/simulated/floor/tiled/airless,/area/space)
+"eD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest)
+"eE" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"eF" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eG" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eH" = (/obj/structure/table/reinforced,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eI" = (/obj/random/highvalue,/turf/space,/area/space)
+"eJ" = (/obj/structure/closet/coffin,/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"eK" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"eL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest)
+"eM" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"eN" = (/obj/structure/bed,/turf/space,/area/space)
+"eO" = (/obj/structure/closet/secure_closet/warden,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eP" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"eQ" = (/turf/simulated/floor/carpet,/area/derelict/hallway/northeast)
+"eR" = (/obj/item/stack/rods,/turf/simulated/floor/carpet,/area/derelict/hallway/northeast)
+"eS" = (/obj/item/weapon/book/manual/nuclear,/turf/space,/area/space)
+"eT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"eU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/space)
+"eV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest)
+"eW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"eX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest)
+"eY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"eZ" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fa" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fb" = (/obj/structure/table/standard,/obj/item/device/camera,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fc" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast)
+"fe" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ff" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest)
+"fh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest)
+"fi" = (/obj/machinery/power/solar_control{id = "auxsolareast";name = "Fore Port Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fj" = (/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/airless,/area/derelict/hallway/northwest)
+"fk" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fl" = (/obj/item/weapon/moneybag,/turf/space,/area/space)
+"fm" = (/obj/machinery/suit_cycler/medical,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fn" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fo" = (/obj/item/stack/material/cyborg/wood,/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"fp" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fq" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"fr" = (/obj/machinery/shower{icon_state = "shower";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fs" = (/obj/machinery/shower{icon_state = "shower";dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ft" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast)
+"fu" = (/obj/item/stack/material/cyborg/wood,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"fv" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fw" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fx" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fy" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fz" = (/obj/item/weapon/extinguisher,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fA" = (/obj/structure/door_assembly,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"fB" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/structure/mirror{dir = 4;pixel_x = -32;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fC" = (/obj/structure/urinal{pixel_y = 32},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fD" = (/obj/item/weapon/bikehorn/rubberducky,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fE" = (/obj/machinery/shower{icon_state = "shower";dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fF" = (/obj/structure/table/standard,/obj/item/weapon/folder/blue,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fG" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast)
+"fI" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"fJ" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Fore Port"},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fK" = (/obj/machinery/vending/assist,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"fL" = (/obj/machinery/meter,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fM" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/atmos,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fN" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fO" = (/obj/item/weapon/moneybag,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fP" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"fQ" = (/obj/machinery/suit_cycler/engineering,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fR" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/head/helmet/space/void/engineering,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fS" = (/obj/structure/sink{icon_state = "sink";dir = 8;pixel_x = -12;pixel_y = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/northwest)
+"fU" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"fV" = (/obj/structure/bed,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"fW" = (/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/derelict/hallway/northwest)
+"fX" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"fY" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"fZ" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ga" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gb" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed";locked = 0;name = "Fore Port Solar Access";req_access = list(11)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"gc" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gd" = (/obj/machinery/status_display{layer = 4;pixel_x = 0;pixel_y = 32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"ge" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gf" = (/obj/structure/grille/broken,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"gg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/space)
+"gh" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gi" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gj" = (/obj/machinery/door/airlock/glass_command{name = "E.V.A.";req_one_access = list(18)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Processing";req_access = list(1)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"gl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gm" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northeast)
+"gn" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"go" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"gp" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gq" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1";dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gr" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gs" = (/obj/random/highvalue,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gt" = (/obj/item/stack/rods,/obj/structure/bed,/turf/space,/area/space)
+"gu" = (/obj/item/weapon/storage/belt/champion,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gv" = (/obj/structure/table/standard,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gw" = (/obj/structure/toilet,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"gx" = (/obj/structure/showcase,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"gy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast)
+"gz" = (/obj/item/weapon/gun/energy/taser,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"gA" = (/obj/structure/table,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"gB" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"gC" = (/obj/item/weapon/melee/baton/loaded,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gD" = (/obj/item/weapon/storage/box/flashbangs,/turf/space,/area/space)
+"gE" = (/obj/structure/girder,/turf/space,/area/space)
+"gF" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gG" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_eng0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gH" = (/obj/structure/table/rack,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gI" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gJ" = (/obj/machinery/suit_cycler/mining,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest)
+"gL" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gM" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"gN" = (/obj/structure/door_assembly,/turf/space,/area/derelict/hallway/northeast)
+"gO" = (/obj/structure/closet/secure_closet/brig,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"gP" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"gQ" = (/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gR" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gS" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/clothing/gloves/yellow,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gT" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gU" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gV" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"gW" = (/obj/machinery/door/airlock/vault/bolted,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"gY" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/derelict/hallway/northwest)
+"gZ" = (/obj/structure/dispenser/oxygen,/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ha" = (/obj/structure/door_assembly/door_assembly_com{icon_state = "door_as_gcom0"},/turf/space,/area/derelict/hallway/northwest)
+"hb" = (/obj/structure/toilet{dir = 4;pixel_y = 5},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"hc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/derelict/hallway/northeast)
+"hd" = (/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor/airless,/area/space)
+"he" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/derelict/hallway/northwest)
+"hf" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/turf/space,/area/space)
+"hg" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"hh" = (/obj/item/weapon/book/tome,/turf/simulated/floor/tiled/airless,/area/space)
+"hi" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/space)
+"hj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
+"hk" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hl" = (/obj/structure/closet/radiation,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hm" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"ho" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prisoner Items";req_access = list(1)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"hp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northeast)
+"hq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast)
+"hr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northeast)
+"hs" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"ht" = (/obj/item/weapon/book/manual/atmospipes,/turf/simulated/floor/airless,/area/space)
+"hu" = (/obj/item/weapon/book/manual/barman_recipes,/turf/simulated/floor/airless,/area/space)
+"hv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/northwest)
+"hw" = (/obj/item/stack/rods,/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space)
+"hx" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/airless,/area/space)
+"hy" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest)
+"hz" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"hA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/northwest)
+"hB" = (/obj/structure/door_assembly/door_assembly_com{icon_state = "door_as_gcom0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/northwest)
+"hD" = (/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"hE" = (/obj/structure/closet{icon_closed = "cabinet_closed";icon_opened = "cabinet_open";icon_state = "cabinet_closed"},/obj/item/weapon/bananapeel,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"hF" = (/obj/item/device/flash,/turf/space,/area/space)
+"hG" = (/obj/item/clothing/head/soft/grey,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hH" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"hI" = (/obj/item/weapon/book/manual/evaguide,/turf/space,/area/space)
+"hJ" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hK" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"hL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/derelict/hallway/northeast)
+"hM" = (/obj/structure/bed/chair,/turf/simulated/floor/airless,/area/space)
+"hN" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/airless,/area/space)
+"hO" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"hP" = (/obj/structure/grille/broken,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"hQ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/airless,/area/space)
+"hR" = (/obj/machinery/door/airlock/external{autoclose = 0;icon_state = "door_open"},/turf/simulated/floor/airless,/area/space)
+"hS" = (/obj/structure/bed/chair/comfy/brown,/turf/space,/area/space)
+"hT" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"hU" = (/obj/structure/bed/chair,/turf/space,/area/space)
+"hV" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/airless,/area/space)
+"hW" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/airless,/area/space)
+"hX" = (/obj/item/clothing/head/soft/grey,/turf/simulated/floor/airless,/area/derelict/hallway/northwest)
+"hY" = (/obj/item/clothing/head/chameleon,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"hZ" = (/obj/structure/lattice,/obj/item/clothing/gloves/black,/turf/space,/area/space)
+"ia" = (/obj/structure/door_assembly/door_assembly_sec,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ib" = (/obj/structure/lattice,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space)
+"ic" = (/obj/structure/toilet,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"id" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ie" = (/obj/item/weapon/book/manual/medical_cloning,/turf/space,/area/space)
+"if" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/space)
+"ig" = (/obj/structure/table/woodentable,/turf/space,/area/space)
+"ih" = (/obj/structure/grille/broken,/obj/structure/window/reinforced,/turf/space,/area/space)
+"ii" = (/obj/item/clothing/gloves/black,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"ij" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ik" = (/obj/item/weapon/handcuffs,/turf/simulated/floor/airless,/area/derelict/hallway/northeast)
+"il" = (/obj/structure/bed/chair{dir = 8},/turf/space,/area/space)
+"im" = (/obj/item/stack/material/wood,/turf/simulated/floor/airless,/area/space)
+"in" = (/obj/item/clothing/gloves/chameleon,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northwest)
+"io" = (/obj/structure/table/rack,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/northeast)
+"ip" = (/obj/machinery/light/small{dir = 8},/turf/space,/area/space)
+"iq" = (/obj/structure/bed/chair{dir = 4},/turf/space,/area/space)
+"ir" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/space,/area/space)
+"is" = (/obj/item/stack/material/cyborg/wood,/turf/space,/area/space)
+"it" = (/obj/structure/grille/broken,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"iu" = (/obj/item/stack/material/phoron{amount = 5},/turf/space,/area/space)
+"iv" = (/obj/item/weapon/cigbutt,/turf/space,/area/space)
+"iw" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/airless,/area/space)
+"ix" = (/obj/item/clothing/head/soft/grey,/turf/simulated/floor/airless,/area/space)
+"iy" = (/turf/space,/area/derelict/hallway/southwest)
+"iz" = (/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iA" = (/turf/simulated/wall,/area/derelict/hallway/southwest)
+"iB" = (/obj/machinery/space_heater,/turf/space,/area/space)
+"iC" = (/turf/space,/area/derelict/hallway/southeast)
+"iD" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/southeast)
+"iE" = (/turf/simulated/wall,/area/derelict/hallway/southeast)
+"iF" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"iG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"iH" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"iI" = (/obj/item/weapon/gun/energy/temperature,/turf/space,/area/space)
+"iJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet/wardrobe/suit,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iK" = (/obj/structure/closet/secure_closet/cargotech,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iL" = (/obj/structure/lattice,/obj/item/weapon/material/shard,/turf/space,/area/space)
+"iM" = (/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"iN" = (/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"iO" = (/obj/item/clothing/mask/breath,/turf/space,/area/space)
+"iP" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/stack/rods{amount = 50},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iQ" = (/obj/structure/table/rack{dir = 8;layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/cell{maxcharge = 2000},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"iS" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/southwest)
+"iT" = (/obj/machinery/r_n_d/destructive_analyzer,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"iU" = (/obj/machinery/door/airlock{autoclose = 0;icon_state = "door_open";name = "Unit 2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iV" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iW" = (/obj/machinery/washing_machine,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iX" = (/obj/machinery/washing_machine,/obj/machinery/light,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"iY" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"iZ" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ja" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"jb" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"jc" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jd" = (/obj/structure/closet/crate,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"je" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"jf" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"jg" = (/obj/machinery/light{icon_state = "tube1";dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"jh" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"ji" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jj" = (/obj/structure/closet/crate/freezer,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jl" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jm" = (/obj/machinery/conveyor{dir = 1;id = "packageSort1"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"jn" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"jo" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"jp" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"jq" = (/obj/item/stack/material/wood,/turf/space,/area/space)
+"jr" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"js" = (/obj/machinery/door/airlock{name = "Unit 3"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jt" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ju" = (/obj/structure/grille,/turf/space,/area/derelict/hallway/southwest)
+"jv" = (/obj/item/weapon/banhammer,/turf/space,/area/derelict/hallway/southwest)
+"jw" = (/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"jx" = (/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6)},/turf/simulated/floor{icon_state = "dark"},/area/derelict/hallway/southeast)
+"jy" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/item/weapon/pen/red,/obj/item/device/camera{name = "Autopsy Camera";pixel_x = -2;pixel_y = 7},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"jz" = (/obj/structure/sign/greencross,/turf/simulated/wall,/area/derelict/hallway/southeast)
+"jA" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"jB" = (/obj/structure/girder,/turf/space,/area/derelict/hallway/southeast)
+"jC" = (/obj/machinery/door/airlock/research,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"jD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"jE" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"jF" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"jG" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"jH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"jI" = (/obj/machinery/light{dir = 8},/turf/space,/area/space)
+"jJ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jK" = (/obj/machinery/chemical_dispenser,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"jL" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jM" = (/obj/structure/lattice,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/space,/area/space)
+"jN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jO" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jP" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jQ" = (/obj/machinery/light/small{tag = "icon-bulb-broken (NORTH)";icon_state = "bulb-broken";dir = 1;base_state = "bulb-broken"},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"jR" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)";icon_state = "morgue1";dir = 8},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"jS" = (/obj/structure/sink{pixel_y = 26},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"jT" = (/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"jU" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jV" = (/obj/structure/morgue{icon_state = "morgue1";dir = 2},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"jW" = (/obj/item/weapon/extinguisher,/turf/space,/area/space)
+"jX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"jY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'MAIL DELIVERY'.";name = "MAIL DELIVERY"},/turf/simulated/wall,/area/derelict/hallway/southwest)
+"jZ" = (/obj/structure/window/reinforced{dir = 8},/obj/item/device/mmi,/obj/structure/table/standard,/obj/item/weapon/bonesetter,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ka" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kb" = (/obj/machinery/door/firedoor{dir = 8;name = "Firelock West"},/obj/machinery/door/window{base_state = "right";dir = 8;icon_state = "right";name = "Mailing Room";req_access = list(50)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kc" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"kd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast)
+"ke" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"kf" = (/obj/machinery/autolathe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kg" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kh" = (/obj/machinery/door/airlock{name = "Unit 4"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ki" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/item/stack/material/glass/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kj" = (/obj/item/weapon/screwdriver,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kk" = (/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kl" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor";name = "Research Division Access";req_access = list(47)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"km" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 27},/turf/space,/area/space)
+"kn" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"ko" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"kp" = (/obj/vehicle/train/cargo/trolley,/turf/space,/area/space)
+"kq" = (/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kr" = (/obj/item/weapon/material/shard,/obj/structure/grille/broken,/turf/space,/area/space)
+"ks" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/space)
+"kt" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ku" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"kv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"kw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"kx" = (/obj/item/weapon/storage/belt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ky" = (/obj/item/weapon/circular_saw,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kz" = (/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kA" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kD" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"kE" = (/obj/item/weapon/hemostat,/turf/space,/area/space)
+"kF" = (/obj/structure/disposaloutlet{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"kG" = (/obj/machinery/light/small{tag = "icon-bulb-broken (WEST)";icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/device/mass_spectrometer,/obj/item/weapon/autopsy_scanner,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"kH" = (/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/space,/area/derelict/hallway/southwest)
+"kI" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Maintance";req_access = list(12)},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"kJ" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"kK" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kL" = (/obj/machinery/optable{desc = "Used for advanced medical procedures, such as removing brains for cyborgification. Also used to repair unlawed synthetics.";name = "Robotics Operating Table"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kM" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kN" = (/obj/structure/grille/broken,/obj/effect/decal/cleanable/dirt,/turf/space,/area/space)
+"kO" = (/obj/mecha/working/ripley/firefighter,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"kP" = (/obj/structure/computerframe,/turf/space,/area/derelict/hallway/southeast)
+"kQ" = (/obj/item/device/mmi,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kS" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/hand_labeler,/obj/effect/decal/cleanable/dirt,/turf/space,/area/derelict/hallway/southwest)
+"kT" = (/obj/machinery/computer/operating,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kU" = (/obj/structure/closet/emcloset/legacy,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kV" = (/obj/structure/table/standard,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/clothing/head/soft,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"kW" = (/obj/structure/sign/poster{pixel_x = 0;pixel_y = 0},/turf/simulated/wall,/area/derelict/hallway/southwest)
+"kX" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "packageExternal"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"kY" = (/obj/machinery/shower{dir = 8;icon_state = "shower";pixel_x = 0;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"kZ" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"la" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance";req_access = list(31)},/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"lb" = (/obj/structure/closet/secure_closet/cargotech,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lc" = (/turf/simulated/floor/wood,/area/space)
+"ld" = (/obj/machinery/door/airlock/glass_mining{name = "Delivery Office";req_access = list(50)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"le" = (/obj/machinery/photocopier,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lf" = (/obj/machinery/conveyor{dir = 4;id = "packageExternal"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lg" = (/obj/structure/table,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"lh" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"li" = (/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ll" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"lm" = (/obj/machinery/optable,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"ln" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"lo" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lp" = (/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lq" = (/obj/structure/closet/firecloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lr" = (/obj/machinery/conveyor{dir = 4;id = "packageExternal"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ls" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"lt" = (/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor/airless,/area/space)
+"lu" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings";dir = 1},/turf/space,/area/space)
+"lv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"lw" = (/obj/item/weapon/material/shard,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)";icon_state = "rwindow";dir = 4},/turf/space,/area/space)
+"lx" = (/obj/machinery/door/airlock/glass_research{name = "Robotics Lab";req_access = list(29)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"ly" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lz" = (/obj/item/stack/material/cyborg/wood,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"lA" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"lB" = (/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"lC" = (/obj/structure/closet/emcloset,/obj/structure/extinguisher_cabinet{pixel_x = 5;pixel_y = 30},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lD" = (/obj/structure/door_assembly/door_assembly_mai{icon_state = "door_as_mai0"},/turf/space,/area/space)
+"lE" = (/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"lF" = (/obj/structure/door_assembly/door_assembly_ext{icon_state = "door_as_ext0"},/turf/space,/area/space)
+"lG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"lH" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"lI" = (/obj/machinery/status_display{density = 0;pixel_x = 0;pixel_y = 32},/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lJ" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay";req_access = list(31)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lK" = (/obj/machinery/chem_master,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lL" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/derelict/hallway/southeast)
+"lM" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lN" = (/obj/structure/sign/greencross{pixel_x = 32},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lO" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"lP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Delivery Office";req_access = list(50)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lQ" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lR" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor";name = "Research Division Access";req_access = list(47)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"lS" = (/obj/structure/computerframe,/turf/space,/area/space)
+"lT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"lU" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lV" = (/obj/item/weapon/stamp{pixel_x = -3;pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4;pixel_y = -2},/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lW" = (/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/turf/space,/area/space)
+"lX" = (/obj/vehicle/train/cargo/trolley,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lY" = (/obj/vehicle/train/cargo/engine,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"lZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"ma" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/derelict/hallway/southwest)
+"mb" = (/obj/machinery/door/airlock/medical{name = "Morgue";req_access = list(6,5)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"mc" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk";req_access = list(50)},/obj/structure/noticeboard{pixel_y = 27},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"md" = (/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"me" = (/obj/item/stack/material/cyborg/wood,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"mf" = (/obj/item/stack/material/cyborg/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"mg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"mh" = (/obj/item/weapon/stool/padded,/turf/space,/area/space)
+"mi" = (/obj/structure/reagent_dispensers/beerkeg,/turf/space,/area/space)
+"mj" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"mk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast)
+"ml" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast)
+"mm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"mn" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_gmed0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"mo" = (/obj/item/weapon/cell/super,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"mp" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"mq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall/r_wall,/area/derelict/hallway/southeast)
+"mr" = (/obj/machinery/door/airlock/glass_research{name = "Research and Development";req_access = list(7)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ms" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/space)
+"mt" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad2"},/turf/space,/area/space)
+"mu" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mv" = (/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mw" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"my" = (/obj/structure/table/reinforced,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"mz" = (/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"mA" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"mB" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"mC" = (/obj/structure/girder/reinforced,/turf/space,/area/derelict/hallway/southeast)
+"mD" = (/obj/random/firstaid,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"mE" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400;home_destination = "QM #1";suffix = "#1"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"mF" = (/obj/item/device/mmi/digital/posibrain,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"mG" = (/obj/item/weapon/gun/energy/mindflayer,/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"mH" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/stack/material/glass{pixel_x = 3;pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mI" = (/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/airless,/area/space)
+"mJ" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"mK" = (/obj/machinery/door/airlock/freezer{name = "Kitchen cold room";req_access = list(28)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mL" = (/obj/machinery/disposal,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"mM" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mN" = (/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor";name = "Genetics Laboratory";req_access = list(9)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"mO" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest)
+"mQ" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"mR" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"mS" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southwest)
+"mT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'";icon_state = "space";layer = 4;name = "EXTERNAL AIRLOCK";pixel_x = 0},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/airless,/area/space)
+"mU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2";suffix = "#2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"mV" = (/obj/structure/girder,/turf/simulated/wall,/area/derelict/hallway/southeast)
+"mW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/space)
+"mX" = (/obj/structure/lattice,/turf/space,/area/derelict/hallway/southeast)
+"mY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/space,/area/derelict/hallway/southeast)
+"mZ" = (/obj/structure/filingcabinet,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"na" = (/obj/machinery/door/firedoor{dir = 4;name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{id_tag = "cargodoor";name = "Cargo Office";req_access = list(50)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"nc" = (/obj/structure/computerframe,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"nd" = (/obj/machinery/door/airlock/external{autoclose = 0;frequency = 1380;icon_state = "door_open";id_tag = "cargo_bay_door";locked = 1;name = "Cargo Docking Hatch";req_access = list(13)},/turf/simulated/floor/airless,/area/space)
+"ne" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"nf" = (/obj/machinery/light_switch{pixel_x = 27},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ng" = (/obj/machinery/autolathe,/obj/machinery/light_switch{pixel_x = -27},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"nh" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ni" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest)
+"nj" = (/obj/machinery/conveyor_switch/oneway{convdir = -1;id = "QMLoad"},/turf/simulated/floor/airless,/area/space)
+"nk" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nl" = (/obj/structure/bed/chair/office/dark,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"nm" = (/obj/random/medical,/turf/space,/area/derelict/hallway/southeast)
+"nn" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/carbon/human/monkey,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"no" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8";freq = 1400;location = "QM #3"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"np" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/turf/space,/area/derelict/hallway/southeast)
+"nq" = (/turf/simulated/shuttle/plating,/area/derelict/hallway/southeast)
+"nr" = (/obj/item/device/paicard,/turf/space,/area/space)
+"ns" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space)
+"nt" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)";pixel_y = -28},/obj/machinery/light,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nu" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"nv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southwest)
+"nw" = (/obj/machinery/light/small{icon_state = "bulb-broken";dir = 2;base_state = "bulb-broken"},/turf/space,/area/space)
+"nx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
+"ny" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_gmed0"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"nz" = (/obj/structure/lamarr{destroyed = 1;icon_state = "labcageb0";occupied = 0},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"nA" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"nB" = (/obj/structure/window/reinforced,/mob/living/carbon/human/monkey,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"nC" = (/obj/machinery/door/window/southleft,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"nD" = (/obj/machinery/door/window/southright,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"nE" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"nF" = (/obj/structure/door_assembly/door_assembly_mai{icon_state = "door_as_mai0"},/turf/space,/area/derelict/hallway/southeast)
+"nG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space)
+"nH" = (/obj/machinery/conveyor{dir = 4;id = "QMLoad"},/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/airless,/area/space)
+"nI" = (/obj/structure/closet/crate{icon_state = "crateopen";name = "kitchen crate";opened = 1},/obj/effect/decal/cleanable/greenglow,/obj/item/weapon/reagent_containers/food/snacks/xemeatpie,/obj/item/weapon/reagent_containers/food/snacks/xenoburger,/obj/item/weapon/reagent_containers/food/snacks/xenomeat,/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nJ" = (/obj/machinery/door/airlock/glass_research{name = "Genetics Lab";req_access = list(47)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"nK" = (/obj/machinery/door/airlock/command{name = "Server Room";req_access = list(30)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"nL" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nM" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nN" = (/obj/structure/closet/secure_closet/freezer/kitchen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"nO" = (/obj/machinery/door/firedoor,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"nP" = (/obj/item/clothing/head/collectable/tophat,/turf/space,/area/space)
+"nQ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"nR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"nS" = (/obj/structure/sink{pixel_y = 26},/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"nT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"nU" = (/obj/machinery/dna_scannernew,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"nV" = (/obj/machinery/computer/scan_consolenew,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"nW" = (/obj/structure/door_assembly/door_assembly_ext{icon_state = "door_as_ext0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"nX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"nY" = (/obj/machinery/door/firedoor{dir = 1;name = "Firelock North"},/obj/machinery/door/airlock/mining{id_tag = "cargodoor";name = "Mining Dock";req_access = list(50)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"nZ" = (/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/airless,/area/space)
+"oa" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/space)
+"ob" = (/obj/machinery/disposal,/obj/machinery/light{dir = 4;icon_state = "tube1"},/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"oc" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2;pixel_y = -1},/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 24},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"od" = (/obj/item/weapon/mop,/turf/simulated/floor/tiled/airless,/area/space)
+"oe" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 27},/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"of" = (/obj/item/bodybag/cryobag,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"og" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"oh" = (/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oi" = (/obj/item/device/flashlight/pen,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oj" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"ok" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"ol" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"om" = (/obj/item/weapon/paper_bin{pixel_x = -3;pixel_y = 7},/obj/item/device/megaphone,/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"on" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/tiled,/area/derelict/hallway/southeast)
+"oo" = (/obj/structure/closet,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"op" = (/obj/structure/noticeboard{pixel_y = -27},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"oq" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"or" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"os" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"ot" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ou" = (/obj/structure/kitchenspike,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ov" = (/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp";pixel_x = 0;pixel_y = 0},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"ow" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4;pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2;pixel_y = 6},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"ox" = (/obj/structure/lattice,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/space)
+"oy" = (/obj/structure/closet/secure_closet/quartermaster,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"oz" = (/obj/structure/window/reinforced{dir = 5;health = 1e+007},/turf/simulated/floor/tiled/airless,/area/space)
+"oA" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oB" = (/obj/structure/closet/wardrobe/genetics_white,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oC" = (/obj/machinery/light_switch{pixel_x = -24;pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"oD" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/mining{id_tag = "qmdoor";name = "Quartermaster";req_access = list(41)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"oE" = (/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/space,/area/space)
+"oF" = (/obj/item/weapon/cane,/turf/space,/area/space)
+"oG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southeast)
+"oH" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"oI" = (/obj/structure/girder,/turf/space,/area/derelict/hallway/southwest)
+"oJ" = (/obj/structure/table/standard,/obj/item/weapon/dnainjector/h2m,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oK" = (/obj/item/device/flashlight/pen,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oL" = (/obj/structure/filingcabinet{icon_state = "chestdrawer"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oM" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"oN" = (/turf/simulated/floor/tiled,/area/derelict/hallway/southeast)
+"oO" = (/obj/item/clothing/glasses/regular,/turf/space,/area/space)
+"oP" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTH)";icon_state = "spline_fancy";dir = 1},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"oQ" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/weapon/material/shard,/turf/space,/area/space)
+"oR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oS" = (/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oT" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oU" = (/obj/machinery/computer/cloning,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oV" = (/obj/machinery/clonepod,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oW" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"oX" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oY" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"oZ" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space)
+"pa" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southeast)
+"pb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast)
+"pc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"pd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"pe" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"pf" = (/obj/item/weapon/ore/silver,/obj/item/weapon/ore/silver,/obj/item/weapon/ore/iron,/obj/structure/closet/crate,/turf/space,/area/space)
+"pg" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"ph" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"pi" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/airless,/area/space)
+"pj" = (/obj/effect/spawner/newbomb/proximity,/turf/simulated/floor/tiled/airless,/area/space)
+"pk" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)";icon_state = "spline_fancy";dir = 9},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"pl" = (/obj/item/device/gps/science,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pm" = (/obj/structure/closet/crate/trashcart,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"pn" = (/obj/item/weapon/mop,/obj/effect/landmark/corpse/chef,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"po" = (/obj/machinery/computer/crew,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pp" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/wall,/area/derelict/hallway/southeast)
+"pq" = (/obj/item/weapon/dnainjector/runfast,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"pr" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHEAST)";icon_state = "spline_fancy";dir = 5},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"ps" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"pt" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"pu" = (/obj/machinery/light/small{dir = 4;pixel_y = 8},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"pv" = (/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pw" = (/obj/machinery/constructable_frame/machine_frame,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"px" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"py" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_gmed0"},/obj/machinery/holosign/surgery,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pA" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"pB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"pC" = (/obj/machinery/firealarm{dir = 4;pixel_x = 24},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"pD" = (/obj/item/clothing/glasses/meson,/turf/space,/area/space)
+"pE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"pF" = (/obj/structure/lattice,/obj/item/weapon/storage/box/cups,/turf/space,/area/space)
+"pG" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3;pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"pH" = (/turf/simulated/floor/tiled/white,/area/space)
+"pI" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6;pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4;pixel_y = 7},/obj/machinery/light{dir = 4;icon_state = "tube1"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/derelict/hallway/southwest)
+"pJ" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pK" = (/obj/structure/lattice,/obj/item/weapon/dnainjector/regenerate,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space)
+"pL" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/space)
+"pM" = (/obj/structure/table/glass,/obj/item/device/radio{anchored = 1;broadcasting = 0;canhear_range = 4;desc = "Are you going to make the call?";frequency = 1347;icon = 'icons/obj/items.dmi';icon_state = "red_phone";listening = 1;name = "Red Telephone"},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"pN" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (WEST)";icon_state = "spline_fancy";dir = 8},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"pO" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"pP" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (EAST)";icon_state = "spline_fancy";dir = 4},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"pQ" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"pR" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment";req_access = list(66)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"pS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
+"pT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"pU" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)";icon_state = "spline_fancy";dir = 10},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"pV" = (/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHEAST)";icon_state = "spline_fancy";dir = 6},/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"pW" = (/obj/item/weapon/storage/box/cups,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"pX" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pY" = (/obj/machinery/vending/snack,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"pZ" = (/obj/machinery/vending/medical,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qa" = (/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access";req_access = list(7)},/turf/simulated/floor/tiled,/area/derelict/hallway/southeast)
+"qb" = (/obj/item/weapon/cane,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"qc" = (/obj/machinery/status_display{density = 0;layer = 4;pixel_x = 0;pixel_y = -32},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"qd" = (/obj/item/clothing/glasses/regular,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qe" = (/obj/structure/table/rack,/obj/item/clothing/accessory/stethoscope,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"qg" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"qh" = (/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/wall,/area/derelict/hallway/southwest)
+"qi" = (/obj/structure/sink{dir = 8;icon_state = "sink";pixel_x = -12;pixel_y = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qj" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronmedium"},/turf/space,/area/space)
+"qk" = (/obj/structure/window/phoronreinforced{icon_state = "phoronwindow0"},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)";icon_state = "phoronrwindow";dir = 1},/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ql" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronlarge"},/turf/space,/area/derelict/hallway/southeast)
+"qm" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille/broken,/turf/space,/area/space)
+"qn" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"qo" = (/obj/machinery/door/airlock/glass_medical{name = "Break Room"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/space)
+"qq" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/obj/item/weapon/material/shard/phoron{icon_state = "phoronmedium"},/turf/space,/area/space)
+"qr" = (/obj/machinery/light{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qs" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'.";name = "KEEP CLEAR: DOCKING AREA";pixel_y = 0},/turf/space,/area/space)
+"qt" = (/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"qu" = (/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (NORTH)";icon_state = "phoronrwindow";dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronwindow0"},/turf/simulated/floor/airless,/area/space)
+"qv" = (/obj/item/weapon/bedsheet/orange,/turf/space,/area/space)
+"qw" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"qx" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/hypospray,/turf/space,/area/space)
+"qy" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qz" = (/obj/item/slime_extract/cerulean,/turf/space,/area/space)
+"qA" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"qB" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)";icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)";icon_state = "phoronrwindow";dir = 4},/turf/simulated/floor/airless,/area/space)
+"qC" = (/obj/structure/bed/psych,/obj/structure/bed/psych{icon_state = "psychbed_padding"},/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"qD" = (/mob/living/simple_animal/parrot/Poly,/turf/space,/area/space)
+"qE" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/space,/area/space)
+"qF" = (/obj/machinery/recharge_station,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qG" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qH" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qI" = (/obj/structure/table/standard,/obj/item/weapon/cane,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qJ" = (/obj/structure/table/standard,/obj/item/weapon/cane/concealed,/obj/item/clothing/glasses/regular,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qK" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)";icon_state = "phoronrwindow";dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)";icon_state = "phoronrwindow";dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/floor/airless,/area/space)
+"qL" = (/obj/item/weapon/surgicaldrill,/turf/space,/area/space)
+"qM" = (/obj/item/slime_extract/bluespace,/turf/space,/area/space)
+"qN" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronlarge"},/turf/space,/area/space)
+"qO" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"qP" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_med0"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"qQ" = (/obj/item/stack/nanopaste,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"qR" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker";req_access = list(64)},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"qS" = (/obj/item/weapon/material/shard/phoron{icon_state = "phoronsmall"},/turf/space,/area/space)
+"qT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"qU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"qV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southwest)
+"qW" = (/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/derelict/hallway/southeast)
+"qX" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access";req_access = list(11)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"qY" = (/obj/machinery/power/emitter{anchored = 1},/turf/simulated/floor/airless,/area/space)
+"qZ" = (/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"ra" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rb" = (/obj/machinery/artifact,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest)
+"rc" = (/obj/machinery/light{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rd" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"re" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rf" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rh" = (/obj/structure/closet/bombcloset,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ri" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"rj" = (/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rk" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rm" = (/obj/item/weapon/circular_saw,/turf/space,/area/space)
+"rn" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"ro" = (/obj/structure/bed/chair/comfy/brown,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"rp" = (/obj/machinery/power/solar_control{id = "starboardsolar";name = "Aft Starboard Solar Control";track = 0},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rq" = (/obj/item/clothing/mask/gas,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"rr" = (/obj/machinery/suit_cycler,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"rs" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"rt" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"ru" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rv" = (/obj/structure/filingcabinet,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"rw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"rx" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"ry" = (/obj/structure/table/rack,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rz" = (/obj/structure/table/rack,/obj/item/device/flashlight,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rA" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rB" = (/obj/structure/computerframe,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rC" = (/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/airless,/area/derelict/hallway/southeast)
+"rD" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"rE" = (/obj/structure/bookcase,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"rF" = (/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rG" = (/obj/item/clothing/glasses/meson,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rH" = (/obj/structure/door_assembly/door_assembly_mai{icon_state = "door_as_mai0"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rI" = (/obj/machinery/portable_atmospherics/powered/pump,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"rK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rL" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"rM" = (/obj/structure/bed/chair,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rN" = (/obj/machinery/space_heater,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast)
+"rP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"rQ" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"rR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"rS" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southeast)
+"rT" = (/obj/structure/table/rack,/obj/item/weapon/material/shard{icon_state = "small"},/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rU" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rV" = (/obj/machinery/suit_cycler/engineering,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"rW" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast)
+"rX" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"rY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"rZ" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"sa" = (/obj/structure/bed/chair/office/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"sb" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sc" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sd" = (/obj/item/clothing/mask/gas,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"se" = (/obj/structure/table/rack,/obj/item/weapon/flamethrower/full,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sf" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"sg" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"sh" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/derelict/hallway/southeast)
+"si" = (/turf/simulated/floor/plating,/area/derelict/hallway/southeast)
+"sj" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/derelict/hallway/southeast)
+"sk" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sl" = (/obj/machinery/artifact,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"sm" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sn" = (/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"so" = (/obj/machinery/conveyor{tag = "icon-conveyor-broken (WEST)";icon_state = "conveyor-broken";dir = 8},/turf/space,/area/space)
+"sp" = (/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/space,/area/space)
+"sq" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_atmo0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sr" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ss" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"st" = (/obj/machinery/door/airlock/medical{name = "Psychiatric Office"},/turf/simulated/floor{icon_state = "white"},/area/derelict/hallway/southeast)
+"su" = (/obj/structure/table/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,/area/derelict/hallway/southeast)
+"sv" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/derelict/hallway/southeast)
+"sw" = (/obj/item/device/t_scanner,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/derelict/hallway/southeast)
+"sx" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/space,/area/space)
+"sy" = (/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sz" = (/obj/structure/closet/firecloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sA" = (/obj/item/weapon/wrench,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sC" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"sD" = (/obj/item/weapon/stool,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sE" = (/obj/machinery/conveyor{tag = "icon-conveyor-broken (EAST)";icon_state = "conveyor-broken";dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sF" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{dir = 4;id = "packageSort2"},/turf/space,/area/derelict/hallway/southeast)
+"sG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast)
+"sH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast)
+"sI" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_gatmo0"},/turf/space,/area/derelict/hallway/southeast)
+"sJ" = (/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"sK" = (/obj/structure/door_assembly/door_assembly_science{icon_state = "door_as_res0"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"sL" = (/obj/machinery/door/airlock/glass_command{name = "Chief Medical Officer"},/turf/simulated/floor{dir = 2;icon_state = "cmo"},/area/derelict/hallway/southeast)
+"sM" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/machinery/door/airlock/external,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sN" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sO" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/space,/area/space)
+"sP" = (/obj/structure/bed,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"sQ" = (/obj/machinery/field_generator,/turf/simulated/floor/airless,/area/space)
+"sR" = (/obj/structure/grille/broken,/obj/item/stack/rods,/turf/space,/area/space)
+"sS" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/airless,/area/space)
+"sT" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 2;icon_state = "cmo"},/area/derelict/hallway/southeast)
+"sU" = (/obj/machinery/light/small{tag = "icon-bulb-broken (WEST)";icon_state = "bulb-broken";dir = 8;base_state = "bulb-broken"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor{dir = 2},/turf/space,/area/derelict/hallway/southeast)
+"sW" = (/obj/machinery/door/airlock/atmos,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"sX" = (/mob/living/carbon/slime{colour = "black";icon_state = "black baby slime"},/turf/simulated/floor/reinforced,/area/derelict/hallway/southeast)
+"sY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest)
+"sZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southwest)
+"ta" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"tb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"tc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest)
+"td" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"te" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/material/shard,/turf/space,/area/derelict/hallway/southeast)
+"tf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"tg" = (/obj/structure/table/standard,/obj/item/weapon/gun/launcher/syringe/rapid,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"th" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ti" = (/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"tj" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"tk" = (/obj/structure/table/standard,/turf/simulated/floor/airless,/area/space)
+"tl" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"tm" = (/obj/structure/closet/secure_closet/engineering_welding,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tn" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"to" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tp" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tq" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"tr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"ts" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/light{icon_state = "tube1";dir = 4},/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"tt" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"tu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"tv" = (/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"tw" = (/obj/structure/door_assembly/door_assembly_med{icon_state = "door_as_med0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"tx" = (/obj/item/weapon/clipboard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ty" = (/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"tz" = (/turf/simulated/floor/reinforced,/area/derelict/hallway/southeast)
+"tA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular,/turf/space,/area/derelict/hallway/southeast)
+"tB" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"tC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southeast)
+"tD" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"tE" = (/obj/machinery/recharge_station,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tF" = (/obj/structure/closet/toolcloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tG" = (/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"tH" = (/obj/structure/lattice,/obj/structure/closet/wardrobe/engineering_yellow,/turf/space,/area/space)
+"tI" = (/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"tJ" = (/obj/machinery/power/solar{id = "portsolar";name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"tK" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"tL" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"tM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"tN" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"tO" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication";req_one_access = list(10,24)},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tP" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"tQ" = (/obj/machinery/door/window/westright,/obj/machinery/door/blast/regular,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"tR" = (/obj/machinery/door/window/eastright,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"tS" = (/obj/machinery/door/airlock/maintenance{autoclose = 0;icon_state = "door_open";name = "Drone Fabrication";req_one_access = list(10,24)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"tT" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/light{icon_state = "tube1";dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"tU" = (/obj/machinery/power/solar{id = "starboardsolar";name = "Starboard Solar Array"},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"tV" = (/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"tW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"tX" = (/obj/structure/lattice,/obj/structure/bed,/turf/space,/area/space)
+"tY" = (/obj/structure/door_assembly/door_assembly_eng{icon_state = "door_as_gatmo0"},/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"tZ" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ua" = (/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2;d2 = 4;icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ub" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"uc" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/space)
+"ud" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ue" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uf" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ug" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/paper_bin,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uh" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ui" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"uj" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"uk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"ul" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"um" = (/obj/item/clothing/glasses/hud/health,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"un" = (/obj/machinery/computer/crew,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"uo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille/broken,/turf/space,/area/derelict/hallway/southeast)
+"up" = (/obj/machinery/door/airlock/medical{name = "Patient Room 2"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uq" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"ur" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
+"us" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/space,/area/space)
+"ut" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"uu" = (/obj/structure/lattice,/obj/machinery/light/small{tag = "icon-bulb-broken (NORTH)";icon_state = "bulb-broken";dir = 1;base_state = "bulb-broken"},/turf/space,/area/space)
+"uv" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uw" = (/obj/machinery/power/solar{id = "starboardsolar";name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ux" = (/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/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uy" = (/obj/machinery/power/smes/buildable{charge = 0;RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uz" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"uA" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uB" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/turf/simulated/floor/carpet/blue,/area/derelict/hallway/southeast)
+"uC" = (/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/derelict/hallway/southwest)
+"uD" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uE" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"uF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"uG" = (/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"uH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"uI" = (/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uJ" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"uK" = (/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uL" = (/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uM" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"uN" = (/obj/machinery/door/airlock/glass_engineering,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"uO" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uP" = (/obj/machinery/smartfridge/secure/extract,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uQ" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uR" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"uS" = (/obj/machinery/access_button{command = "cycle_exterior";frequency = 1379;layer = 3.3;master_tag = "robotics_solar_airlock";name = "exterior access button";pixel_x = 25;pixel_y = 25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uT" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump";tag_exterior_door = "robotics_solar_outer";frequency = 1379;id_tag = "robotics_solar_airlock";tag_interior_door = "robotics_solar_inner";layer = 3.3;pixel_x = 0;pixel_y = -25;req_access = list(13);tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379;id_tag = "robotics_solar_sensor";layer = 3.3;pixel_x = 12;pixel_y = -25},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uU" = (/obj/machinery/door/airlock/external{autoclose = 0;frequency = 1379;icon_state = "door_open";id_tag = "robotics_solar_outer";locked = 1;name = "Engineering External Access";req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uV" = (/obj/machinery/access_button{command = "cycle_interior";frequency = 1379;layer = 3.3;master_tag = "robotics_solar_airlock";name = "interior access button";pixel_x = -25;pixel_y = -25;req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4;d2 = 8;icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uW" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uX" = (/obj/machinery/door/airlock/engineering{name = "Aft Port Solar Access";req_access = list(11)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uY" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"uZ" = (/obj/machinery/shower{pixel_y = 15},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"va" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"vb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"vc" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
+"vd" = (/obj/structure/computerframe,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"ve" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"vf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southeast)
+"vg" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"vh" = (/obj/item/weapon/circular_saw,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"vi" = (/obj/item/slime_extract/gold,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"vj" = (/obj/machinery/power/solar_control{id = "portsolar";name = "Aft Port Solar Control";track = 0},/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vk" = (/obj/structure/cable/yellow{d1 = 1;d2 = 2;icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest)
+"vm" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "medium"},/turf/space,/area/space)
+"vn" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"vo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"vp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"vq" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"vr" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/derelict/hallway/southwest)
+"vt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/derelict/hallway/southwest)
+"vu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"vv" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment";req_access = list(12)},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vw" = (/obj/structure/cable/yellow{d1 = 1;d2 = 8;icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1;d2 = 4;icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vx" = (/obj/machinery/door/airlock/medical{autoclose = 0;frequency = 1379;icon_state = "door_locked";id_tag = "virology_airlock_interior";locked = 1;name = "Virology Interior Airlock";req_access = list(39)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"vy" = (/obj/structure/cable/yellow{d2 = 2;icon_state = "0-2"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"vz" = (/obj/structure/lattice,/obj/item/weapon/bedsheet/orange,/turf/space,/area/space)
+"vA" = (/obj/item/weapon/soap/nanotrasen,/turf/space,/area/space)
+"vB" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"vC" = (/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory";req_access = list(39)},/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"vD" = (/obj/machinery/door/airlock/maintenance_hatch{autoclose = 0;icon_state = "door_open";name = "SMES Access";req_access = list(11)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"vE" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 9},/area/derelict/hallway/southwest)
+"vF" = (/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 1},/area/derelict/hallway/southwest)
+"vG" = (/turf/simulated/floor/airless,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 10},/area/derelict/hallway/southwest)
+"vH" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 6},/area/derelict/hallway/southwest)
+"vI" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 5},/area/derelict/hallway/southwest)
+"vJ" = (/turf/simulated/floor/airless,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 6},/area/derelict/hallway/southwest)
+"vK" = (/turf/simulated/shuttle/plating,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)";icon_state = "phoronrwindow";dir = 4},/turf/simulated/shuttle/wall{tag = "icon-propulsion (EAST)";icon_state = "propulsion";dir = 4},/area/derelict/hallway/southwest)
+"vL" = (/obj/machinery/door/airlock/hatch{autoclose = 0;icon_state = "door_open"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest)
+"vM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vN" = (/obj/structure/door_assembly/door_assembly_eng,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"vP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"vQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"vR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"vS" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"vT" = (/obj/machinery/power/emitter{anchored = 1;dir = 8;id = null;state = 2},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vU" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access";req_access = list(11)},/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"vV" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vW" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"vX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"vY" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 10},/area/derelict/hallway/southwest)
+"vZ" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"wa" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 5},/area/derelict/hallway/southwest)
+"wb" = (/obj/structure/window/reinforced{dir = 4},/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"wc" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/turf/simulated/shuttle/wall{icon_state = "pwall";dir = 9},/area/derelict/hallway/southwest)
+"wd" = (/obj/item/weapon/stool/padded{desc = "Apply butt. This particular stool looks tattered and old. Perhaps there have been budget cuts?";name = "Tattered Stool"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/dark,/area/derelict/hallway/southwest)
+"we" = (/obj/machinery/light/small{base_state = "bulb-broken";dir = 4;icon_state = "bulb-broken"},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"wf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wg" = (/obj/machinery/light{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wh" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wi" = (/obj/item/slime_extract/adamantine,/turf/space,/area/space)
+"wj" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/space,/area/derelict/hallway/southeast)
+"wk" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/derelict/hallway/southeast)
+"wl" = (/obj/machinery/door/window/westleft,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wm" = (/obj/machinery/power/emitter{anchored = 1;dir = 4;state = 2},/turf/simulated/floor/airless,/area/space)
+"wo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wp" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/carbon/human/monkey,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wr" = (/obj/machinery/power/rad_collector,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ws" = (/obj/structure/door_assembly/door_assembly_ext{icon_state = "door_as_ext0"},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"wt" = (/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"wu" = (/obj/machinery/door/airlock/medical{name = "Quarantine Zone"},/turf/simulated/floor{icon_state = "white"},/area/derelict/hallway/southeast)
+"wv" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"ww" = (/obj/machinery/door/blast/regular,/turf/space,/area/derelict/hallway/southwest)
+"wx" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"wA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southeast)
+"wB" = (/obj/structure/table/standard,/obj/item/weapon/virusdish/random,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wC" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wD" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wE" = (/mob/living/simple_animal/hostile/hivebot,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"wF" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"wI" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southeast)
+"wJ" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wK" = (/obj/machinery/power/smes/buildable,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"wL" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"wM" = (/obj/structure/table/standard,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wN" = (/obj/machinery/constructable_frame/machine_frame,/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wO" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wS" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/white,/area/derelict/hallway/southeast)
+"wT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southeast)
+"wV" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest)
+"wW" = (/mob/living/simple_animal/hostile/hivebot/range,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest)
+"xa" = (/mob/living/simple_animal/hostile/hivebot/strong,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/derelict/hallway/southwest)
+"xe" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/tiled/airless,/area/derelict/hallway/southwest)
+"xf" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"xj" = (/obj/structure/particle_accelerator/end_cap,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"xk" = (/obj/machinery/particle_accelerator/control_box,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"xl" = (/obj/structure/particle_accelerator/fuel_chamber,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"xn" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"xo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"xp" = (/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/airless,/area/derelict/hallway/southeast)
+"xr" = (/obj/machinery/power/rad_collector,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"xs" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/airless,/area/derelict/hallway/southwest)
+"xt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/derelict/hallway/southwest)
+"xv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/derelict/hallway/southwest)
+"xw" = (/obj/structure/grille,/turf/space,/area/derelict/hallway/southeast)
+"xx" = (/obj/structure/lattice,/obj/item/weapon/wrench,/turf/space,/area/space)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaababaaaaaaaaaaacacaaaaegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeafagahaeafagahaeaeaeacaaaaaaabababababababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiajakalamaeananaGapaqaeacaaaaaaabababaaabababaaaaababababaaaaaaaaaaaabUaaaaacaaaaaaacaaaaacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarapasatauaeavavaoawapaeaaaaaaaaabaaaaaaaaabababaaababaaaaaaaaacaaacaaaadnbUaaaaaaaaaaaaepacepepepegegegegegacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaAaBaCaDaeaEavauapapaiaFaaaaaaaaaaaaaaaaabaRabaaababaaaaaaaaaaaaacacaaegegaaaaaaaaaaaaaaaabUbUepaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaIaeaeaeaeaJaKatasapazaoaaaaacaaaaaaaaaaabababaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaacaaacacaaaaaaaabUaaacaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLapasasasaAapasapasapaMaoaoaaaaaaacaaaaaaaaaaaaaaacacaaacaaaaacabaaacaaaaaaacacaaacaabUaaaaaabUepaaacaaaaaaaaaaaaacacacaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarapapasapaOaPasasasasaQaFaFauaubmaaaaaaaaaaaaaaaaaaacaaacaaaaaaaaaaacaaaaaaaaacaaacaaaaaaaaaaaaepaaegegegegaaaaaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaTaUaVaWaXaAaqaYaZbaaeaaaabbatauauaFaaacaaaaaaaaaaaaaaaaaaaFaaaaaaacayayayayayayayayayayaaaaaaepaabUepaaaaaaacaaacacaaacaabcaaacaaaaaaaaacacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaacaabUaeaeaaaFaobdaaacacaaaabebfbgbhaybibjaxbkaybUacaaaaaaaaaaaaaaacacaaaaaaaaaablblaaacaaacaaacaaacacadadadaaaaacaaaaaaaaacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaacacacacacaaaaaaaaacacaeaoaoaFaaaaacaaaaaaaabnbgboaybpbqbeaabrbUaaaaepaaaaayaaaabUadadadadadbsbtbuadadaaacaaaaaaaaadadadbeaaaaacaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabvbwbwbwbwbwbxaeaeaeaeaeaeaeaeaeaeaeaeaoaFaFaaacacaaaaaaaabybzbzbraxbeaxbAayaaaaacepacayayadadadadbeacadbBbBbBbBbebCaaacbcadadadadaxbebEbDacaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaacaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaababababababababababbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGbHaaaaaaaaaaaebIbJbIbKbKaebLbLbMbNaeaFaaaaaaaaaaacaaaaaaaabzbnaybAaabeayayadadaaepaabUadadbObPadaaacadbQbRbBbSaaaaaaaaadaaadadadcyaaaaaabTaaaaaaaaaaacacaaaaaaaaaaaaaaacaaaaaaaaaaaabUaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababbFbFaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGaaaaaaaaaaaaaebVbJbKbKbWaebXbXbXbXaebYaaaaacaaacacaaaaaaaaaxaxaybAbUbeaybeaxadaaaaaaaaadbZcacbccaaaxcdcebBbebeacaaaaaaadaaadaxaxbeaaaaaacfcgchbeadacacaaaaaaaaaaaaaabUacacaaaaaaacacdnbUdnaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGaaaaaaaaaaaaaebKcicicibXaecicibXbXaeaoaaacaaacacacaaaaaabebjbjaybAbeaxcjbeaxadacacaaaaadckclcmadaaaxadbQbSacaaacaabBaxadaaadaxcnaaaaacacaaaxaabeadaaaaaaaaaaacdnaaacaadnacaaaaacacacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababababababababababababbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacococpcocoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaabGaaaaaaaaaaaacqbKcrcsctbXcuctctbXbXcvaFaaaaaaaaaaaaacacadadadadadadadadadaxbeadbUacbUaaadadadadadacbeadbBaaaaaaaabScwaxadaaadaxcxbebTaaaaaadobeadadaaaaaaaaaaacbUaaaaaabUaaaaaaaaaaacacdnbUdnacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaacaaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaeaabGaaaaaaaaaaaaaebKcictcibXaecicibXcAcBaoaaacaeaaacaaacaabUcCbecDcEaxcFaxadadbeadbUacayayadcGcHcIadaxbeadbeaacJaabebBbBbBadaaadaxcKbeaabUaadobeaxadadaaaaaaaaaaaadnaaacaadnaaaaaaaaaaaaaabUaabUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpaccLaccpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaeaabGaaaaaaaaaabHaebVbJbJbJbWaeaecMaeaecBaoaFaaaeaaacaaacaaaaaacNcFaxaxcOaxaxadaxadbUacaaaaadcHcHcHcPaaacadaaaaaabSbBaxcQbBadaaadaxaxbebebechaxchdpadadaaaaaaaaaaacacacaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbFbFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocococpcpaaaaaacRaaaaaacpcpcococoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabGaaaaaaaaaacSaecTcTcTcTbKaebXbXbXcUaoaFaoaFaeaaacacaaaaaadCaxaxbeaxbebeaaaaaaaaaaacaaaaadadadadadaaaxbeacaaaabBbBaxbBbBadadadadadadcVcVadadadadadadaaaaaaaaaaaaaabUbUaaaaaaaabUdnaaaabUdnaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababbFaabFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaacacaaaaaacWacacaaacacaaaacoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaacXbwbwbwbwbwbxaeaeaeaeaeaeaebXcYbXbXaoaFauaFaaacaaaaaaaaaacZaabecZaaaaaaacaaaaaaaaaabUaaadcGcHdaadaaacacbeaddbbBbBdcadadadaxaxaybBddaxaxbBbBadadadaaaaaaaaaaacacacdndnacacaaaaaabUaaacaabUaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdededededeacaFacdededededeaccpaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaeaaaaaaaaaaaabHaaacaaacaaaadfaebLbNdgbNaeaoauaFaaacacaaacaaaadhdbbeaabcacaaacacaaaaaaaaaaaaadcHdicHdjacacaydkdlbBaxaxbBdmaxaybeacdnbBdXbSbSbeaxadaaaaaaaaaaacacaaacbUbUbUaaaaaaaaacdnaaaadndnacaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaabaaaaaaaaaaabababababbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdrdqdqdqdqdsaFdtdududududvaccpaaaaaaaaaaaaaaaaabababababaaaaaaaabdaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaFaedwaudxaoaaaaaaaaacaabUaxbebeaaaaacaabUaaaaacaabUacaaadayayayaydyaaaxbQbBdzbeaaaxbBbBaxbeacdnaxbeacacbebeadaaaaaaaaacaaacdndndnaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdAdAdAdAdAacaFacdAdAdAdAdAaccpaaaaaaaaaaaaaaaaababababaaaaaaaaaabdbUbUaaacacbUaaaaaeacaaaaauaubbaoauaFaFbbatauauaoaaaaacdDaaaadhdbaxadaaaaacacaaaaaabUaaaaaaaaaddBbQbQbBacaaaybBbeaaacaaaaaxbBaybeaxdndPdPbeaaaabeadaaaaaaaaaaaabUaabUbUbUacaaacacacaaaaaaaabUaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaacaaaaacaFaaaaaaacaaaaaaczaaaaaaaaaaaaaaaaababababaaaaaaaaaabdbUbUbUaaaaacacacacacacbUeUdFatauatataudGauaoaoaFaaaaacaaacaabebeaxaybUaabUacaaaaaaaaaaaaaaaaaddHdIdJayacacayaxaaaaacaaaaaxdKayacaxayayayacayacbeadadaaaaaaaaaaacdnaaaadndnacaaacacacacdndnaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpacdededededeacaFacdededededeaccpaaaaaaaaaaaaaaabababaaaaaaaaaaaaaabdbdbUbdbdaaaaaaaaaaaaacacaaaoaudLatauaoaoaFaacJacacaaacaaacaaayayayayaaaaaaaaaaaaaaacacaaaaaaaddMdNdOayaxacaybgaaaaaaaaacbSbQayacaabedQbebeaaaabebeadaaaaaaacacacacbUaaacaaacaaaaaaaaaabUaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaacpacdrdqdqdqdqdsaFdtdududududvaccpaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaabdaaaabUbdaaaaaeaebUacaecZaeaebdaFbdaFaoaFaaaaaaaFacacaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaabUaaaaadcOdSaxaxaaaxdTbQbQbSaaaaacbSdmayaxaaaxaxbebeaaaabebeadaaaaaaaaaaacacaadnaadnaaaaacaabUdndndnacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaacpacdAdAdAdAdAacaFacdAdAdAdAdAaccpaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaabdaabUaeaaaaacaabUaoaeaFdUaoaoaadVacaaaaaaaFaaaaaaaaaaayayayaybeayadadaaaaaabeadadadaaadbBdJaxayaaaxdTdWbQbQbSdXbSbBdmayaabeaaaxbeacaabebebeadaaaaaaaaaaaaacaaaaaabUacaaacaaaaacacbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaacaaaaaaaFaaaaaaacaaaaaacoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacaeaaaaaadYaaaaaeaFaoaoaFaaacdZaFaaaFaaaaaaaaaaaaaaaaeaacaxacebbjaxcZacacecebadaaadbBedbQayaaaaayeeefbQbBbBaxbBbBayaaaxbedQaxacaaacbeaxadaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaaaaaegacaaaaaaaaaaaaaaaaaaaacpacdededededeacaFacdededededeaccpaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaepaaacaaaaaaaaaaaaaabUacacaaaeeheoejaFbcacaabbauauaFaaaaacaaaaaaaaaxekcgaxbeaxelacemaxecebadbeadaxenbBayaaaaayadaddhcdcddhadadaybeaxadadadacdZadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepbUaaaaaaaaacaaaaaaaaaaepepaaaacpacdrdqdqdqdqdsaFdtdududududvaccpaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaFacaaaaaaaaaaaaaaaaaaaaaeaFaFaoaoaFaaaaaubbaFbdacaaaaacaaaaaaaaacaceqadadadaxbecZadadadbeadayayayayaabeaxaxcJbeaaaaaabeaxaxaabeadaxbeaaaaacaaaaadacacaaacacacacaaaaaaacacaaaaacacaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacepacacaaaaaaaaaaaaaaaaaabUepaaaaczaadAdAdAdAdAacetacdAdAdAdAdAaacpaaaaaaaaaaaaaaaaaaaaaaaaaabUaaaaegacacaeaeacacaaaaabaaacaaaabUaeeraoaFaoaoehaFatdxaoaaacaaaaacaaaabeaxaaevaaaxbeaaaabebeaxaxadaaadewexexayaaacacacaxaxesacaaaaesaxbeaadhaaaaaaaaacaaaaaacZaaacacaaaaaaaaacaaaaaaaaacacaaaaaaaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepaaaabUepaaaaaaaaaaaaaaaaaaaaaacpaaacaaacacaaaacRaaaaacaaaaacaacpaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaFaFaoaoaeaaaaaaaaaaaaaaacaebdbdbdbdbdbdbdatataaaFacaaaaaaaaaaaabeaaeNeuaxbUaaaaaaaabebeadaabeaxaxaxaxaxaxadadadadadaacJaNacadaxaadbbebeaaaaeBaaaacoaaaaaaaaaaaaacaaacaaacacaaacaaacaaaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacepegbUbUepegaaaaacaFbdbdbdaaaaaaaacpcpcpaaaaacaaeDeEeDacacacaccpcpcpaabdbdbdbdaaaaacacbUaaaaaaaaaaaaaaaaaaaFaoaaacaaaaaaaacZcJaaaaacacaaaaaaaFaaaaaoaFaubdaaaaacaaacaaacayacacaaaxeuacacaaaaaaaxadaaadexexexayacaaadeFeGeGeHeGaxlSaaadaaaadbeyaxbeacbeaaaxcoacacaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaacaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacdneKeKdnaaaaaaacaFbbaubdaaaaaaaaacaaaaaaaaacaaeLeMeLacaaacaaaaaaaaaabdaaaaaFaabUaaaaacaaaaaaaaaaacaaaaaFaoaoaaaaaaaaaaaaacacaaaaaaaaaaaaaeaeaeaeaoatauaaaaaaaaaaaaaaaaaaaaeNaaaxbUaaaaaabUacbeadadadayayayayacaaaaaxaxcOeFeObeaaaaaaaaacdbezaxeQeRcZaaaxdhaaaaaaaaacaaaaacaaaaaaacacacaaegacacaaaaacacaaacaaacaaaaaaaaaaaaaaaaaaaaaaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKeTeUaaacaaacacbbbbbdaaaaaaaaaaaaaaaaaaaceVeWeEeXeYaaacaaaaaaaaaabdaFbdaeaaaaaaaaaaacaaaaaaaaaaacacaoaaaoacaaaaaaacacaoaoaaacacaaaaaaacacaoaeaaaaaoaaaaaaacacacaaaaaaacaaeuaxaaaabeaxayayeZadadfadBfbfcfdaxaaaaacaxaxfeffcdaxaaaaaaacadaxemeQbeaaaxePadaaaaaaacaaaaaaacaaaaacaaacaaaaegaaacaaaaacepepepepepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUacaceKeKbUacaaaaacaaaFbdaabdbdeVfgfgfgfgfhbdaefifkfjaebdbdeVfgeYbdbdbdaFaaaeaaaaaaaaaaaaaaeAaaacaaacaaaoaaacacaaaaaaaefmfnfndhaFfpacaaaaaaacaoaeaaaaaaaaacacaaacaaaaaxfqayaabeayayayayayayfrbSfsadbBdJbBbBftaaaaadaabeaxbcbeaxcEaNadaxaxaddbdbdbaxbedbcZadadadacacaaaaaaaaaaacaaegaaaaaaegaaacacacaaepeCeCeCepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaceKeKaaaaaaaaaabbatbdaFaFaaaFaaaaaaaFfvaFaefwfyfxaefzaFaaaaaaaaaaaaaaaFaeaaaeaeaeaaaceIaaaaaaaaacacaFaoaFaFaeaaacacaeaeaeaebbauaobUaaaaaaacaaaaacaabdaaacaaacaaaaaaaxaxeqfAayfBbQfCfCayfrfDfEadbBfFfGbBfHaabeadadacbeadaaaaaaadadbUaaaxacaaaaaxacaaaabeaxadayayaaepaaaaepepepegegaaegegepacaaacepepeJfufoepaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacbUacacaaaaaaaaacaaaubdbdbdbdbdbdbdbdaafLaFaeaFbbfJaebdfNbdbdbdbdbdbdbdbdaeaaaefOaFacacaaaaaaaaaaaaacaaaFbbauaeaFbdfPfQfRfMfTfUauaoacbUaaaaaaaaaaacaabdaaaaacaaaaaafVeqayaxaaayfSbQbBbSfAbebBbBadbBbQfXbBadaaacaxbeaabeacacbebeaxbUacbUaxacacaaaaaaaxaxaaaaacbebeaaepaaaaaabUbUaaacaaaabUepepepepepeTeTfIeKdDaaaaaaaacZaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaegaaaubdauaufZfZbUaabdaaaabdaeaegbfWaefKgafYfYfYfYgcgdgageaeaaaeaoaoaFacaaaacZaaaaacaaaabbatbbaeaaaFaegiataugjaoaoaoacacaaacaNaaacaaaaaaaaacaaaaaaayayayayaxbeeZbSbBayayayayayayadaxbBbBaxgkaaacaxaxaaaaaacZaabeaxbebeaxaaaxadbtgmgfadadadadadaaaaaabUaaepepepepepepbUaaaaaaaabUbUbUggeKeTeKdDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaacaaaaaaaaaaaaaaaaababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaFbdatatdxauauacaaaaaaacaFaaaFaFfNghgnglglgngpglgaghgaaeaaaeaoguaoaoaaacaaaeacacaeaFauauaeaeaaaaaeaeaeaeaegvaFaFaoacaaaaaaaaacaaaaaaaaacacacaaaabebebeaxbeaydEbQaygwaygwaygxadaygkayayayaxaxadbeaxdbaddbbegyadacaagzaaaxfdgAbgaxbBgBdmbjbSaaaaaaepaaepdndndnbUaaepbUepaaaaepepepeTbUbUaaaaaacZaaaaaaaaababababaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabdaubbgCbbbbaaaaaaaaaaacaaaaaabdgqgnghghgagaghgaghgraeaaaegsaoaFaFflaeaNaeaaaeaeaegGaeaeaeaaaaaegHgIgJgKgLaogMaoacaaaaaaaaaaaaaaacacaaaaaaaaayayayayaabeaybebBaygNaygNaygNadgObBgPgPadacaabeaxaxaxgtaxaxaxfdaNgDaabebeftbgaxcObSbQbSaaaaaaaaaaaaaaaabUbUaaaaepdndnepaaaaaaaaaabUbUcgaaaaaaaaaaaabcaaabababababaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabdgEaaaaaoaabdaaaaaaacaaaaaaaFbdgcgnghgnghgFgagQgagRaeaaaeaeaegWaeaeaeaaaeaabdauataugXatgYaaaaaegZgXatgjaoaFaFaohaacacaaaaaaaaaabdaaaaaaaaaaaaaaayaxbeaxaybBbBbebebUbebeacadgObQbBbQadacaaaabeaxaxaahbaxaxhcbeaabeaxbefHaxbebeaaaaaaaaaaacacepaaaaaaaaaaaaaahdacdnepacaaaaaabUdnacacaaaaaaaacZaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaFaoaaacaaaaaaaaaaaaaaaaaFaaaFaabdgSgagQgUgTfYgVgagQgQaeaaaaaaaihkeLaaaaaaaeaFbdhlgIatgXhlbdaFaaaehmgIatfTaoaoaFaFhnaoaaacaaacaaacaaaaaaaaaaaaaaaaayaxaabeayayayayayayayaybeadgPbBbBbQhobeaaadhpaxhqadhraxhradhphsadaxaxadaxbcaaaaacaaacaabUacbUaahtaaaaaaaaaahuacbUaaacaaaaaaepaabUacaaaaepepaaaaaaaaaaabababaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaFaoaaaaacaaacaaaaaaacbdbdbdbdaFbdhvheeVfgfgfgfgfhhehvaeeXhfdheWaoeXaghyhzaeaFbdbdbdgGbdbdbdbdaafPfPaeaehAhyhBhBafhCaeaeaaaaaaacaaaaaaaaacacaaaaacacacaaaaaaaabeaabehDbeayacadgPbBhEbBadaaaaaddWbQbBbBbBbSbBfdbBbQaacZaxadbQbQaaaaacaaacaaaaaaaaaaaaaaaaaaaaacbUacaaaaacacaaaaacacaaacdnaaaaaaacaaaaaaabababaaaaaaaaaacJaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaacaeauaFaaaaaaaaaaaaaaaahFaaaFaoatbbbbbbauatgIauatauauauatauhGauaoaoatatauatgIgXgXatauaaaaaaaoauauaoaaaFauauaodRaFauauatauauauataoaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaacacaaaaaabeadadadadhoadadadaaaaadhHgobBbeacbebSbSaxbBaxacaabBgobBacaaacbUaaaaaaaaacacaaaabUaahIacaaaaaabUepaaaaaaaaaaaaepbUbUepepacaaaaaaaaaaaaaaacacacaaaaaaaaaacJaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacacaaaaauaoaaaaaaaaaaabaaaaaaacaaaFataubbauauauatauatauauauatauauauauauathJauatatgIataubbaaacaaaabbdxauaoaFbbaudRdRdRbbbbataubbaoaFacaaacacaaaaaaaaaaaaaaaaacaaaaaaaabUacbehKaabeadaxaaacaxbShLaxacaahgbQbQbSaaaaaaaaaahObBdhacaaadbgaxbeaaaaaaaaaaaaacacbUaaacacaaaaacaabUhhdnepacacaaaaaaacaadnepaaacacacaaaaaaaaaaaaacaaephjhiaaacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaFaaaaacaadwauauaaaaacaaaaaaaaaaaaaaacaaaoauauauatauaaauauauauauauaFaFbcaoaFaoaoauauauauaFaFaaaaaaacaaaoaubbatauatauaFacacaaaaaaaaaaaaacaaaaaaaaacacaaaaacacacacacaaacacacayayaybUaaacadbeaabeaxaaaxbBbBaaaxbQdXbSaaaaaaachLhwcZadbeaaadhTaxaxbeaaaaaaaaaaaaacbUaaaaaaaaaaaaaadndndnepaaacaaaaaaacbUdnaaacaaaaacaaaaaaaaacacacaaaabUhxhfacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaFaodEdEbbaoaubbauaFaFacacaaaaabaaaaaaaabdbdaFbdgYgYgYbdhXaahYbdbdaaaahZaaaFaaaabdaabdaaaaaaacaaaaaaaaaabdbdauauaobdbdaFaaaaacacaaaaacacacacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaybebeaaadaxaxacaabeadiaoxbBdbaxaaaaaaaaaaaaaaicidaabeaxadhTaxaxaxaaaaaaaaaaaaacaaieaaaaacacacaaepaaepepaaaaaaaaaaaabUdnaaaaacacaaacacacacepaaachMbUdnhNhiihacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFaaaaauauatauatbbbbaoaaaaacacaaaaaaaaaaaaaaaaaabdiiauauaFaFaaaaaaaaacaaaaaaaaaaacaaaabdbdacacaaaaaaaaaaacbdbdbbataFbdaoaoaFaaaaaaaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaayhDbehKadadaaaaaxaxadbBhPbBaaaaaaacbUaaaaaabBijbBaxbeaxadadadadadikaaaaegaabUacaaaaaaaaaaaaaaaaaaaaaaaaaabUaaacacaaaabUepepacaaacepaaacaaaadnacaabUdnhQhRbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaFaubbauaaaoaoaaaaaaaaaaaaaaaaaaaaaaacaabdauauinauauaoaaaaaaacacaaaaaaaaacaacZaaaaaaaaaaaaaaaaacaaacaaaoauaFbdaoaFaaaaaaaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaybeaaaaadaaaaaaaabUaxbBbBbBadaaaaacaaaaaaaadhbBbQdbaxaaadaxioaxaabehSdnegaaaaaaaaaaaaaaaaaaacaaaaacacacacaaaaaaaaacaabUdndnbUaaepaaaaaaaaaaaaaaaahUhWhVifcJaacZacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaFaaaaaaaaaabUaaaaepepepaaaaepepaaaaacaaaabdaaaFauaudEaohXaaaaaaaaaaaaaaaaaaepaaaaaaaaaaaaepaaaaacaaaaaaaaaoaoaFaoacaaaaaaaaacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaybeacaaaaaaaaaaaaaaaaaaaabeadaabUacaaaaaaaaadadadadaaaaaaaxaxbeaaigaaaaegegaaacacepaaaaaaaaacaaaaaaaaaaacaaaaaaaaacaaaaepdnbUacaaaaaaildnaaaaacaaaaaaaacZaaacaccZacaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaacacaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaFaabbbbaaacaaaaacaaaaaaaaaaaaaaepacaaaaaaaaacaaacaaaaaaaaaFaaacaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaayaaacaaaaaaaaaaacaaaaaaaaaaaxaaaaaaacaaaaaaaaacaaegaaacaaaaaaaaaaaaacacegaaaaaaaaaaaaaaaaaaaaaaaaaaaaepaaaaaaaaaaaaaaaadndnacacaaacaaaaaaaaaciwaaaaaaacacacaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaixaahZaaaaacacaaaaaaaaacacbUaaaaaaaaaaaaacaaaaaaaaaaaaaaacacacacaaacaaaaacaaaaaaacacaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacacaaaaaaacaaacaaaaacaaaabUacaaaaacaaaaaaaaacaaacaaacaaaaacaaaaacaaaaacacaaaaaaacaaacbUaaacaabUacbUacaaaaacaaaaaaaaacaaaaaaepaaaaacaaaaacaaaaaaacacaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUepaaaaacacaaaaacbUaaaaacaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaabUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaacaaacaaaaaaacacaaaaaaacacaaaaaaacaaaaaabUegaaaaaaaaaaaaaaacaaegacaaaaaaaaaaaaaaaaacacaaiEiNaaiNacaabUacaaaaiEaaaaaaacacaaaaaaepaaepeKeUaaacaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaabUdnaaaaaaaaacacaaaaimdnepaaacaaaaaaaaacacacacacaaaaiJiAaaaaaaaaaaacaaaaaaaaaaiAaaaaaaaaaaaaabababaaaaaaaaaaaaaadnbUaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacacacaaacaaacacaaaaaaacaaaaacaaegegaaaaaaaaaaegegegegacaaaaaaaciDiDacacaaegegaaaaaaaaaaaaaaaaaaaaaaiEiEiEiEiEiEiEiEiEiEiEaaaaaaaaaaacaaiLepepepdneKbUaaacaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacaaaaaadndnbUaaaaaaaaacjqbUdndnepaaacacacaaaaaabUacaaaaaaiziziAaaaaaaaaaaacaciAiPiziHiziQacacaaaaaaaaaaabaaaaacacaaaabUdnaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaaaaaaaacaaacacacaaaaaaiNiNiNaaacaaaaaaaaaaaaaaaaaaaaacaaiNiMiNacaaaaacaaaaaaaaaaaaaaaaacaaaaaaiNiGiFiRiRiRiFiFiGaaaaaaacacaaacaaaaacaaaabUeKeKaaacacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegegaaaaaaepepepaaaaepbUaaaaepaaaaaaaaaaepepepaaacaaaaaaiAipiUaciViziWiXiYiAiZaaaaaaaaaaaaaajajbjcizjdaaaaacacaaaaaaaaaaaaacacaaaadnbUaaacacacaaaaaaacaaaaaaacaaaaaaacaaaaaaacacaaacacaaacaaaaacacaaiNiMiMiMiNacaaaaaaaaaaaaaaaaacacaNiNiMiMiNiNaaacaaaaaaaaaaaaabaaaaacacaaiNiMiFiMiFiRjfiRiFiRiGiGiGiGacaaaaacacaaacaabUaabUaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacacacaaaaaaaaaaaaaaaaaaaabUaaaaaaepaaaaacacaciAiAiAjgjhiAiAiAiAiAiZjiaaaabUaaaaaaaajjaajljaaajmacacacaaaaaaaaaaacaaaabUdnaaaaaaaaacaaaaaaacaaaaaaacaaaaaaaaaaaaacaaaaacaaaaacaaacacaaaaiNiMiMiMiMiNaaacaaaaaaaaaaaajnaaaaaaiMiMiNiMiMiNiNacaaaaaaaaaaaaaaacaaiNiNiMiFiRiFiFiRiRiRiFiRiRjfjfjoiGaacJaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacjqepepaaepepbUepepepepaaaaaaiAjrjsjajtiAjujvjuiAizizaaacacacaaaaaajcjljkiziAjwaaaaacaaaaaaaaacacaaepdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacaaaaaaacaaiNiDiDiDiDiDiDiDiDaaaaaaaaaaaaaadhihiEjziEiEiEjxiEiEiEjBaaaaaaaaaaaaiEiDjCiDiMiMiDiDjDjEjDiDiDiDiDiFiRjfiFjFiNiNiDiDiDiDaaacaaepepepepepepepepaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaacacacacacaaaaaaaaaaaaaaaaaaaaacacaaiAiAiAjcjkiAiAiAiAiAjGaaaaaaaaaaaaiAjajcaaaaaaiAiAiAizaaaaacachfacaaaaepepaaaaacacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaaaaaaiNiMiDjJjKjLiNiCacaaaaaaabaaaajMiNjNjOjPiEjAjyjSjTjRjQjRiEacaaaaaajWaaiDiFiFiFiRiFiFjXjPjNjUjZkajViDkciFiFiDkdaakeiDkfkgiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacaaaaaaaaaaaaaaacaaaaaaacaaaaiAjrkhjkjkiAkikjkkizaaaaaaaaaaaaizaaaajcaaiziziAjYjcizaaaaiqirkbizizaaaaaaaaaaaaaaaaaaaaaaiskqaaaaaaacaaaaaaaaaaacaaacaaacacaacJaaaaaaiMiMitiNiNaaiuacaaaaaaaaaaaaaaaciNjNjNktiEjTkujTjTjRjTjRiEacacacaaacaaiDiFiGiFkviGiGkwjNkxjNkykzkziDiEkliEiDjNaaaajNjNjNiDaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaacacaaaaaaepaaacaaaaaaacaaaaaaacaaaaiAiAiAiAiAiAkBkCkDivjaiAaaaaizaaaaaaaaiAiAiAiAiAiAkFjkizaaizkokHjcjcizaaaaacaaaaacaaaaaakAkJkJizaaaaacaaaaaaacacaaacaaaaaaaaaaaaacacbUiMiMiDacacaaaaaadZaaaaaaaaacacaNiNjNjNkKiEkGjTjTjTjTjTjTkIiNiEaaiBiEaaiDiNkOkPiNaciLaajNkKkQkRkLkTiDkUkKkMiDkKiGiNiIaajNiDaaiNaciEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaepaaaaaaaaacacacaaaaaaaaacaaacaaaaizaaaaizizizaajajaaakVkSkZiKlbaajcjckWleiHiAiAkHaaaaizkXiAiAjcjaaaaaaaacaaaaaalgaaizkAlhkJiAaaaaaaaaaaizacacaaacaaacaaaaaaacdZaabUiMiNjDaaacaaliaaacaacJaaacaaaciNjNljlkkKiElljTlmjTjRjTjRiEiNiEiOaaiEaaiDiNiNaNaaaaacdhlokKlpiEiEiEiDlqkKkYiDiTjpjeaciGkviDaaaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaiSiSiSiSiAiAiAiAiAlaiAjcjkjaizjcjalvjckHiHiHiHldaaiHiHjcjclrlfizaaaaaaacacaaaaaclglzlAlBlsluaaaaaaaaaaaclEaaacaaaaacaaaaaamhacaalwdniNlHiDjIcZlKkziNiNaaacacbcaaaaiNjNlMjNlNiEjTjTjTjTjRlOjRiEiNiEaaaaiEaaiDacaaaaaaaaaaiEjDlxjDiElQlQiDlqkKlyiDlSaaacaaiGjPiDaaaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaacacacacaaaaaaacaaaaaaaadnbUaaaaaaacacaaaaaaaaaaacaaaaaaacacaaaaaaaaaalnlIlCjakmizjcaalXlYjcjkjclJiHiHiHmalGiAiAlPiAiAiAaaaaacacacaaaaaaaalgmdmemfmgizaaacaaaaaaacmgmhacaaaaacmiacacaaaaacaaifiNiMiDmkdhmlmmmnmkiEiNiNiNaaaaaalHjNjNjNjNiEjTjTjTiEiEiEgEaaiEiEiEiEacacacbUaaaaaacJiNjNkKkziNmokziDiDlRmqiDjNiGiNiGkKjPiDaaaaiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaacacacaaacacaaaaaaacaaaaaaaaaaaalTjgizaaaakpknaaaaaajcaajclJiziHizlVlUiAmvjciHmwmxaaaaaaaaacaaaaaaizmymzmgizaaaaacaaaaaaaaacmgaaaaaaaaaaaaacaaaaaacgdDdnmBiMmCiNmBmDjNjNlHiEjNkziEiEaaaciEiEjNkKiEiEiEmbiEiEiEiNiNaaaaaaiNacaaegaaaaaaaabUaciNmFkKiGaaaakziDjNkKjNiDkgkgiGkKiGmGiDiNaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaaaaaaegaaaaaaaaaaaaaakrlZmJaaaaaaizaaaaaaizjajcjckHmLiHiziHmMmcjcjkjcmOmPaaaaaaaaaamQaaiziHmRjcmSaaaaaaaaaaaaaaaaaaizabaaacaaaaaamhacaaacaaksdniNaaiDaciCiGkKkKmpiEjNiNacacaaaaiNjNjNjNkzkKjNkKkKjNiEiEmVmViEiEiEiEaaacaaaaaabUacaakEiNjNjNaaaciNiDiGkKjNiEmYkNaamrnbiDiDiNiEiEacaaaaaaaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacepepaaaaaaaaaaaaaaaaaaaaaaaaaaaadhmtmsmtaaaaaaaaaabUaaaaaanfiAiAngiHiHiHnhnijcjcjciHmuizaaaaaaaaiziHnkiHiAiHizaaacaaaaaaaaacacaaiHbUaaaaaabUbUlcaaacaaaaepbUaaaciDaaacnmjNjNmDiEjNjNiNaaaaacaakzjNaaiGkviGiGjNjNiEiGkviGjonniGiEaciDacaaaaaajnaaaaaabcjNjNiNaaaabciGiGaaaaaaaaaakvkznpiNaaaaaaaaaaacaanqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaamIbUmIaaaaacacacacaaaaaaaaizmEiAmHiHiziznunviHjkjciHmuiHizaaaaiAmKiAiAiAiAjcizaaacaaaaaaaaaaaajajkaaaaacaaltlclcaaaaaaaalcbUacaciDaaiEiNiEnyjBiEjJjNjziEiEaaiNiEiEjzacacaaiEmNiEiEnAnBnCnDnEnAiElDiDiDacaaaaiEacmXiEiEdEdEkzaaaNacacaaacaccJacaajNjNjNaaacaaacaaaaaaaaiEaaaaaalFiEaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaaaaaaaaaaaaaaaaaaaaaamTaamWaaaaaabUaaaabUaaaaaaaamUaaiziziHiHiHnajcjciHmOmxjcjciziAnLjcnMnNjjiAnOaaaaacaaaaaaacaaaajajcacaanPcZaabUdneplclWaaepaaaaaaaaacaaaanRjNjNjNjNiNiEnSkKkKkKaaacacaaaaacaaiNjNnTnUnVjNjNjNkKiEiFiFiDaaacacaaiGkKjNjNaaaaaaaaacaaaaaaaaacaaiDiDiDiDiDaaacaaaaaaaaacaaiNiMnWiMiMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacepaaaaaaaaaaaaaaaaaaaaaaaaaaaamIaNndaaaaaaacacbUnjaaaaacaanoaaaaaaiziHiHkHiHjciHntmPaajHjcmKjcacjcjkaciAaanOacaaaaaaaaaaaaizjkjkbUaaaaaabUeidnepbUnwecepdnaaaaaaaaaakzkzofjNkzkzaaaaaaiGiGnRaaacbUaaaaaaaciGkKogjNjNohjNoijNojiFiRokaaiNiNaajNkKolaaaaacaaacaaaaaaacaaaNaaaakznzaaiDacaaaaaaaaaaaciNiFiFnqiMiMiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanHaaacaaaaaaaaacaaaaaabUacaaacaaacacaaizopmaoqorosiAiAacaajciAotounIaaaaaaaaaaaaaaaaacacaaaaizjcibaaiLaaacepepepepepepaaepaaaaaaaciEaaiNiEiEiEiEiNaaacaaoxiGkKaaaaacacaaaaacaajNnJjNjNoAjNkzoBiEiFiFiDiDiDiDiDnKiDiDiDiEaciEaaaaaaaaaaacaaacacaakzaaaaacaaaaaaaciEiNiMiEnqiEiEnqiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaabUaaaaaaacaaaaacacacaaacaaaaaaaaaanYiAiAmZncncobiAacaajciAiAiAiAiAaaaciAoHacaaacacaaoIiAoIizacaaacaaaaacaaaaaaacacaaaaaaaaaaaclSiNjNiNkKkKjNaaacaaaaacaajNjNaaaaaaacacaaaajNnToJkKjNoKkzjPiElDiEiDjLkzkziNkzkzeciDacacaaaaaaaaaaaaaaaaaaaaacaaaaiDaaaaaciEiEiEiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaizizocoMnenlneoeiAlvaajkjcjcjcacaaaaacizizaaacacaaaajajcjcaaaaaaacaaoQaaaaaaaaaaacaaaaaaaaacaaiNkzjNjNkKoRoSaaacaaacaaaajNjNjPiEaaaaaaoToUoVogkajNjNkzoWiNiEaaaaiDoXkzkzoYiNiNaaacaaacaaaaaaaaaaaaaaaaaaaaaaoZnraaaaaaiEiNaaaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanxnsnsnGepepegegegegegaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiLaapeaaizpgphomowovnQiAizaaacjkpmpnaajHjkjHaaizaaaaacaaizlvjHjaaaaaacacaajnacaaaaaaaaaaacacaaaaacaciEiEiEiEjNkKiGaaacacaaaajNjNjNpojDaajNppiEiEiEiEiEjNpqiNaaacepacaaiDjLkziNaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacaaaaiNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXbUbUbUepegegdnozdnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaizaaaaacjcpsnQnQnQnQiAizaajajajcjcptaajkizizaaizaaaaizaajclviHizaaaaacaaacnZepepepepacaaaaaaaaacaaaciNiNiEpvjNpwiNiCacaaaaiGjNpxmpiEiNjNpyjNkzpzkziEiNiCacacacacaaiDiDiDiDaaacacaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaegaaaaaaiDiDiDiNiNiNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoabUbUbUegegdndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaacacpBiAjcjcjkjcjcoDoCneneneiAizaaiziAiAiziAiAizaaaaiziziziAiAiHjkjkiAiAaaaaacaaaabUoddnbUaaacaaaaabaaaaaapFacoEiEiEiEiEpHiNacaaacaaoLiEiEiEkziGppjNjOjOpJiEaaaaacaaaapKaciDacacaaaaaaaaaaaaaaaaaaaaaapkoPpraaaaaaaaaaaaaaaaaaaaaciNiDiEoniEiEiEiEiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepegoaegegdndndndndndndnegegaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaacaapuiApQizjHjkpCiAoooypGpIiAizacaaaaizizaaaaizaaaaaaaaaaaaiAizjciHiAaaaaaaaaaaacaabUdnepepaaaaaaaaaaaaaaaaacpWpXpYjDpZpLqbacacaaaaoFqdqejDjNkKppiEqfqgiNiEaaacacaaacepaaacacaaaNaaaaaaaaaaaaaaaaaaaapNpMpPaaaaaaaaaaaaaaacaaacacaaiDoGoGoNiEaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepegdndndndndndndndndndndnegegaaaaaaaaaaaaaaabaaaaaaaaaaababaaaaaaaaabaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaacaaqniHjcaaaciziHiAiAiAiAiAiAizizacaaaaaaaaaaaaaaaaaaaaaaizizaaiziHiAaaaaaaaaaaaaacaadnepaaaaacacacaaaaaaacaaiNkKkKqokzjNjNaaacaaacoOjNjNpRjNjNiEqriNaaacaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapUqtpVaaaaaaaaaaaaaaaaacacaaaaqaoNpaoGqaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegegdndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaapfqAqhqciHaaaaaaacizizizizizizizizacaaaaaaaaaaaaaaaaaaaaaaiAaaaaiHizaaaaaaqEacepacaaepepaaaaacacaaaaaaacaaiNqFqGkgjDqHkzjNiNacaaacaaqIqJjDkKkKiEqilLacacqLaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaiDoNoGoGiEaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaababaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaadhdhpBiAiAqOqOacacaaiAiAiAizacizizacaaaaaaaaaaaaaaaaaaaaaaaaizaaiziHaaaaacaaacbUaabUaaaaaaaaaaaaepacaaaciEiEiEiEiEiEiEiEiNiEiEiEaaacaciEiEiEjNiGqPkzqQaaaaaaaaaaaabUaaaaaaaaaaqjaaacaaacaaaaacaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaacqkaaiEoniEiEaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndndnegaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaababaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaabciAqUqTqViAaaaaiAaaacaaacizaaaaaaaaaaaaaaaaaaaaaaaaaaiAiHaaizaaaaacaaacegegegegegaaaaacacaaaaaaaaaaiNiNiNiNaaaaiNaaaaacbUaaaaaaaaiNiEiNaaiEiNaaacaaaaaaaaacaciEacaaiDacacaaaaiNqlacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaqqaaaaiNiNiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapibUbUbUbUbUbUbUpjozdndndndndnozegaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaabaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqsacacacacacacacacacacacacacacacaaaaacaaaaizaaaaacaaaaaaaaaaaaaaaaaaiziAizaaaciSiSaaaaaaacaaaaacacaaaaaaaaaciDiDiDiDiDiDiDiDiDiDiEacaaacaaaaaaacaciEiEaaaaaaaaaaacaaaajnaciNaaiMiNacnFaaiNiNkzkziNiNacaaaaaaacacaaaaaaaaaaaaaaaaacaaaaquaaaaaaaaaaaaaaaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndndnegaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiAiziziAaaaaaabUizizaaaaaaaaaaiAaaaaaciSiSaaaaaaaaacacaaaaaaaaaaaaaaaciNrcrdiFiFiFiFiFreaaaaaaacaaaaaaaaaaacaaaaacacaaaaaaaaaaaciEiEiEiEaaaciDkzplqykzrhkzkzaaaaacacacaaaaaaacaaaaaaaaaaacacaaqBaaaaaaaaaaaabUaaiNiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegdndndndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaacoIiziziAiAiAiAiAiAiAiziziAiAiAiAiHaaaciziHbUacacaaaaaaaaaaaaacaaaaaaacaaiRjfiRiRiFrjrkrlaaaaaaaaaaaaaaabaaaaaaacaaaarmaaaaaaaaiErnroqCiEaaaaiDkzkzrqkzkzkzrriDiDiDiDiDiDacacacaaaaiDiDaaaaacaaqKaaaaqNaaaaaaaaaaaaiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegegdndndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaabUacaaaaaaaaaaaaaaizrtrtiAaaaaaaiziHiHiAizaaacizaaaaacaaaaacacacaaacacaaaaaciNmAiFiFiFiFiFiFiRruaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaiErvrwrxiEaaiNiDiDiDiDiDiDiDiDiDryrzaaaaaaiDiDaciDacacaaaaaaaaacegaaaaaaegaaaaaaiEiEiEiEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaepegdndndndndndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaiziAaaaaacaaiziziAaaaaaaiHiziHaaaaaaaaaaaaaaaaacacaciNrAkwiFjfiRiRiFiFrBruaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacbUiEqRrDrEiEaaaaaaaaaaaaaaaaaarFiNaaaarGaaaarHiNaaaaiDaaaaiDiDaaaaacegegegegaaacaaiNiNryiEiEiEiEaaaaaaaaiEiEiEaaaaaaaaaaaaaaaaaaepegoaegegdndndndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaacacacaabUacbUaaacaaoHoHaaaaiAaaacacaaacaaiAaaaaiHiziHaaaaacaaaaaaaaiNiFiGaaiGkvrIrJiFiRiFiGiNiMiRrKaaaaaaaaaaaaaaaaaaaaaaaaacaaacaaaaaaaciErLrDrwiEiNaarMrMaarNrNryiNaaryiEiErOrPiEiErQkKaarHiNaaaaaaaaaaaaaabUaaacacacpDaaiNaapAiNaapAaaaaaaaaiNiNaaaaaaaaaaaaaaaaaaaaoabUbUbUegegdndndndndnegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaacbUaaacacaaiAaaaaizizaaaaaaacaaiAiHiziHiSacaaaaacacaaacbUiErTiFrUrViFiMrWiFiRiGiGaaiNiFrXaaaabcaaaaaaaaaaaaaaaaaaacacaaiNkKiGaaiErYrZsaiEaaaaiEiEpOiEiErOpcrPiEiEaaaaaaaaiDiEojiEiDiDaaaaaaaaiDiDaaqjaabUacsbscaaaasdiEiEiEiEaaaaaaaaiEiEiEaaaaaaaaaaaaaaaaaapEbUbUbUepegegdnozdnegegaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaacacaaaaaaaaacaaaaaaacacaaaaoHaaaaiAaaacaaacaaaaiziHaaaaaaacaaaaaaaaaaacaciEseiRiFiFiFmjiNiFiFiNaaaaaaiNcZaaaaaaaaaaaaaaaaaaaaaaaaacacaciNjNkKiNiEsfsgshiEaaiNiEsisisjiEaaaaaaaaaaaaaaaaaaaaaaaNskiDiNaaaaaaqSaaiNaaaaqNaciDiDiDiDqXqWiDaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaapSnsnspTepepegegegegegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaacacacaaacacaaaaoHaartiAizacaaaaaaaaiAizaaaaaaaaaaabaaaaacaaacsqiFiFiFiFsracssiGiFiNacaaaccJaaaaaaaaaaaaababaaaaaaiEacaaiEiEiEmniEiEiEstrOrPiEiEaaiEsusvswiEaaaaaaaaaaaaaaaacJaaaaacaaaaaaacaaacaaiNacaaaaaaaciDaaiDiNiGraiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaacoIizrtiAizizizaaaaiziAaaaaaaaaaaaaabaaacaaaaaaiEsysziFsAiNaabUiGiFiNaaacacacsBaaaaaaaaaaababaaaaaaiEaaaajNjNiNiNaaaaiGjNjNjNkzpOaaiEiEiEiEiEaaaaaaaaaaaaaaaaaadhsCaaaaacoZaaacacaaaaacacaaacaciDaaiDsDrgrfiDaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacegegaaaaegepgEaaiziAiAgEaaaaiAiAiAiAiAiAiAiAaaacaaaaaaaaabaaaaaciDiDiDsGiDsHsImAiNiDaaiGiFaaaaacaaiDaaaaaaaaaaaaabaaaaaaiEkzjNjNjNiNaaaaaajNsJjNjNkziEiNiNiEaaaaaaaaaaaaaaaaaaaaaaaaiDiDsKiDiDacacaaaaaaaaaaacacacaciDaaiDrpsmrCiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbUbUaaaaaaaaaaaaaacJizaaaaaaaaaaizaaaaaaiziAaaacaaaaiSaaaaaasosnsxspsEsnsFiFrjaaiNiNacaaiNaaaaaaacaaaaaaaaaaaaaaaaaaaaiDiEjDsLjDiEaaacaaiEiEiEiEiEqPiEiEaaiEaaaaaaaaaaaaaaaaaaaacZaaiDkzkzkziDiNacaaaaaaqjiNkzacacaciDaaiDsVsMpbpdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaiziSiSiSsYsZtatbiStctdiSiSizaaiziAaaaaaaaaaaacaaaciDtetfiDmAiDiDiFiFiFiFiNacacacaaacacacaaaaaaaaaaaaaaaaaaaaiDrxrxrxtgjDcZaathmAtijNtjiEkzkziEiNiEaaaaaaaaiDiDiDiDiDiDiDiDiDiNiNkziDkziNacaciNkzbUkzaatkbUiDaaiDkdsNkdacaaaaaaaaacaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiSaciAiAtmacjctntotpiHiHiSiziziziAaaaaaaiSiSaaaaacaamjiFtqtrsPiDttiRiRiFiNaaacaaaaaaacacaaaaaaabaaaaaaaaaaaaiDtujorwsTiEoWjNjNtwkztxtyiEkzkziEiNiEaaaaaaaaiDtztztztAtBjNjNiEacaakziDiDiDiDiDiDiDiDiDiDiDiDiDaaactCsMtCacaaaaaaaaacaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaadhdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaaaaaaaaciHtEiAacizjkjctGizaaaaacaaaaaaiAaajaiHiSaaacaaactHaadEtIiRiRsWiFiFiRiFiNaaacacaaaaacaaaaaaaaaaaaaaaaaaaaaciDrxtKtLiGtMtNiGjNiEiEiEiEiEsUkziEiNiEaaaaaaaaiDtzsXtztQtRjNaaacaciNiEiDiDaaaaaaaaaaaaaaaaaaaaaaaaacaatlaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaacococodhaaaadhcococodhaadhcocoaaaaaaaaaaaaaaaaacaaqmjcaaaaaatVtWaajHjkjaaaaaaaaaacaaaaaaaaizjkjcizaaacaaaaactXaciNiRiFiDpbtYiNiNaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiCiDiGaaaatsiEuciNudjDueufugiEiNiNiEaaiEaaaaaaaaiDtztztztAuhjNoWaaacaajNkziDaaaaaaaaaaaaacaaaaaaaaaaacaatlaaacacaaaaaaacaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaqpiHaaacacjkuktFjkizaaaaaaaaaaaaaaaaaaaaaajajkjaaaacaaqvaaacaaiNiRiFiDiFiFaNacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDrxkvumunuoacbUiNupjNjNuqiEacaciEiNiEaaaaaaaaiDiEiEiEiEkzjNjNiNiNjNkKjNiDaaaaaaaaaaaaurururusacacacacutacacacacacczururaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDtvtJaatDtvtJaatDtvtJaaaaaaaaaaaaaaaaaaaaaaaaaaacacqwiHizjkjcjctOjcjaiHaaacaaaaaNaaaaaaaaaaacaajcjcaaaaaaaaacacaauzjfiRiDiFiFaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDaaiGqxuBiEcZiNiNiEiEiEiEaaacaabUaciEaaaaaaaaiDtztztztzkzaaiNjNjNjNkKkKiDaaaaaaaaaaaauraaacaaacaaaaaabUaaacacaaaaaaaauraaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDtPtJaatDtPtJaatDtPtJaaaaaaaadhaaaaaaaaaaaaaaaaaaactSiHnkuEjkuEuFizaaaaacacaaacacacacacaaaaaaaciziSaaaaaaaacZcJiNuGuHtTiDuJiRiFaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDiDiDiDiDiDiEqPiEiEiNiNacacaaaaaaaaacaaaaaaaaiDtztztzcJaaacaaqzaaiNkzkKiDiDiDiDaaaaaauraatUtUtUtUtUmXiNmXtUtUtUtUtUaauraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDtPtJaatDtPtJactDtPtJaaaaaaaacoaaaaaaaaaaaaaaaaaaaciSjcjcuMjcnkiAaaaaaaaacZaaaaaaaaaaaaaaacaaaaaaaaizaagEaaiDiDiDiDuNiDiDiFiRiFmAacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaamBaamjpOuOkKjNpOiNiNiNacaaaabUacacaaaaaaaaiDtzacacaaaaaaacacacaaiNjNuPuQuRiDaaaaaauracuatZtZtZtZubiNuiujujujujulacuraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhdhaaaatDtPtJactDtPtJaatDtPtJaaaaaaaaaaaaaaaaaaaaaaaaaciAaaiSiAtctatatbiAaaaaaaaacJaaaaaaaaacaaaaaabcaaaabUiSaaaaacuuuZiDvavbvciDiFiFvdveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdhaavfvgiEjNkKjNiEiEiEiEiEaaaaaaacepaaaaaaaaaaaaacaaacaaaaaaaaacacaavhkKviuviDaaaaaauracuwuwuwuwuwiCiNiCuwuwuwuwuwacuraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcocoaaaatDtPtJactDtPtJaatDtPtJaaaaaaaaaaacacvliSiSiSiSiAiAaaiStEjkjkjcizizaaaaacaaacaaaaaaacaaaaaaaaacaaaaaaaaaaaaaajnaaiDvmvnvciDvopcvpiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiLacaaaaiNiDiEqPiEiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaacaaaaaadEkKkKvqiDaaaaaauraaacaaacacacaaiNaaacaaacaaacaauraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaaaacvracacacvracaaacvracaaaaaaaaaavsvtvuuxuAuyuCiziziziSnkjcjkizizizbUcZaaaaacaaaaaaacaaaaaaaaacaaaaaaaaaavzaavAaciDvavBvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacacaaaaaacJiDjNjNkziNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaiEiEiEiDaaaaaNuraatUtUtUtUtUaciNactUiNiCiCaabcaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaacoaauDuKuIizizizizizizizizizizizuLuKuKuKuSuUuTuUuVuWizuXizizvMiSiSiSiSiSiSvNiSacacaaaaaaaaacacaaaaacacaccZaaaaacaaaNaaiNaciDvavOvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdhvPvQvQvRiDvSkKiNiCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUacaaaaaacJdhaaaaaauracuatZtZtZtZubiNuiujaaaNababcJababaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabababaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaacuYacaaacuYacaaacuYacaaaaaaaaaavsvttdvjiziziSizvVizvWizizizaaizizbUaaaaaaaaaaaaaaaaaacZaaaaaaacaaaaaaaaaaaciDiDiDvavXvcaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaiDkziGiNacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaacaaaakzaaacacaaaaaauracuwuwuwuwuwaaiNacuwiCababababababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcoaaaatDvktJaatDvktJaatDvktJaaaaaaaaaaacacmPiSiSiSiSiAizvZizizdZacaaiAiAaaaaaaaaaaaaaaaaaaaaaaaaaaaacJaaaaaaaaacacqDcZtfvawbvcaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDiNiCacaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaccJkzkzaaacaaaaaaaausaaacaaacaaacaaiNaaaaababababababababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatDvktJactDvktJaatDvktJaaaaaaaaaaaaaaacacaaaaaaiAizacaaaaacacaaaaizizaaaabcacaaaaaaaaaaaaacaaaaaaaaaaaaacaaaaaaacaacJvOvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDiNacacaaiDiDiDiDiDiDaaaaaaaaababaaaaaaaaaaaaaaaaaaaaacaaaaiEqMacaaaaaaaaaauraatUtUtUtUtUaciNacaNabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaatDvktJaatDvktJaatDvktJaaaaaaaaaaaaaaaaaaacacaavvaacZacacaaacaaaciziziSaaaaacaaaaaaacaaaaaaaaacaaaaaaaaacbcaaaaacacaavOvcaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaiDiDiDiDiDaaaabUiEjPwfwgwhjNiDaaaaaaaaababaaaaaaaawiaaaaaabcacacactziEaaacaaaaaaaaaauracuatZtZtZtZubiNuiaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababbFbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDvktJaatDvktJactDvktJaaaaaaaaaaaaaaaaaaacaaaaiAaacZaaaaaaacaaaciSiSiSaaacacaaaaacacacaaaaaaacacaaaaaaaaaaacaaaawjvawkvcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaNaciNjNjNiDiEiEkzkzlHiEjPoRoRwloRiDaaaaaaaaaaabaaaaaaaaaaaaaaaaactzacacbUiEaaacaaaaaaaaaauracuwuwuwuwuwaaiNaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbFbFbFbFababababaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaatDvwtJaatDvwtJaatDvwtJaaaaaaaaaaaaaaaaacaaaaaciAaaacacaaaaaaaaacaaaciSizaaaaacaaaaaNaaacaaaaaaaaaaaaaaacaaacacaaaaiDuNiDiDiDiDiDiDaaaaaaaaaaaaaaaaaaababababaaaaaaaaacaciGjNiDjNiEiEvxiEiEjPkKoRwowpiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaactzacaaaaiEacaaaaaaaaaaaauraaaaacacacaaaavyacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaababbFbFbFbFbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaaaaaaadhdhdhaaaaaaaaaaaaaaaaaaacacaaaaaaacaaaaaaaaaaaaaaaaacaaaaiSiHizacaacZaaacaaaaaaaaaaaaizaaegacaaaaaaacaaacwriRwswtiNiNpAaaaaaaaaaaaaaaaaababababababaaaaaaaaacaajNwujNjNjNjNjNjNkKoRkKkKjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDaciDacaaaaaaaaaaaaaaurururururaaaaaatlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbFbFbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcocococococococococoaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaiSiSiSiSiSiSiSiAjccgaaaaaaaaaaaabUiHiSiSaaacacacaaaaaaaaaaaaiNiRiEiDiDiDiDaaaaaaaaaaaaabaaaaabababababaaaaaaaaaaaaiNwujNjNjNjNkKjNkKjNjNjNjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauracwvacuraaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabababaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaaaaaaaaaabaaaaaaaaaaaaiSizacizizizizwwjkjaizizaaaaaaaaaaiziHizaaacaaaaaaaaaaaaaaaaacaaiNiFiDaaaaaaaaaaaaaaabababaaaaababababaaaaaaaaaaacaaiDjPjNjUjPwxwyvCvfwAmmvCiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauraaacaauraaaaababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaabaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacodhaaaaaaababababaaaaaaacaaiSizizizacizizwwjcjcjcjcizaaaaaaiziHizaaacaaaaaaaaaaacacaaaaacacacrBiDaaaaaaaaaaaaaaababaaaaababababababaaaaaaaaaabciDwBkKwCjNpXrJjNwDrJwDjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaurururururaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhcodhaaaaaaababaaaaaaaaacaciSacwEizacaawFiSiSiSvDiSizaaiziSiSiSiziSacaaaaabaaaaqYacaaaaaaaaacwIiDaaaaaaaaaaaaaaaaabaaaaaaabababababaaaaaaaciNaaiDwJkKjNjNpXrJjNkKrJjNjNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocodhdhaaaaaaaaaaaaaaaaaciSizizizaaaciziSmQizqZiziziSizwKizqZqZizacacaaaaaaacacaaaaaacJaaiNiFwLaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaciNjNiNiDwMjPjNjNwNogkawOrJjPwOiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoaaaaaaaaaaaavEvFvFvFvFvGizizizwEiSwKizqZizmQiSizizizqZqZizizizacacaaaaacacaaaaaaaciNiFnWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJaaaaiDiDwSjNpXiDiDwTiDiDiDwTiDaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavEvHrbwWvIvFvJwEaciziziSwKizqZizmQiSqZqZqZqZqZqZqZqZacaaaaacaaaaacacaaacacmjpAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDvfmlmmiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavKxawVwVwVvLizizizizvTiSiSiSvUiSiSiSqZiStctbxetctbiSiSaaaaaaiDxfiDiDaaaciDiDiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawavYwWwVwcvFvGizacaaizriqZizqZqZqZqZaaiSrsrsrsrsrRiSiSiSabaaacaaaaiNrSiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawavFvFvFvFvJslaaizizriizaaaaaaaaqZqZxerRrRxjrsrsriqZizaaaaaaacacaarSiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciSiSiSiSiSiSiSiSiyacaaqZizqZqZiSrsxkxlrsqZiSiziyaaaaaaacacwsiEiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaiSacaciSwwwwwwwwiSrswdxnqZiziSaaacaNacaaxoiDxpweiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciSaciyiSvMxrxrxrtWrRxsmQmQizxtaaaaaaacsOiDiDiNiNiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaacaaaciyiSiStctaxtxvrsrsizizacdZacacaaacaaaaiDpAiDiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaabababaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaegaaaaaaaciSaaaaaasYsZtatataxtacaaaaaaaabcaciNaaaaxwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaabababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaegegacbUacaaaaaaaaacaaaaaaaaaaacaacZaacZaaaaacaaaaxwiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegaaacacacaaaaacacacacacacaaacacacaaaaaaaaaabUxxdZaaiDaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaabaaaaaaababaaaaaaaaaaaaaaaaaaaaabababababababababaaaaabaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbUwmaaacacacsQaaaaaaaaiLaaacaaaNaaaaaaaaaaaaaciDaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaabaaaaaaababababababaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaegaabUbUaaacacacacaaaaaaaaaacZaaaaaaaaaaabaaaaacsRiDaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaegaaaaaaaaaaacacacaaacacacacacaaaaaaaaaaaaaadZaaiDiDaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababbFababababababababababababababaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaegbUacaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaacaaiDiDaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFabababababbFabababababababababababababababaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaegaaacacaaaaaaaaacaaacaasSaaaaacaaaaaaaaaaaaaaaacZiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFabbFbFabababbFbFbFababbFbFbFabababababababababaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaacacaaaaacaaacaaacaaaaaaaaacaaaaaaaaaaaaaaaaaaiDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFababababababbFbFbFbFabbFbFbFabababababababababaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaegegacaaacbUacacacacaaacacacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFababababababbFbFbFabbFbFbFbFbFababababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaegaaacaaacbUwmacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababbFbFbFababababababbFbFbFbFabbFbFbFbFabababababababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaegaaacacegaaaaaaaasQacacsQaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababbFbFabababababababbFbFbFabababbFbFabababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaegaaaaacegaaaaaaaaacacacacacaaaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababbFbFbFbFababababababababababababababbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUaaacacacaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababbFbFbFbFbFbFbFbFabababababababababababababbFabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFbFababababbFbFababababababababababababbFbFabababababababaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFabababababababbFbFbFabababababababababbFbFbFababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFabababababababbFbFbFbFbFbFababababababbFbFababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFbFababababababbFbFbFbFababababababbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaabFababababbFbFababababababababbFbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababababbFbFbFbFbFabababbFbFbFbFbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbFbFabbFbFbFbFabbFbFbFbFababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFbFababbFbFbFbFbFbFababababaaaaabaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababbFbFbFbFbFababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababbFbFababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaabababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababbFbFbFbFbFabbFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbFbFbFabababbFaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababbFbFbFababababababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabababababababbFbFbFbFbFbFababababababaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababbFbFbFbFababababaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababbFbFbFbFababababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababaaaaaaaaabaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaababababaaaaabaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababbFabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaabaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaababaaaaaaaaabaaaaababababababaaaaaaaaababaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaabaaaaaaaaababaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaabaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaababababaaaaaaaaabaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaabababababaaaaaaababaaaaabaaaaaaaaaaababababaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaabababababaaababababaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/Aurora-MapDev/aurora-8.dmm b/maps/Aurora-MapDev/aurora-8.dmm
new file mode 100644
index 00000000000..25a83f2dc95
--- /dev/null
+++ b/maps/Aurora-MapDev/aurora-8.dmm
@@ -0,0 +1,259 @@
+"a" = (/turf/space,/area/space)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/nano/images/Aurora-3.png b/nano/images/Aurora-3.png
new file mode 100644
index 00000000000..b420e6ca470
Binary files /dev/null and b/nano/images/Aurora-3.png differ
diff --git a/nano/images/Aurora-4.png b/nano/images/Aurora-4.png
new file mode 100644
index 00000000000..debe76a4c0f
Binary files /dev/null and b/nano/images/Aurora-4.png differ
diff --git a/nano/images/Aurora-6.png b/nano/images/Aurora-6.png
new file mode 100644
index 00000000000..2b05e54d6b0
Binary files /dev/null and b/nano/images/Aurora-6.png differ
diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js
index fb5a86ee3db..889c6a80424 100644
--- a/nano/js/nano_base_callbacks.js
+++ b/nano/js/nano_base_callbacks.js
@@ -87,8 +87,8 @@ NanoBaseCallbacks = function ()
marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px'
});
});
-
- $('#uiMapImage').attr('src', 'nanomap_z' + updateData['config']['mapZLevel'] + '.png');
+
+ $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png');
return updateData;
}
diff --git a/nano/templates/crew_monitor.tmpl b/nano/templates/crew_monitor.tmpl
index cd3a0146524..4bbf18c0656 100644
--- a/nano/templates/crew_monitor.tmpl
+++ b/nano/templates/crew_monitor.tmpl
@@ -1,30 +1,32 @@
-
-
-
-{{:helper.link('Show Tracker Map', 'pin-s', {'showMap' : 1})}}
-
- {{for data.crewmembers}}
- {{if value.sensor_type == 1}}
- {{:value.name}} ({{:value.assignment}}) {{:value.dead ? "Deceased " : "Living "}} Not Available {{if data.isAI}}{{:helper.link('Track', null, {}, 'disabled')}} {{/if}}
- {{else value.sensor_type == 2}}
- {{:value.name}} ({{:value.assignment}}) {{:value.dead ? "Deceased " : "Living "}} ({{:value.oxy}} /{{:value.tox}} /{{:value.fire}} /{{:value.brute}} ) Not Available {{if data.isAI}}{{:helper.link('Track', null, {}, 'disabled')}} {{/if}}
- {{else value.sensor_type == 3}}
- {{:value.name}} ({{:value.assignment}}) {{:value.dead ? "Deceased " : "Living "}} ({{:value.oxy}} /{{:value.tox}} /{{:value.fire}} /{{:value.brute}} ) {{:value.area}}({{:value.x}}, {{:value.y}}) {{if data.isAI}}{{:helper.link('Track', null, {'track' : value.ref})}} {{/if}}
- {{/if}}
- {{/for}}
-
+
+
+
+{{:helper.link('Show Tracker Map', 'pin-s', {'showMap' : 1})}}
+
+ {{for data.crewmembers}}
+ {{if value.sensor_type == 1}}
+ {{:value.name}} ({{:value.assignment}}) {{:value.dead ? "Deceased " : "Living "}} Not Available {{if data.isAI}}{{:helper.link('Track', null, {}, 'disabled')}} {{/if}}
+ {{else value.sensor_type == 2}}
+ {{:value.name}} ({{:value.assignment}}) {{:value.dead ? "Deceased " : "Living "}} ({{:value.oxy}} /{{:value.tox}} /{{:value.fire}} /{{:value.brute}} ) Not Available {{if data.isAI}}{{:helper.link('Track', null, {}, 'disabled')}} {{/if}}
+ {{else value.sensor_type == 3}}
+ {{:value.name}} ({{:value.assignment}}) {{:value.dead ? "Deceased " : "Living "}} ({{:value.oxy}} /{{:value.tox}} /{{:value.fire}} /{{:value.brute}} ) {{:value.area}}({{:value.x}}, {{:value.y}}, {{:value.z}}) {{if data.isAI}}{{:helper.link('Track', null, {'track' : value.ref})}} {{/if}}
+ {{/if}}
+ {{empty}}
+ " Unable to establish a connection to telecommunications! "
+ {{/for}}
+
\ No newline at end of file
diff --git a/nano/templates/crew_monitor_map_header.tmpl b/nano/templates/crew_monitor_map_header.tmpl
index f9f5e2f707d..d997087bbf6 100644
--- a/nano/templates/crew_monitor_map_header.tmpl
+++ b/nano/templates/crew_monitor_map_header.tmpl
@@ -3,6 +3,13 @@ Title: Crew Monitoring Console (Map header)
Used In File(s): \code\game\machinery\computer\crew.dm
-->
{{:helper.link('Show Detail List', 'script', {'showMap' : 0})}}
+{{:helper.link('Hide Map', 'close', {'showMap' : 0})}}
+
+ Z Level:
+ {{for config.mapZLevels :zValue:zIndex}}
+ {{:helper.link(zValue, 'close', {'mapZLevel' : zValue}, null, config.mapZLevel == zValue ? 'selected' : null)}}
+ {{/for}}
+
Zoom Level:
x1.0
diff --git a/nano/templates/crushercontrol.tmpl b/nano/templates/crushercontrol.tmpl
new file mode 100644
index 00000000000..480f37bd2e4
--- /dev/null
+++ b/nano/templates/crushercontrol.tmpl
@@ -0,0 +1,84 @@
+
Crusher Management
+{{if data.piston_count == 0}}
+
+
+ Intialize Crusher:
+
+
+ {{:helper.link('Initialize', 'refresh', { 'initialize' : '1' })}}
+
+
+{{/if}}
+{{if data.airlock_count > 0}}
+
+
+ Airlock Control:
+
+
+ {{:helper.link('Open', 'refresh', { 'hatch_open' : '1' })}}
+ {{:helper.link('Close', 'refresh', { 'hatch_close' : '1' })}}
+
+
+{{/if}}
+{{if data.piston_count > 0}}
+
+
+ Activate:
+
+
+ {{if data.extending == 1}}
+ {{:helper.link('Start', 'alert', { 'crush' : '1' }, 'active')}}
+ {{:helper.link('Abort', 'alert', { 'abort' : '1' })}}
+ {{else}}
+ {{:helper.link('Start', 'alert', { 'crush' : '1' })}}
+ {{:helper.link('Abort', 'alert', { 'abort' : '1' }, 'disabled')}}
+ {{/if}}
+
+
+{{/if}}
+
+
Crusher Monitoring
+
+
+ Linked Pistons:
+
+
+ {{:data.piston_count}}
+
+
+{{if data.piston_count > 0}}
+
+ {{for data.status_pistons}}
+
+ Piston {{:value.piston}}
+ {{if value.blocked == 0}}
+ {{if value.action == "extend"}}
+ {{:helper.displayBar(value.progress, 0, 100, 'good')}}
+ {{else}}
+ {{:helper.displayBar(value.progress, 0, 100, 'average')}}
+ {{/if}}
+ {{else}}
+ {{:helper.displayBar(value.progress, 0, 100, 'bad')}}
+ {{/if}}
+
+ {{/for}}
+
+{{/if}}
+
+
+ Linked Airlocks:
+
+
+ {{:data.airlock_count}}
+
+
+{{if data.message }}
+
+
+ Message:
+
+
+ {{:data.message}}{{:helper.link('', 'close', { 'close' : '1' })}}
+
+
+{{/if}}
diff --git a/nano/templates/layout_default.tmpl b/nano/templates/layout_default.tmpl
index 53701e30307..766fc39dac8 100644
--- a/nano/templates/layout_default.tmpl
+++ b/nano/templates/layout_default.tmpl
@@ -39,6 +39,13 @@