diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 16a2426569e..def6c6e4c11 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -92,7 +92,8 @@
/atom/proc/emp_act(var/severity)
return
-/atom/proc/bullet_act(var/obj/item/projectile/Proj)
+/atom/proc/bullet_act(var/obj/item/projectile/Proj, def_zone)
+ Proj.on_hit(src, 0, def_zone)
return 0
/atom/proc/in_contents_of(container)//can take class or object instance as argument
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index b0e04695ef0..624453380d3 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -423,20 +423,20 @@
var/reagent_id = null
if(emagged == 2) //Emagged! Time to poison everybody.
- reagent_id = "toxin"
-
- if(treat_virus)
- var/virus = 0
- if(C:virus2.len)
- for (var/ID in C.virus2)
- if (ID in virusDB) // If the virus is known, the medbot is aware of it and will try to cure it
- virus = 1
-
- if (!reagent_id && (virus))
- if(!C.reagents.has_reagent(treatment_virus))
- reagent_id = treatment_virus
+ reagent_id = "toxin"
else
+ if(treat_virus)
+ var/virus = 0
+ if(C:virus2.len)
+ for (var/ID in C.virus2)
+ if (ID in virusDB) // If the virus is known, the medbot is aware of it and will try to cure it
+ virus = 1
+
+ if (!reagent_id && (virus))
+ if(!C.reagents.has_reagent(treatment_virus))
+ reagent_id = treatment_virus
+
if (!reagent_id && (C.getBruteLoss() >= heal_threshold))
if(!C.reagents.has_reagent(treatment_brute))
reagent_id = treatment_brute
diff --git a/code/game/machinery/computer/telescience.dm b/code/game/machinery/computer/telescience.dm
deleted file mode 100644
index 6df9127872f..00000000000
--- a/code/game/machinery/computer/telescience.dm
+++ /dev/null
@@ -1,315 +0,0 @@
-/obj/machinery/computer/telescience
- name = "Telepad Control Console"
- desc = "Used to teleport objects to and from the telescience telepad."
- icon_state = "teleport-sci"
- circuit = "/obj/item/weapon/circuitboard/telesci_console"
- var/teles_left // How many teleports left until it becomes uncalibrated
- var/x_off // X offset
- var/y_off // Y offset
- var/x_co // X coordinate
- var/y_co // Y coordinate
- var/z_co // Z coordinate
- var/trueX // X + offset
- var/trueY // Y + offset
- var/obj/machinery/telepad/telepad
- var/tele_id = "Telesci"
- var/obj/item/device/sps/inserted_sps
- var/last_target
-
-/obj/machinery/computer/telescience/update_icon()
- if(stat & BROKEN)
- icon_state = "telescib"
- else
- if(stat & NOPOWER)
- src.icon_state = "teleport0"
- stat |= NOPOWER
- else
- icon_state = initial(icon_state)
- stat &= ~NOPOWER
-
-/obj/machinery/computer/telescience/Destroy()
- if(inserted_sps)
- inserted_sps.loc = loc
- inserted_sps = null
- ..()
-
-/obj/machinery/computer/telescience/attack_paw(mob/user)
- usr << "You are too primitive to use this computer."
- return
-
-/obj/machinery/telescience/station/attack_ai(mob/user)
- src.attack_hand()
-
-/obj/machinery/computer/telescience/attack_hand(mob/user)
- ui_interact(user)
-
-/obj/machinery/computer/telescience/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- if(..())
- return
- if(stat & (NOPOWER|BROKEN))
- return
-
- // On first use, the coordinates are null. Rather than displaying null, we'll set them to unset.
- if(!x_co)
- x_co = "Unset"
- if(!y_co)
- y_co = "Unset"
- if(!z_co)
- z_co = "Unset"
-
- var/data[0]
- data["coordx"] = x_co
- data["coordy"] = y_co
- data["coordz"] = z_co
- data["sps"] = inserted_sps
-
- // Set up the Nano UI
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "telescience_console.tmpl", "Telescience Console UI", 640, 300)
- ui.set_initial_data(data)
- ui.open()
-
-/obj/machinery/computer/telescience/proc/telefail(var/level)
- var/teleturf = get_turf(telepad)
- switch(level)
- if(1)
- for(var/mob/O in hearers(telepad, null))
- O.show_message("\red The telepad weakly fizzles.", 2)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, teleturf)
- s.start()
- if(2)
- for(var/mob/living/carbon/human/M in viewers(telepad, null))
- if(M.loc.loc == telepad.loc.loc) // Stops the geneticists with X-Ray vision getting irradiated
- M.apply_effect((rand(50, 100)), IRRADIATE, 0)
- M << "\red You feel irradiated."
- if(3)
- for(var/turf/simulated/floor/target_tile in range(0,telepad))
- var/datum/gas_mixture/napalm = new
- napalm.toxins = 25
- napalm.temperature = 2000
- target_tile.assume_air(napalm)
- spawn (0) target_tile.hotspot_expose(700, 400)
- for(var/mob/O in hearers(telepad, null))
- O.show_message("\red The telepad sets on fire!", 2)
- if(4)
- var/blocked = list(/mob/living/simple_animal/hostile,
- /mob/living/simple_animal/hostile/alien/queen/large,
- /mob/living/simple_animal/hostile/pirate,
- /mob/living/simple_animal/hostile/pirate/ranged,
- /mob/living/simple_animal/hostile/russian,
- /mob/living/simple_animal/hostile/russian/ranged,
- /mob/living/simple_animal/hostile/syndicate,
- /mob/living/simple_animal/hostile/syndicate/melee,
- /mob/living/simple_animal/hostile/syndicate/melee/space,
- /mob/living/simple_animal/hostile/syndicate/ranged,
- /mob/living/simple_animal/hostile/syndicate/ranged/space,
- /mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/giant_spider/nurse)
- var/list/hostiles = typesof(/mob/living/simple_animal/hostile) - blocked
- playsound(teleturf, 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/carbon/human/M in viewers(telepad, null))
- flick("e_flash", M.flash)
- var/chosen = pick(hostiles)
- var/mob/living/simple_animal/hostile/H = new chosen
- H.loc = teleturf
- return
-
-/obj/machinery/computer/telescience/proc/teleprep(var/type)
- if(!telepad)
- usr << "\red Error: No associated telepad. Please recalibrate and try again."
- return
- if(telepad.panel_open)
- usr << "\red Error: The telepad can not be used while in maintenance mode."
- return
- var/numpick
- var/failure = checkFail()
- if(failure > 0)
- numpick = pick(1,1,1,1,1,2,2,2,2,3)
- telefail(numpick)
- return
- if(teles_left > 0)
- if(prob(70 + (5 * telepad.efficiency)))
- teles_left -= 1
- tele(type)
- if(teles_left == 0)
- for(var/mob/O in hearers(src, null))
- O.show_message("\red The telepad has become uncalibrated.", 2)
- return
- else
- if(prob(25 + (10 * telepad.efficiency)))
- tele(type)
- else
- numpick = pick(1,1,1,2,2,3,4)
- telefail(numpick)
- return
- numpick = pick(1,1,1,1,1,2,2,2,2,3)
- telefail(numpick)
- return
-
-/obj/machinery/computer/telescience/proc/tele(var/type)
- var/tele = get_turf(telepad)
- trueX = (x_co + x_off)
- trueY = (y_co + y_off)
- var/target = locate(trueX, trueY, z_co)
- last_target = target
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, tele)
- s.start()
- flick("pad-beam", telepad)
- var/list/teleportables = list()
- switch(type)
- if(0)
- for(var/atom/A in tele)
- if(!istype(A, /obj/effect) && !istype(A, /mob/living/silicon/ai) && !istype(A, /obj/item/device/radio/intercom) && !istype(A, /obj/structure/closet/secure_closet/brig))
- if(istype(A, /obj/structure))
- var/obj/structure/S = A
- if(!S.anchored)
- teleportables += S
- else if(istype(A, /obj/machinery))
- var/obj/machinery/M = A
- if(!M.anchored)
- teleportables += M
- else
- teleportables += A
- for(var/atom/T in teleportables)
- do_teleport(T, target, 0)
- usr << "\blue Teleport successful."
- if(1)
- for(var/atom/A in target)
- if(!istype(A, /obj/effect) && !istype(A, /mob/living/silicon/ai) && !istype(A, /obj/item/device/radio/intercom))
- if(istype(A, /obj/structure))
- var/obj/structure/S = A
- if(!S.anchored)
- teleportables += S
- else if(istype(A, /obj/machinery))
- var/obj/machinery/M = A
- if(!M.anchored)
- teleportables += M
- else
- teleportables += A
- for(var/atom/T in teleportables)
- do_teleport(T, tele, 0)
- usr << "\blue Teleport successful."
- return
-
-/obj/machinery/computer/telescience/proc/checkFail()
- var/fail = 0
- if(x_co == "" || x_co == "Unset")
- usr << "\red Error: set X coordinate."
- fail = 1
- return fail
- if(y_co == "" || y_co == "Unset")
- usr << "\red Error: set Y coordinate."
- fail = 1
- return fail
- if(z_co == "" || z_co == "Unset")
- usr << "\red Error: set Z coordinate."
- fail = 1
- return fail
- if(x_co < 11 || x_co > 245)
- usr << "\red Error: X is less than 11 or greater than 245."
- fail = 1
- return fail
- if(y_co < 11 || y_co > 245)
- usr << "\red Error: Y is less than 11 or greater than 245."
- fail = 1
- return fail
- if(z_co == 2 || z_co < 1 || z_co > 6)
- if (z_co == 7 & src.emagged == 1)
- // This should be empty, allows for it to continue if the z-level is 7 and the machine is emagged.
- else
- usr << "\red Error: Z is less than 1, greater than [src.emagged ? "7" : "6"], or equal to 2."
- fail = 1
- return fail
- if(istype(get_area(locate(x_co,y_co,z_co)), /area/security/armoury/gamma))
- usr << "\red Error: Attempting to access telescience-protected area."
- fail = 1
- return fail
- return fail
-
-/obj/machinery/computer/telescience/Topic(href, href_list)
- if(..())
- return
- if(href_list["ejectSPS"])
- inserted_sps.loc = loc
- inserted_sps = null
- nanomanager.update_uis(src)
- if(href_list["setMemory"])
- if(last_target)
- inserted_sps.locked_location = last_target
- usr << "\blue Location saved."
- else
- usr << "\red Error: No data stored."
- nanomanager.update_uis(src)
- if(href_list["setx"])
- var/a = input("Please input desired X coordinate.", name, x_co) as num
- a = copytext(sanitize(a), 1, 20)
- x_co = a
- x_co = text2num(x_co)
- nanomanager.update_uis(src)
- return
- if(href_list["sety"])
- var/b = input("Please input desired Y coordinate.", name, y_co) as num
- b = copytext(sanitize(b), 1, 20)
- y_co = b
- y_co = text2num(y_co)
- nanomanager.update_uis(src)
- return
- if(href_list["setz"])
- var/c = input("Please input desired Z coordinate.", name, z_co) as num
- c = copytext(sanitize(c), 1, 20)
- z_co = c
- z_co = text2num(z_co)
- nanomanager.update_uis(src)
- return
- if(href_list["send"])
- teleprep(0)
- nanomanager.update_uis(src)
- return
- if(href_list["receive"])
- teleprep(1)
- nanomanager.update_uis(src)
- return
- if(href_list["recal"])
- if(telepad == null)
- for(var/obj/machinery/telepad/T in range(src,10))
- telepad = T
- if(!telepad)
- usr << "\red Error: No telepads in range were found."
- nanomanager.update_uis(src)
- return
- var/teleturf = get_turf(telepad)
- teles_left = rand(8,12)
- x_off = rand(-10,10)
- y_off = rand(-10,10)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, teleturf)
- s.start()
- usr << "\blue Calibration successful."
- nanomanager.update_uis(src)
- return
-
-/obj/machinery/computer/telescience/attackby(I as obj, var/mob/user as mob) // Emagging
- if(istype(I,/obj/item/weapon/card/emag))
- if (src.emagged == 0)
- user << "\blue You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!"
- src.emagged = 1
- else
- user << "\red The machine seems unaffected by the card swipe..."
- else if(istype(I, /obj/item/device/sps))
- if(!inserted_sps)
- inserted_sps = I
- user.before_take_item(I)
- inserted_sps.loc = src
- user.visible_message("You insert [I] into the SPS device slot.")
- attack_hand(user)
- else if(istype(I, /obj/item/device/multitool))
- var/obj/item/device/multitool/M = I
- if(M.buffer && istype(M.buffer, /obj/machinery/telepad))
- telepad = M.buffer
- M.buffer = null
- user << "You upload the data from [I]'s buffer."
- else
- ..()
\ No newline at end of file
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 16ce04eb3c5..530dca2617d 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -132,9 +132,9 @@
o += ""
else
o += ""
- o += "[celsius]Celsius "
+ o += "[celsius] Celsius "
o += ""
- o += "[pressure]kPa"
+ o += "[pressure] kPa"
usr << o
if( islist(users_to_open) && users_to_open.len)
diff --git a/code/game/machinery/telepad.dm b/code/game/machinery/telepad.dm
deleted file mode 100644
index e1a1a2afd9e..00000000000
--- a/code/game/machinery/telepad.dm
+++ /dev/null
@@ -1,78 +0,0 @@
-/obj/machinery/telepad
- name = "telepad"
- desc = "A bluespace telepad used for teleporting objects to and from a location."
- icon = 'icons/obj/telescience.dmi'
- icon_state = "pad-idle"
- anchored = 1
- use_power = 1
- idle_power_usage = 2
- active_power_usage = 50
- var/efficiency
-
-/obj/machinery/telepad/New()
- ..()
- component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/telesci_pad(src)
- component_parts += new /obj/item/bluespace_crystal/artificial(src)
- component_parts += new /obj/item/bluespace_crystal/artificial(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- RefreshParts()
-
-/obj/machinery/telepad/RefreshParts()
- var/E
- for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
- E += C.rating
- efficiency = E
-
-/obj/machinery/telepad/attackby(obj/item/I, mob/user)
- if(default_deconstruction_screwdriver(user, "pad-idle-o", "pad-idle", I))
- return
-
- if(panel_open)
- if(istype(I, /obj/item/device/multitool))
- var/obj/item/device/multitool/M = I
- M.buffer = src
- user << "You save the data in the [I.name]'s buffer."
-
- if(exchange_parts(user, I))
- return
-
- default_deconstruction_crowbar(I)
-
-/obj/machinery/telepad_cargo
- name = "cargo telepad"
- desc = "A telepad used by the Rapid Crate Sender."
- icon = 'icons/obj/telescience.dmi'
- icon_state = "pad-idle"
- anchored = 1
- use_power = 1
- idle_power_usage = 2
- active_power_usage = 50
- var/stage = 0
-
-/obj/machinery/telepad_cargo/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/wrench))
- playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
- if(anchored)
- anchored = 0
- user << "The [src] can now be moved."
- else if(!anchored)
- anchored = 1
- user << "The [src] is now secured."
- if(istype(W, /obj/item/weapon/screwdriver))
- if(stage == 0)
- playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You unscrew the telepad's tracking beacon."
- stage = 1
- else if(stage == 1)
- playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
- user << "You screw in the telepad's tracking beacon."
- stage = 0
- if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
- playsound(src, 'sound/items/Welder.ogg', 50, 1)
- user << "You disassemble the telepad."
- new /obj/item/stack/sheet/metal(get_turf(src))
- new /obj/item/stack/sheet/glass(get_turf(src))
- qdel(src)
\ No newline at end of file
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index b64d0c27983..6e6c79f5772 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -3,7 +3,7 @@
desc = "Used to control a linked teleportation Hub and Station."
icon_state = "teleport"
circuit = "/obj/item/weapon/circuitboard/teleporter"
- var/obj/item/device/sps/locked = null
+ var/obj/item/device/gps/locked = null
var/regime_set = "Teleporter"
var/id = null
var/obj/machinery/teleport/station/power_station
@@ -40,16 +40,16 @@
user << "\blue The teleporter can now lock on to Syndicate beacons!"
else
ui_interact(user)
- else if(istype(I, /obj/item/device/sps))
- var/obj/item/device/sps/L = I
+ else if(istype(I, /obj/item/device/gps))
+ var/obj/item/device/gps/L = I
if(L.locked_location && !(stat & (NOPOWER|BROKEN)))
user.before_take_item(L)
L.loc = src
locked = L
- user << "You insert the SPS device into the [name]'s slot."
+ user << "You insert the GPS device into the [name]'s slot."
src.attack_hand(user)
else
- user << "No useable data was found on te SPS device."
+ user << "No useable data was found on te GPS device."
else
..()
return
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index 7bfab1eddec..dbaa9686fb1 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -190,6 +190,13 @@
targeting_active = 1
target()
targeting_active = 0
+
+ if(prob(15))
+ if(prob(50))
+ playsound(get_turf(src), 'sound/effects/turret/move1.wav', 60, 1)
+ else
+ playsound(get_turf(src), 'sound/effects/turret/move2.wav', 60, 1)
+
else if(!isPopping())//else, pop down
if(!isDown())
popDown()
@@ -229,6 +236,10 @@
else
A = new /obj/item/projectile/energy/electrode( loc )
use_power(200)
+ if(src.lasers)
+ playsound(get_turf(src), 'sound/weapons/Laser.ogg', 60, 1)
+ else
+ playsound(get_turf(src), 'sound/weapons/Taser.ogg', 60, 1)
A.current = T
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -244,6 +255,7 @@
if ((!isPopping()) || src.popping==-1)
invisibility = 0
popping = 1
+ playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1)
if (src.cover!=null)
flick("popup", src.cover)
src.cover.icon_state = "openTurretCover"
@@ -253,6 +265,7 @@
/obj/machinery/turret/proc/popDown()
if ((!isPopping()) || src.popping==1)
popping = -1
+ playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1)
if (src.cover!=null)
flick("popdown", src.cover)
src.cover.icon_state = "turretCover"
@@ -272,7 +285,7 @@
/obj/machinery/turret/attackby(obj/item/weapon/W, mob/user)//I can't believe no one added this before/N
..()
- playsound(src.loc, 'sound/weapons/smash.ogg', 60, 1)
+ playsound(get_turf(src), 'sound/weapons/smash.ogg', 60, 1)
src.spark_system.start()
src.health -= W.force * 0.5
if (src.health <= 0)
@@ -422,7 +435,7 @@
/obj/machinery/turret/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if(!(stat & BROKEN))
- playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1)
+ playsound(get_turf(src), 'sound/weapons/slash.ogg', 25, 1, -1)
visible_message("\red [] has slashed at []!", M, src)
src.health -= 15
if (src.health <= 0)
@@ -609,7 +622,7 @@
return
if (targloc == curloc)
return
- playsound(src, 'sound/weapons/Gunshot.ogg', 50, 1)
+ playsound(get_turf(src), 'sound/weapons/Gunshot.ogg', 60, 1)
var/obj/item/projectile/A = new /obj/item/projectile/bullet(curloc)
A.current = curloc
A.yo = targloc.y - curloc.y
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
deleted file mode 100644
index 16105f1fb61..00000000000
--- a/code/game/objects/items/devices/gps.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-var/list/sps_list = list()
-/obj/item/device/sps
- name = "space positioning system"
- desc = "Helping lost spacemen find their way through the planets since 2016."
- icon = 'icons/obj/telescience.dmi'
- icon_state = "gps-c"
- w_class = 2.0
- slot_flags = SLOT_BELT
- origin_tech = "materials=2;magnets=3;bluespace=2"
- var/spstag = "COM0"
- var/emped = 0
- var/turf/locked_location
-
-/obj/item/device/sps/New()
- ..()
- sps_list.Add(src)
- name = "space positioning system ([spstag])"
- overlays += "working"
-
-/obj/item/device/sps/Destroy()
- sps_list.Remove(src)
- ..()
-
-/obj/item/device/sps/emp_act(severity)
- emped = 1
- overlays -= "working"
- overlays += "emp"
- spawn(300)
- emped = 0
- overlays -= "emp"
- overlays += "working"
-
-/obj/item/device/sps/attack_self(mob/user as mob)
-
- var/obj/item/device/sps/t = ""
- var/sps_window_height = 110 + sps_list.len * 20 // Variable window height, depending on how many sps units there are to show
- if(emped)
- t += "ERROR"
- else
- t += "Set TagRefresh"
- t += "
Tag: [spstag]"
- if(locked_location && locked_location.loc)
- t += "
Bluespace coordinates saved: [locked_location.loc]"
- sps_window_height += 20
-
- for(var/obj/item/device/sps/G in sps_list)
- var/turf/pos = get_turf(G)
- var/area/sps_area = get_area(G)
- var/tracked_spstag = G.spstag
- if(G.emped == 1)
- t += "
[tracked_spstag]: ERROR"
- else
- t += "
[tracked_spstag]: [format_text(sps_area.name)] ([pos.x], [pos.y], [pos.z])"
-
- var/datum/browser/popup = new(user, "sps", name, 360, min(sps_window_height, 800))
- popup.set_content(t)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
-
-/obj/item/device/sps/Topic(href, href_list)
- ..()
- if(href_list["tag"] )
- var/a = input("Please enter desired tag.", name, spstag) as text
- a = uppertext(copytext(sanitize(a), 1, 5))
- if(src.loc == usr)
- spstag = a
- name = "space positioning system ([spstag])"
- attack_self(usr)
- if(href_list["refresh"] )
- if(src.loc == usr)
- attack_self(usr)
-
-/obj/item/device/sps/science
- icon_state = "gps-s"
- spstag = "SCI0"
-
-/obj/item/device/sps/engineering
- icon_state = "gps-e"
- spstag = "ENG0"
-
-/obj/item/device/sps/mining
- icon_state = "gps-m"
- spstag = "MINE0"
- 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/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index e92a2f2cb3b..3f30f0c03e7 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -4,7 +4,7 @@
icon_state = "intercom"
anchored = 1
w_class = 4.0
- canhear_range = 2
+ canhear_range = 5
flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
var/number = 0
var/anyai = 1
diff --git a/code/game/objects/items/weapons/RCS.dm b/code/game/objects/items/weapons/RCS.dm
deleted file mode 100644
index 8c90ffa9d58..00000000000
--- a/code/game/objects/items/weapons/RCS.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-/obj/item/weapon/rcs
- name = "rapid-crate-sender (RCS)"
- desc = "Use this to send crates and closets to cargo telepads."
- icon = 'icons/obj/items.dmi'
- icon_state = "rcs"
- opacity = 0
- density = 0
- anchored = 0.0
- flags = FPRINT | CONDUCT
- force = 10.0
- throwforce = 10.0
- throw_speed = 1
- throw_range = 5
- var/rcharges = 10
- var/obj/machinery/pad = null
- var/last_charge = 30
- var/mode = 0
- var/rand_x = 0
- var/rand_y = 0
- var/emagged = 0
- var/teleporting = 0
-
-/obj/item/weapon/rcs/New()
- processing_objects.Add(src)
- desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
-
-/obj/item/weapon/rcs/Destroy()
- processing_objects.Remove(src)
- ..()
-
-/obj/item/weapon/rcs/process()
- if(rcharges > 10)
- rcharges = 10
- if(last_charge == 0)
- rcharges++
- desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
- last_charge = 30
- else
- last_charge--
-
-/obj/item/weapon/rcs/attack_self(mob/user)
- if(emagged)
- if(mode == 0)
- mode = 1
- playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- user << "\red The telepad locator has become uncalibrated."
- else
- mode = 0
- playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
- user << "\blue You calibrate the telepad locator."
-
-/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
- emagged = 1
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
- user << "\red You emag the RCS. Click on it to toggle between modes."
- return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 4838c848339..a72e1a7239e 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -487,12 +487,6 @@
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.updatehealth()
- if(istype(M,/mob/living/carbon/human/machine) && M.stat == 0) // If an IPC is brought back to life by welding it, which is possible, update the mob list
- if(M in dead_mob_list)
- dead_mob_list -= M
- respawnable_list -= M
- living_mob_list += M
- mob_list += M
return
else
user << "\red You need more welding fuel to complete this task."
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 2de850b7412..5308a6f449c 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -18,8 +18,11 @@
if (!H.amputated)
if ((health >= (config.health_threshold_dead/100*75)) && stat == DEAD) //need to get them 25% away from death point before reviving them
dead_mob_list -= src
+ respawnable_list -= src
living_mob_list += src
+ mob_list += src
stat = CONSCIOUS
+ ear_deaf = 0
return
/mob/living/carbon/human/getBrainLoss()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 3353b07b6dd..50282c53026 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1292,7 +1292,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
see_invisible = SEE_INVISIBLE_LIVING
seer = 0
+ var/tmp/has_ninja_mask = 0
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja))
+ has_ninja_mask = 1
var/obj/item/clothing/mask/gas/voice/space_ninja/O = wear_mask
switch(O.mode)
if(0)
@@ -1305,7 +1307,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
if(1)
see_in_dark = 5
- if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
+ if(!druggy) see_invisible = SEE_INVISIBLE_MINIMUM
if(2)
sight |= SEE_MOBS
if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
@@ -1340,7 +1342,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
see_invisible = SEE_INVISIBLE_LIVING
if(istype(O,/obj/item/clothing/glasses/hud/security/night) || istype(O,/obj/item/clothing/glasses/hud/health/night))
see_invisible = SEE_INVISIBLE_MINIMUM
- else if(!seer)
+ else if(!seer && !has_ninja_mask)
see_in_dark = species.darksight
see_invisible = SEE_INVISIBLE_LIVING
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 1223913f0ce..c688127ad2b 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -633,12 +633,6 @@ obj/structure/cable/proc/cableColor(var/colorC)
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.updatehealth()
- if(istype(M,/mob/living/carbon/human/machine) && M.stat == 0) // If an IPC is brought back to life by welding it, which is possible, update the mob list
- if(M in dead_mob_list)
- dead_mob_list -= M
- respawnable_list -= M
- living_mob_list += M
- mob_list += M
return
else
user << "Nothing to fix!"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 9602f89303b..e30df0e0215 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -51,6 +51,7 @@
var/drowsy = 0
var/agony = 0
var/embed = 0 // whether or not the projectile can embed itself in the mob
+ var/forcedodge = 0
proc/delete()
@@ -82,9 +83,8 @@
loc = A.loc
return 0 //cannot shoot yourself
- if(bumped) return 0
- var/forcedodge = 0 // force the projectile to pass
-
+ if(bumped)
+ return 1
bumped = 1
if(firer && istype(A, /mob))
var/mob/M = A
@@ -137,14 +137,11 @@
spawn(0)
if(A)
- if(!forcedodge)
- forcedodge = A.bullet_act(src, def_zone) // searches for return value
- if(forcedodge == -1) // the bullet passes through a dense object!
+ var/turf/new_loc = get_turf(A)
+ var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null
+ if(permutation == -1 || forcedodge)// the bullet passes through a dense object!
bumped = 0 // reset bumped variable!
- if(istype(A, /turf))
- loc = A
- else
- loc = A.loc
+ loc = new_loc
permutated.Add(A)
return 0
if(istype(A,/turf))
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index b83ab6ee73f..639358f0246 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -42,6 +42,7 @@
icon_state = "xray"
damage = 15
irradiate = 30
+ forcedodge = 1
/obj/item/projectile/beam/pulse
name = "pulse"
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index eea7cdb687f..1cc959346f8 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -2123,14 +2123,14 @@ datum/design/bluespace_crystal
reliability_base = 100
build_path = "/obj/item/bluespace_crystal/artificial"
-datum/design/telesci_sps
- name = "SPS Device"
+datum/design/telesci_gps
+ name = "GPS Device"
desc = "A device that can track its position at all times."
- id = "telesci_sps"
+ id = "telesci_Gps"
req_tech = list("materials" = 2, "magnets" = 3, "bluespace" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 500, "$glass" = 1000)
- build_path = /obj/item/device/sps
+ build_path = /obj/item/device/gps
/////////////////////////////////////////
/////////////////HUDs////////////////////
diff --git a/code/modules/research/xenoarchaeology/tools/tools.dm b/code/modules/research/xenoarchaeology/tools/tools.dm
index 479d0240fac..39dc6738f4f 100644
--- a/code/modules/research/xenoarchaeology/tools/tools.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools.dm
@@ -2,18 +2,6 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Miscellaneous xenoarchaeology tools
-/obj/item/device/gps
- name = "relay positioning device"
- desc = "Triangulates the approximate co-ordinates using a nearby satellite network."
- icon = 'icons/obj/device.dmi'
- icon_state = "locator"
- item_state = "locator"
- w_class = 2
-
-/obj/item/device/gps/attack_self(var/mob/user as mob)
- var/turf/T = get_turf(src)
- user << "\blue \icon[src] [src] flashes [T.x].[rand(0,9)]:[T.y].[rand(0,9)]:[T.z].[rand(0,9)]."
-
/obj/item/device/measuring_tape
name = "measuring tape"
desc = "A coiled metallic tape used to check dimensions and lengths."
diff --git a/code/game/objects/items/bluespace_crystal.dm b/code/modules/telesci/bscrystal.dm
similarity index 100%
rename from code/game/objects/items/bluespace_crystal.dm
rename to code/modules/telesci/bscrystal.dm
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
new file mode 100644
index 00000000000..25c5bb154e6
--- /dev/null
+++ b/code/modules/telesci/gps.dm
@@ -0,0 +1,81 @@
+var/list/GPS_list = list()
+/obj/item/device/gps
+ name = "global positioning system"
+ desc = "Helping lost spacemen find their way through the planets since 2016."
+ icon = 'icons/obj/telescience.dmi'
+ icon_state = "gps-c"
+ w_class = 2.0
+ slot_flags = SLOT_BELT
+ origin_tech = "programming=2;engineering=2"
+ var/gpstag = "COM0"
+ var/emped = 0
+ var/turf/locked_location
+
+/obj/item/device/gps/New()
+ ..()
+ GPS_list.Add(src)
+ name = "global positioning system ([gpstag])"
+ overlays += "working"
+
+/obj/item/device/gps/Destroy()
+ GPS_list.Remove(src)
+ ..()
+
+/obj/item/device/gps/emp_act(severity)
+ emped = 1
+ overlays -= "working"
+ overlays += "emp"
+ spawn(300)
+ emped = 0
+ overlays -= "emp"
+ overlays += "working"
+
+/obj/item/device/gps/attack_self(mob/user as mob)
+
+ var/obj/item/device/gps/t = ""
+ var/gps_window_height = 110 + GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show
+ if(emped)
+ t += "ERROR"
+ else
+ t += "
Set Tag "
+ t += "
Tag: [gpstag]"
+ if(locked_location && locked_location.loc)
+ t += "
Bluespace coordinates saved: [locked_location.loc]"
+ gps_window_height += 20
+
+ for(var/obj/item/device/gps/G in GPS_list)
+ var/turf/pos = get_turf(G)
+ var/area/gps_area = get_area(G)
+ var/tracked_gpstag = G.gpstag
+ if(G.emped == 1)
+ t += "
[tracked_gpstag]: ERROR"
+ else
+ t += "
[tracked_gpstag]: [format_text(gps_area.name)] ([pos.x], [pos.y], [pos.z])"
+
+ var/datum/browser/popup = new(user, "GPS", name, 360, min(gps_window_height, 800))
+ popup.set_content(t)
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open()
+
+/obj/item/device/gps/Topic(href, href_list)
+ ..()
+ if(href_list["tag"] )
+ var/a = input("Please enter desired tag.", name, gpstag) as text
+ a = uppertext(copytext(sanitize(a), 1, 5))
+ if(src.loc == usr)
+ gpstag = a
+ name = "global positioning system ([gpstag])"
+ attack_self(usr)
+
+/obj/item/device/gps/science
+ icon_state = "gps-s"
+ gpstag = "SCI0"
+
+/obj/item/device/gps/engineering
+ icon_state = "gps-e"
+ gpstag = "ENG0"
+
+/obj/item/device/gps/mining
+ icon_state = "gps-m"
+ gpstag = "MINE0"
+ 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
new file mode 100644
index 00000000000..dcdaffb4727
--- /dev/null
+++ b/code/modules/telesci/telepad.dm
@@ -0,0 +1,158 @@
+///SCI TELEPAD///
+/obj/machinery/telepad
+ name = "telepad"
+ desc = "A bluespace telepad used for teleporting objects to and from a location."
+ icon = 'icons/obj/telescience.dmi'
+ icon_state = "pad-idle"
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 200
+ active_power_usage = 5000
+ var/efficiency
+
+/obj/machinery/telepad/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null)
+ component_parts += new /obj/item/bluespace_crystal/artificial(null)
+ component_parts += new /obj/item/bluespace_crystal/artificial(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ RefreshParts()
+
+/obj/machinery/telepad/RefreshParts()
+ var/E
+ for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
+ E += C.rating
+ efficiency = E
+
+/obj/machinery/telepad/attackby(obj/item/I, mob/user)
+ if(default_deconstruction_screwdriver(user, "pad-idle-o", "pad-idle", I))
+ return
+
+ if(panel_open)
+ if(istype(I, /obj/item/device/multitool))
+ var/obj/item/device/multitool/M = I
+ M.buffer = src
+ user << "You save the data in the [I.name]'s buffer."
+
+ if(exchange_parts(user, I))
+ return
+
+ default_deconstruction_crowbar(I)
+
+
+//CARGO TELEPAD//
+/obj/machinery/telepad_cargo
+ name = "cargo telepad"
+ desc = "A telepad used by the Rapid Crate Sender."
+ icon = 'icons/obj/telescience.dmi'
+ icon_state = "pad-idle"
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 20
+ active_power_usage = 500
+ var/stage = 0
+/obj/machinery/telepad_cargo/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/wrench))
+ anchored = 0
+ playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
+ if(anchored)
+ anchored = 0
+ user << " The [src] can now be moved."
+ else if(!anchored)
+ anchored = 1
+ user << " The [src] is now secured."
+ if(istype(W, /obj/item/weapon/screwdriver))
+ if(stage == 0)
+ playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << " You unscrew the telepad's tracking beacon."
+ stage = 1
+ else if(stage == 1)
+ playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
+ user << " You screw in the telepad's tracking beacon."
+ stage = 0
+ if(istype(W, /obj/item/weapon/weldingtool) && stage == 1)
+ playsound(src, 'sound/items/Welder.ogg', 50, 1)
+ user << " You disassemble the telepad."
+ new /obj/item/stack/sheet/metal(get_turf(src))
+ new /obj/item/stack/sheet/glass(get_turf(src))
+ qdel(src)
+
+///TELEPAD CALLER///
+/obj/item/device/telepad_beacon
+ name = "telepad beacon"
+ desc = "Use to warp in a cargo telepad."
+ icon = 'icons/obj/radio.dmi'
+ icon_state = "beacon"
+ item_state = "signaler"
+ origin_tech = "bluespace=3"
+
+/obj/item/device/telepad_beacon/attack_self(mob/user as mob)
+ if(user)
+ user << " Locked In"
+ new /obj/machinery/telepad_cargo(user.loc)
+ playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
+ qdel(src)
+ return
+
+///HANDHELD TELEPAD USER///
+/obj/item/weapon/rcs
+ name = "rapid-crate-sender (RCS)"
+ desc = "Use this to send crates and closets to cargo telepads."
+ icon = 'icons/obj/telescience.dmi'
+ icon_state = "rcs"
+ flags = CONDUCT
+ force = 10.0
+ throwforce = 10.0
+ throw_speed = 2
+ throw_range = 5
+ var/rcharges = 10
+ var/obj/machinery/pad = null
+ var/last_charge = 30
+ var/mode = 0
+ var/rand_x = 0
+ var/rand_y = 0
+ var/emagged = 0
+ var/teleporting = 0
+
+/obj/item/weapon/rcs/New()
+ ..()
+ processing_objects.Add(src)
+
+/obj/item/weapon/rcs/examine(mob/user)
+ ..()
+ user << "There are [rcharges] charge\s left."
+
+/obj/item/weapon/rcs/Destroy()
+ processing_objects.Remove(src)
+ ..()
+/obj/item/weapon/rcs/process()
+ if(rcharges > 10)
+ rcharges = 10
+ if(last_charge == 0)
+ rcharges++
+ last_charge = 30
+ else
+ last_charge--
+
+/obj/item/weapon/rcs/attack_self(mob/user)
+ if(emagged)
+ if(mode == 0)
+ mode = 1
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ user << " The telepad locator has become uncalibrated."
+ else
+ mode = 0
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ user << " You calibrate the telepad locator."
+
+/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
+ emagged = 1
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ user << " You emag the RCS. Click on it to toggle between modes."
+ return
\ No newline at end of file
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
new file mode 100644
index 00000000000..f95abbd96c1
--- /dev/null
+++ b/code/modules/telesci/telesci_computer.dm
@@ -0,0 +1,383 @@
+/obj/machinery/computer/telescience
+ name = "\improper Telepad Control Console"
+ desc = "Used to teleport objects to and from the telescience telepad."
+ icon_state = "teleport"
+ circuit = /obj/item/weapon/circuitboard/telesci_console
+ var/sending = 1
+ var/obj/machinery/telepad/telepad = null
+ var/temp_msg = "Telescience control console initialized.
Welcome."
+
+ // VARIABLES //
+ var/teles_left // How many teleports left until it becomes uncalibrated
+ var/datum/projectile_data/last_tele_data = null
+ var/z_co = 1
+ var/power_off
+ var/rotation_off
+ //var/angle_off
+ var/last_target
+
+ var/rotation = 0
+ var/angle = 45
+ var/power = 5
+
+ // Based on the power used
+ var/teleport_cooldown = 0 // every index requires a bluespace crystal
+ var/list/power_options = list(5, 10, 20, 25, 30, 40, 50, 80, 100)
+ var/teleporting = 0
+ var/starting_crystals = 3
+ var/max_crystals = 4
+ 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)
+ inserted_gps.loc = loc
+ inserted_gps = null
+ ..()
+
+/obj/machinery/computer/telescience/examine(mob/user)
+ ..()
+ user << "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots."
+
+/obj/machinery/computer/telescience/initialize()
+ ..()
+ for(var/i = 1; i <= starting_crystals; i++)
+ crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals
+
+/obj/machinery/computer/telescience/attack_paw(mob/user)
+ user << "You are too primitive to use this computer."
+ return
+
+/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user)
+ if(istype(W,/obj/item/weapon/card/emag))
+ if (emagged == 0)
+ user << "\blue You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!"
+ emagged = 1
+ else
+ user << "\red The machine seems unaffected by the card swipe..."
+ if(istype(W, /obj/item/bluespace_crystal))
+ if(crystals.len >= max_crystals)
+ user << "There are not enough crystal slots."
+ return
+ user.drop_item()
+ crystals += W
+ W.loc = null
+ user.visible_message("[user] inserts [W] into \the [src]'s crystal slot.")
+ updateUsrDialog()
+ else if(istype(W, /obj/item/device/gps))
+ if(!inserted_gps)
+ inserted_gps = W
+ user.before_take_item(W)
+ W.loc = src
+ user.visible_message("[user] inserts [W] into \the [src]'s GPS device slot.")
+ updateUsrDialog()
+ else if(istype(W, /obj/item/device/multitool))
+ var/obj/item/device/multitool/M = W
+ if(M.buffer && istype(M.buffer, /obj/machinery/telepad))
+ telepad = M.buffer
+ M.buffer = null
+ user << "You upload the data from the [W.name]'s buffer."
+ updateUsrDialog()
+ else
+ ..()
+
+/obj/machinery/computer/telescience/attack_ai(mob/user)
+ src.attack_hand(user)
+
+/obj/machinery/computer/telescience/attack_hand(mob/user)
+ if(..())
+ return
+ interact(user)
+
+/obj/machinery/computer/telescience/interact(mob/user)
+ user.set_machine(src)
+ var/t
+ if(!telepad)
+ in_use = 0 //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console
+ t += "
No telepad located.
Please add telepad data.
"
+ else
+ if(inserted_gps)
+ t += "Eject GPS"
+ t += "Set GPS memory"
+ else
+ t += "Eject GPS"
+ t += "Set GPS memory"
+ t += "[temp_msg]
"
+ t += "Set Bearing"
+ t += "[rotation] degrees
"
+ t += "Set Elevation"
+ t += "[angle] degrees
"
+ t += "Set Power"
+ t += ""
+
+ for(var/i = 1; i <= power_options.len; i++)
+ if(crystals.len + telepad.efficiency < i)
+ t += "
[power_options[i]]"
+ continue
+ if(power == power_options[i])
+ t += "
[power_options[i]]"
+ continue
+ t += "
[power_options[i]]"
+ t += "
"
+
+ t += "Set Sector"
+ t += "[z_co ? z_co : "NULL"]
"
+
+ t += "
Send"
+ t += " Receive"
+ t += "
Recalibrate Crystals Eject Crystals"
+
+ // Information about the last teleport
+ t += "
"
+ if(!last_tele_data)
+ t += "No teleport data found."
+ else
+ t += "Source Location: ([last_tele_data.src_x], [last_tele_data.src_y])
"
+ //t += "Distance: [round(last_tele_data.distance, 0.1)]m
"
+ t += "Time: [round(last_tele_data.time, 0.1)] secs
"
+ t += "
"
+
+ var/datum/browser/popup = new(user, "telesci", name, 300, 500)
+ popup.set_content(t)
+ popup.open()
+ return
+
+/obj/machinery/computer/telescience/proc/sparks()
+ if(telepad)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, get_turf(telepad))
+ s.start()
+ else
+ return
+
+/obj/machinery/computer/telescience/proc/telefail()
+ sparks()
+ visible_message("The telepad weakly fizzles.")
+ return
+
+/obj/machinery/computer/telescience/proc/doteleport(mob/user)
+
+ if(teleport_cooldown > world.time)
+ temp_msg = "Telepad is recharging power.
Please wait [round((teleport_cooldown - world.time) / 10)] seconds."
+ return
+
+ if(teleporting)
+ temp_msg = "Telepad is in use.
Please wait."
+ return
+
+ if(telepad)
+
+ var/truePower = Clamp(power + power_off, 1, 1000)
+ var/trueRotation = rotation + rotation_off
+ var/trueAngle = Clamp(angle, 1, 90)
+
+ var/datum/projectile_data/proj_data = projectile_trajectory(telepad.x, telepad.y, trueRotation, trueAngle, truePower)
+ last_tele_data = proj_data
+
+ var/trueX = Clamp(round(proj_data.dest_x, 1), 1, world.maxx)
+ var/trueY = Clamp(round(proj_data.dest_y, 1), 1, world.maxy)
+ var/spawn_time = round(proj_data.time) * 10
+
+ var/turf/target = locate(trueX, trueY, z_co)
+ last_target = target
+ var/area/A = get_area(target)
+ flick("pad-beam", telepad)
+
+ if(spawn_time > 15) // 1.5 seconds
+ playsound(telepad.loc, 'sound/weapons/flash.ogg', 25, 1)
+ // Wait depending on the time the projectile took to get there
+ teleporting = 1
+ temp_msg = "Powering up bluespace crystals.
Please wait."
+
+
+ spawn(round(proj_data.time) * 10) // in seconds
+ if(!telepad)
+ return
+ if(telepad.stat & NOPOWER)
+ return
+ teleporting = 0
+ teleport_cooldown = world.time + (power * 2)
+ teles_left -= 1
+
+ // use a lot of power
+ use_power(power * 10)
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, get_turf(telepad))
+ s.start()
+
+ temp_msg = "Teleport successful.
"
+ if(teles_left < 10)
+ temp_msg += "
Calibration required soon."
+ else
+ temp_msg += "Data printed below."
+
+ var/sparks = get_turf(target)
+ var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread
+ y.set_up(5, 1, sparks)
+ y.start()
+
+ var/turf/source = target
+ var/turf/dest = get_turf(telepad)
+ var/log_msg = ""
+ log_msg += ": [key_name(user)] has teleported "
+
+ if(sending)
+ source = dest
+ dest = target
+
+ flick("pad-beam", telepad)
+ playsound(telepad.loc, 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5)
+ for(var/atom/movable/ROI in source)
+ // if is anchored, don't let through
+ if(ROI.anchored)
+ if(isliving(ROI))
+ var/mob/living/L = ROI
+ if(L.buckled)
+ // TP people on office chairs
+ if(L.buckled.anchored)
+ continue
+
+ log_msg += "[key_name(L)] (on a chair), "
+ else
+ continue
+ else if(!isobserver(ROI))
+ continue
+ if(ismob(ROI))
+ var/mob/T = ROI
+ log_msg += "[key_name(T)], "
+ else
+ log_msg += "[ROI.name]"
+ if (istype(ROI, /obj/structure/closet))
+ var/obj/structure/closet/C = ROI
+ log_msg += " ("
+ for(var/atom/movable/Q as mob|obj in C)
+ if(ismob(Q))
+ log_msg += "[key_name(Q)], "
+ else
+ log_msg += "[Q.name], "
+ if (dd_hassuffix(log_msg, "("))
+ log_msg += "empty)"
+ else
+ log_msg = dd_limittext(log_msg, length(log_msg) - 2)
+ log_msg += ")"
+ log_msg += ", "
+ do_teleport(ROI, dest)
+
+ if (dd_hassuffix(log_msg, ", "))
+ log_msg = dd_limittext(log_msg, length(log_msg) - 2)
+ else
+ log_msg += "nothing"
+ log_msg += " [sending ? "to" : "from"] [trueX], [trueY], [z_co] ([A ? A.name : "null area"])"
+ investigate_log(log_msg, "telesci")
+ updateUsrDialog()
+
+/obj/machinery/computer/telescience/proc/teleport(mob/user)
+ if(rotation == null || angle == null || z_co == null)
+ temp_msg = "ERROR!
Set a angle, rotation and sector."
+ return
+ if(power <= 0)
+ telefail()
+ temp_msg = "ERROR!
No power selected!"
+ return
+ if(angle < 1 || angle > 90)
+ telefail()
+ temp_msg = "ERROR!
Elevation is less than 1 or greater than 90."
+ return
+ if(z_co == 2 || z_co < 1 || z_co > 6)
+ if (z_co == 7 & emagged == 1)
+ // This should be empty, allows for it to continue if the z-level is 7 and the machine is emagged.
+ else
+ telefail()
+ temp_msg = "ERROR! Sector is less than 1,
greater than [src.emagged ? "7" : "6"], or equal to 2."
+ return
+ if(teles_left > 0)
+ doteleport(user)
+ else
+ telefail()
+ temp_msg = "ERROR!
Calibration required."
+ return
+ return
+
+/obj/machinery/computer/telescience/proc/eject()
+ for(var/obj/item/I in crystals)
+ I.loc = src.loc
+ crystals -= I
+ power = 0
+
+/obj/machinery/computer/telescience/Topic(href, href_list)
+ if(..())
+ return
+ if(!telepad)
+ updateUsrDialog()
+ return
+ if(telepad.panel_open)
+ temp_msg = "Telepad undergoing physical maintenance operations."
+
+ if(href_list["setrotation"])
+ var/new_rot = input("Please input desired bearing in degrees.", name, rotation) as num
+ if(..()) // Check after we input a value, as they could've moved after they entered something
+ return
+ rotation = Clamp(new_rot, -900, 900)
+ rotation = round(rotation, 0.01)
+
+ if(href_list["setangle"])
+ var/new_angle = input("Please input desired elevation in degrees.", name, angle) as num
+ if(..())
+ return
+ angle = Clamp(round(new_angle, 0.1), 1, 9999)
+
+ if(href_list["setpower"])
+ var/index = href_list["setpower"]
+ index = text2num(index)
+ if(index != null && power_options[index])
+ if(crystals.len + telepad.efficiency >= index)
+ power = power_options[index]
+
+ if(href_list["setz"])
+ var/new_z = input("Please input desired sector.", name, z_co) as num
+ if(..())
+ return
+ z_co = Clamp(round(new_z), 1, 10)
+
+ if(href_list["ejectGPS"])
+ if(inserted_gps)
+ inserted_gps.loc = loc
+ inserted_gps = null
+
+ if(href_list["setMemory"])
+ if(last_target && inserted_gps)
+ inserted_gps.locked_location = last_target
+ temp_msg = "Location saved."
+ else
+ temp_msg = "ERROR!
No data was stored."
+
+ if(href_list["send"])
+ sending = 1
+ teleport(usr)
+
+ if(href_list["receive"])
+ sending = 0
+ teleport(usr)
+
+ if(href_list["recal"])
+ recalibrate()
+ sparks()
+ temp_msg = "NOTICE:
Calibration successful."
+
+ if(href_list["eject"])
+ eject()
+ temp_msg = "NOTICE:
Bluespace crystals ejected."
+
+ updateUsrDialog()
+
+/obj/machinery/computer/telescience/proc/recalibrate()
+ teles_left = rand(30, 40)
+ //angle_off = rand(-25, 25)
+ power_off = rand(-4, 0)
+ rotation_off = rand(-10, 10)
\ No newline at end of file
diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm
index 423bdb829ac..fda70eeecbd 100644
--- a/maps/cyberiad.dmm
+++ b/maps/cyberiad.dmm
@@ -678,7 +678,7 @@
"anb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/security/brig)
"anc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"and" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/security/brig)
-"ane" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/camera{c_tag = "Brig Main Hall"; dir = 2; network = list("SS13")},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
+"ane" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/camera{c_tag = "Brig Main Hall"; dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"anf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"ang" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"anh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/security/brig)
@@ -2245,7 +2245,7 @@
"aRi" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aRj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/camera{c_tag = "EVA South"; dir = 1; network = list("SS13")},/turf/simulated/floor,/area/ai_monitored/storage/eva)
"aRk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
-"aRl" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"aRl" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aRm" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/flora/kirbyplants,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/hallway/primary/central/north)
"aRn" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Central Hallway North"; dir = 2; network = list("SS13")},/obj/machinery/alarm{pixel_y = 23},/obj/item/flag/nt,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/central/north)
"aRo" = (/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central/north)
@@ -2587,7 +2587,7 @@
"aXM" = (/obj/machinery/vending/hydroseeds,/obj/machinery/camera{c_tag = "Hydroponics North"; network = list("SS13")},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aXN" = (/obj/machinery/biogenerator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aXO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/requests_console{department = "Hydroponics"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
-"aXP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"aXP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"aXQ" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
"aXR" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/simulated/floor/wood,/area/library)
"aXS" = (/turf/simulated/floor/carpet,/area/library)
@@ -2597,7 +2597,7 @@
"aXW" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library)
"aXX" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/eftpos{eftpos_name = "Library EFTPOS scanner"},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "Camera"; pictures_left = 30; pixel_x = 0; pixel_y = 0},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library)
"aXY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/bridge/meeting_room)
-"aXZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/wood,/area/bridge/meeting_room)
+"aXZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor/wood,/area/bridge/meeting_room)
"aYa" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
"aYb" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aYc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
@@ -3179,7 +3179,7 @@
"bjg" = (/obj/machinery/turret,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bjh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bji" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/wood,/area/crew_quarters/captain)
-"bjj" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
+"bjj" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bjk" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bjl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bjm" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -3504,7 +3504,7 @@
"bpt" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor,/area/assembly/chargebay)
"bpu" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{dir = 2; id = "mechbay"; name = "Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/assembly/chargebay)
"bpv" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
-"bpw" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bpw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bpx" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bpy" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"bpz" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access_txt = "29"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/white,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/assembly/robotics)
@@ -3798,7 +3798,7 @@
"bvb" = (/obj/structure/table,/obj/item/weapon/folder/white{pixel_y = 10},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/reception)
"bvc" = (/turf/simulated/floor{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/medical/reception)
"bvd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/reception)
-"bve" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint/medical)
+"bve" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bvf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/medical)
"bvg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/medical)
"bvh" = (/obj/structure/table,/obj/item/weapon/storage/box/masks{pixel_x = 6; pixel_y = 2},/obj/item/weapon/storage/box/gloves,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint/medical)
@@ -3807,7 +3807,7 @@
"bvk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
"bvl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
"bvm" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
-"bvn" = (/obj/machinery/firealarm{pixel_y = -30},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
+"bvn" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bvp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area)
"bvq" = (/obj/machinery/camera{c_tag = "Research Mech Bay"; dir = 4; network = list("Research","SS13")},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay)
@@ -3885,7 +3885,7 @@
"bwK" = (/obj/machinery/door/window/eastright{name = "Medical Reception"; req_access_txt = "5"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/medical/reception)
"bwL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "loadingarea"; tag = "loading"},/area/medical/reception)
"bwM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "loadingarea"; tag = "loading"},/area/medical/reception)
-"bwN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/firealarm,/turf/simulated/wall,/area)
+"bwN" = (/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bwO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Medbay Sec Lobby"; req_access_txt = "63"},/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/checkpoint/medical)
"bwP" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "0"; req_one_access_txt = "6,9"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bwQ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area)
@@ -4321,7 +4321,7 @@
"bFe" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics_cloning)
"bFf" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/medical/genetics_cloning)
"bFg" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical1,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/medical/genetics)
-"bFh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/camera{c_tag = "Research Genetics North"; network = list("SS13")},/obj/machinery/power/apc{dir = 1; name = "Genetics APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics)
+"bFh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bFi" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bFj" = (/obj/structure/table,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/weapon/hand_labeler,/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics)
"bFk" = (/obj/structure/closet/wardrobe/genetics_white,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics)
@@ -4426,7 +4426,7 @@
"bHf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area)
"bHg" = (/obj/structure/table,/obj/machinery/door_control{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -4; pixel_y = 6; req_access_txt = "47"},/obj/item/weapon/folder/white{pixel_x = 4},/obj/item/weapon/stamp/rd{pixel_x = 5; pixel_y = -2},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor)
"bHh" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("Research","Research Outpost"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor)
-"bHi" = (/obj/machinery/computer/aifixer,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = -2; pixel_y = 30},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor)
+"bHi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bHj" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/rack,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor)
"bHk" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/hor)
"bHl" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor)
@@ -4890,16 +4890,16 @@
"bQb" = (/obj/machinery/light,/turf/simulated/floor{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/medical/genetics)
"bQc" = (/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics)
"bQd" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics)
-"bQe" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Research Genetics South"; dir = 1; network = list("SS13")},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics)
+"bQe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bQf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics)
"bQg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics)
"bQh" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics)
-"bQi" = (/obj/structure/table/reinforced,/obj/item/device/sps/science,/obj/item/device/sps/science,/obj/item/device/sps/science,/turf/simulated/floor,/area/toxins/telesci)
-"bQj" = (/obj/machinery/light{dir = 1},/obj/structure/table/reinforced,/obj/item/device/radio/beacon,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/toxins/telesci)
-"bQk" = (/obj/machinery/computer/telescience,/obj/machinery/computer/security/telescreen{desc = "Used for watching the telepad chamber."; layer = 4; name = "Telepad Camera Screen"; network = list("Telepad"); pixel_x = 32; pixel_y = 0},/turf/simulated/floor,/area/toxins/telesci)
+"bQi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bQj" = (/obj/machinery/light,/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bQk" = (/obj/machinery/camera{c_tag = "Research Telescience"; dir = 1; network = list("Research","SS13")},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bQl" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bQm" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Telescience Pad APC"; pixel_y = 24},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bQn" = (/obj/machinery/camera{c_tag = "Research Telescience Telepad"; dir = 2; network = list("Telepad","Research","SS13"); pixel_x = 0},/turf/simulated/floor/engine,/area/toxins/telescipad)
+"bQm" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Bridge APC"; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/item/device/radio,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bQn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bQo" = (/turf/simulated/floor/engine,/area/toxins/telescipad)
"bQp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/miningdock)
"bQq" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/storage)
@@ -4972,12 +4972,12 @@
"bRF" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/medical/cryo)
"bRG" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/medical/cryo)
"bRH" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; dir = 10; pixel_x = 0; level = 2; initialize_directions = 10},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/cryo)
-"bRI" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular{pixel_x = 0; pixel_y = 0},/turf/simulated/floor,/area/toxins/telesci)
-"bRJ" = (/turf/simulated/floor,/area/toxins/telesci)
-"bRK" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault-border (EAST)"; icon_state = "vault-border"; dir = 4},/area)
+"bRI" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = 0},/obj/item/device/multitool{pixel_x = 3},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bRJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bRK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bRL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/toxins/telescipad)
"bRM" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bRN" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
+"bRN" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the telepad chamber."; layer = 4; name = "Telepad Camera Screen"; network = list("Telepad"); pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bRO" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
"bRP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bRQ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/toxins/mixing)
@@ -5050,10 +5050,10 @@
"bTf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/carpet,/area/medical/psych)
"bTg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/medical/psych)
"bTh" = (/obj/structure/table/woodentable,/obj/machinery/light/small/lamp/green,/turf/simulated/floor/carpet,/area/medical/psych)
-"bTi" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault-border (EAST)"; icon_state = "vault-border"; dir = 4},/area)
-"bTj" = (/obj/machinery/telepad,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bTk" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bTl" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
+"bTi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bTj" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_y = 30},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bTk" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bTl" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bTm" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
"bTn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bTo" = (/obj/effect/landmark/start{name = "Scientist"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -5108,7 +5108,7 @@
"bUl" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area)
"bUm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2)
"bUn" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
-"bUo" = (/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/cryo)
+"bUo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bUp" = (/obj/structure/table/woodentable,/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor/wood,/area/medical/psych)
"bUq" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Psychiatrist"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/wood,/area/medical/psych)
"bUr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/storage)
@@ -5116,11 +5116,11 @@
"bUt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/carpet,/area/medical/psych)
"bUu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/carpet,/area/medical/psych)
"bUv" = (/obj/machinery/camera{c_tag = "Medbay Psych Office East"; dir = 8; network = list("SS13")},/obj/machinery/power/apc{dir = 4; name = "Psychiatrist APC"; pixel_x = 25},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/carpet,/area/medical/psych)
-"bUw" = (/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor,/area/toxins/telesci)
-"bUx" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault-border (EAST)"; icon_state = "vault-border"; dir = 4},/area)
+"bUw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bUx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bUy" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bUz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/engine,/area/toxins/telescipad)
-"bUA" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
+"bUz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"bUA" = (/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"bUB" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/storage)
"bUC" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage)
"bUD" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
@@ -5143,7 +5143,7 @@
"bUU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/toxins/mixing)
"bUV" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/toxins/mixing)
"bUW" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Research Toxins Launch Room"; dir = 4; network = list("Research","SS13"); pixel_y = -22},/obj/machinery/atmospherics/pipe/vent{dir = 8},/obj/machinery/light{dir = 8},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor,/area/toxins/mixing)
-"bUX" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/toxins/storage)
+"bUX" = (/obj/structure/closet/emcloset,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/toxins/telesci)
"bUY" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins"); pixel_x = 32; pixel_y = 0},/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor,/area/toxins/mixing)
"bUZ" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/window/plasmareinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area)
"bVa" = (/turf/simulated/floor/airless{dir = 9; icon_state = "warning"},/area/toxins/test_area)
@@ -5205,8 +5205,8 @@
"bWe" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area)
"bWf" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2)
"bWg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2)
-"bWh" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/closet/secure_closet/medical1,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/medical/cryo)
-"bWi" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/cryo)
+"bWh" = (/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/toxins/telesci)
+"bWi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bWj" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/cryo)
"bWk" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/machinery/atmospherics/portables_connector{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen{name = "Canister: \[O2] (CRYO)"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/cryo)
"bWl" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay Lobby)"; pixel_x = 0; pixel_y = -30},/obj/machinery/atmospherics/portables_connector{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen{name = "Canister: \[O2] (CRYO)"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/cryo)
@@ -5218,10 +5218,10 @@
"bWr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/light,/turf/simulated/floor/carpet,/area/medical/psych)
"bWs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/stool/bed/chair/comfy/lime{tag = "icon-comfychair_lime (NORTH)"; icon_state = "comfychair_lime"; dir = 1},/turf/simulated/floor/carpet,/area/medical/psych)
"bWt" = (/obj/structure/stool/psychbed,/turf/simulated/floor/carpet,/area/medical/psych)
-"bWu" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/toxins/telesci)
-"bWv" = (/obj/structure/grille,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault-border (EAST)"; icon_state = "vault-border"; dir = 4},/area)
+"bWu" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bWv" = (/obj/machinery/power/apc{dir = 1; name = "Telescience Pad APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/engine,/area/toxins/telescipad)
"bWw" = (/obj/structure/mineral_door/wood{name = "Abandoned Bar"},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
-"bWx" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{dir = 4},/obj/structure/window/plasmareinforced{dir = 1},/obj/structure/window/plasmareinforced{dir = 8},/turf/simulated/floor{tag = "icon-vault-border (EAST)"; icon_state = "vault-border"; dir = 4},/area)
+"bWx" = (/obj/machinery/light,/obj/machinery/camera{c_tag = "Research Genetics South"; dir = 1; network = list("Research","SS13")},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics)
"bWy" = (/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/power/apc{dir = 8; name = "Toxins Storage APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
"bWz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/toxins/storage)
"bWA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
@@ -5299,12 +5299,11 @@
"bXU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area)
"bXV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area)
"bXW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psychoffice"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area)
-"bXX" = (/obj/machinery/power/apc{dir = 8; name = "Telescience APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/toxins/telesci)
-"bXY" = (/obj/machinery/telepad_cargo,/turf/simulated/floor,/area/toxins/telesci)
-"bXZ" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/telesci)
-"bYa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/telesci)
-"bYb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/telesci)
-"bYc" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/camera{c_tag = "Research Telescience"; dir = 8; network = list("Research","SS13"); pixel_y = -22},/turf/simulated/floor,/area/toxins/telesci)
+"bXX" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor,/area/toxins/storage)
+"bXY" = (/obj/machinery/camera{c_tag = "Research Telescience Telepad"; dir = 2; network = list("Telepad","Research","SS13"); pixel_x = 0},/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/engine,/area/toxins/telescipad)
+"bXZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/engine,/area/toxins/telescipad)
+"bYa" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
+"bYc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/toxins/telesci)
"bYd" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access_txt = "8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/toxins/storage)
"bYe" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain/bedroom)
"bYf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -5381,17 +5380,17 @@
"bZy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2)
"bZz" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2)
"bZA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay2)
-"bZB" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"bZC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"bZD" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"bZE" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/toxins/telesci)
-"bZF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/toxins/telesci)
-"bZG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"bZH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"bZI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/telesci)
+"bZB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/telesci)
+"bZC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/telesci)
+"bZD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "telescienceblast"; name = "test chamber blast doors"; opacity = 0},/turf/simulated/floor/engine,/area/toxins/telesci)
+"bZE" = (/obj/structure/closet/secure_closet/medical1,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/medical/cryo)
+"bZF" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/cryo)
+"bZG" = (/obj/structure/table,/obj/item/weapon/clipboard,/turf/simulated/floor{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/toxins/telesci)
+"bZH" = (/obj/machinery/computer/telescience,/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/toxins/telesci)
+"bZI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/l3closet/scientist,/turf/simulated/floor{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/toxins/telesci)
"bZJ" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Telescience"; req_access_txt = "7"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
-"bZK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"bZL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bZK" = (/obj/structure/table,/obj/item/device/gps/science{gpstag = "SCI4"},/obj/item/device/gps/science{gpstag = "SCI3"},/obj/item/device/gps/science{gpstag = "SCI2"},/obj/item/device/gps/science{gpstag = "SCI1"},/obj/item/device/gps/science,/turf/simulated/floor{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/toxins/telesci)
+"bZL" = (/turf/simulated/wall,/area/toxins/telesci)
"bZM" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bZN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bZO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -5450,15 +5449,15 @@
"caP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Medbay APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
"caQ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
"caR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light/small{dir = 4},/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
-"caS" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"caT" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"caU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"caV" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor,/area/toxins/telesci)
-"caW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"caX" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/telesci)
-"caY" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Telescience"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
-"caZ" = (/obj/machinery/light,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"cba" = (/obj/machinery/atmospherics/pipe/manifold{_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"caS" = (/obj/machinery/door_control{id = "telescienceblast"; name = "Test Chamber Blast Doors"; pixel_x = -25; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/telesci)
+"caT" = (/obj/machinery/telepad_cargo,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
+"caU" = (/obj/item/device/radio/beacon,/turf/simulated/floor/engine,/area/toxins/telescipad)
+"caV" = (/obj/machinery/telepad,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/engine,/area/toxins/telescipad)
+"caW" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
+"caX" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/engine,/area/toxins/telescipad)
+"caY" = (/obj/effect/decal/cleanable/oil,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage)
+"caZ" = (/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/engine,/area/toxins/telescipad)
+"cba" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/cryo)
"cbb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cbc" = (/obj/machinery/camera{c_tag = "Research Hallway South"; dir = 1; network = list("Research","SS13"); pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"cbd" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -5531,13 +5530,13 @@
"ccs" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Secondary Storage"; req_access_txt = "39"},/turf/simulated/floor,/area/medical/biostorage)
"cct" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance Access"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/medical/iso_access{name = "\improper Patient Rooms"})
"ccu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/wall,/area)
-"ccv" = (/obj/machinery/light,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"ccw" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"ccx" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
-"ccy" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
+"ccv" = (/obj/machinery/computer/aifixer,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director Requests Console"; pixel_x = -2; pixel_y = 30},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/hor)
+"ccw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/camera{c_tag = "Research Genetics North"; network = list("Research","SS13")},/obj/machinery/power/apc{dir = 1; name = "Genetics APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/medical/genetics)
+"ccx" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics Requests Console"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"ccy" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
"ccz" = (/obj/structure/filingcabinet/filingcabinet,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{tag = "icon-brown (NORTH)"; icon_state = "brown"; dir = 1},/area/quartermaster/qm)
-"ccA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/radiation,/turf/simulated/floor,/area/toxins/telesci)
-"ccB" = (/obj/machinery/light,/obj/structure/closet/radiation,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/telesci)
+"ccA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/closet/secure_closet/security,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint/medical)
+"ccB" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/obj/item/device/gps/mining{gpstag = "MINE2"},/obj/item/device/gps/mining{gpstag = "MINE1"},/obj/item/device/gps/mining,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -3},/turf/simulated/floor,/area/mine/eva)
"ccC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{dir = 8; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"})
"ccD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"ccE" = (/obj/machinery/light,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/manifold{_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 2; icon_state = "whitegreencorner"},/area/medical/research{name = "Research Division"})
@@ -6063,6 +6062,7 @@
"cmE" = (/obj/machinery/computer/operating,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cmF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/engine/engineering)
"cmG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"cmH" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Captain's Quarters APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom)
"cmI" = (/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/ntrep)
"cmJ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/medical/cryo)
"cmK" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/toxins/xenobiology)
@@ -7877,6 +7877,7 @@
"cVz" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite/mothership)
"cVA" = (/obj/structure/bookcase{name = "bookcase (Tactics)"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cVB" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"cVC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci)
"cVD" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/wizard_station)
"cVE" = (/obj/structure/table/woodentable,/obj/effect/landmark{name = "Teleport-Scroll"},/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/wizard_station)
"cVF" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/syndicate_elite/mothership)
@@ -11145,7 +11146,6 @@
"egt" = (/turf/simulated/floor,/area/mine/production)
"egu" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/simulated/floor,/area/mine/production)
"egv" = (/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,/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/eva)
-"egw" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/obj/item/device/sps/mining,/obj/item/device/sps/mining,/obj/item/device/sps/mining,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -3},/turf/simulated/floor,/area/mine/eva)
"egx" = (/turf/simulated/floor,/area/mine/eva)
"egy" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact-f"},/turf/simulated/floor,/area/mine/eva)
"egz" = (/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/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/eva)
@@ -12371,7 +12371,6 @@
"eEa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area)
"eEb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/storage/secure)
"eEc" = (/obj/machinery/door/airlock{name = "Private Restroom"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain/bedroom)
-"eEd" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Captain's Quarters APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom)
"eEe" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom)
"eEf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain/bedroom)
"eEg" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/crew_quarters/captain/bedroom)
@@ -12520,7 +12519,6 @@
"eGT" = (/turf/simulated/floor/plating/airless,/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/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk8"; icon_state = "catwalk8"},/area/engiestation/solars)
"eGU" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/abandonedbar)
"eGV" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/abandonedbar)
-"eGW" = (/obj/machinery/door/airlock/glass_research{name = "Telescience Pad"; req_access_txt = "7"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/toxins/telesci)
"eGX" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/glass_research{name = "Research and Development"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
"eGY" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/engine/engineering)
"eGZ" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/engineering)
@@ -12674,34 +12672,34 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablmblmblmblmblmblmblmblmblmblmaaaaaaaCZblnaEjbloblpaDfblqblraaiblsbltbltbltbluaaqblvbdWaSqaaiblwbiIbiHbiIbiIaaibiKblxblyaaibiLaaibhKblzblAbhKblBaaiblCbkcbiSblDblEblFblGblHblIblJbkiblKaaiaaiblLblMaaqaaqaaqblNblOaaiafjblPbkubkubkvblQbkxbkublRaaiblSbkBbkBbkCbkDbkEbkGbkGbkGbkGbkGbkGbkGblTbkGbkGbkGbkGbkGbkGblUblVblVblVblVblVblVblVblVblVblVblVblVblVblVblWblXblYblbblbblZaRLaRLaRLaRLaRLbhkaRLaRLaRLaRLaRLaRLaRLaRLaRLaRLaRLaRLbmaaRLbmbbmcaWDaWDaWDaWDaWDaWDaWDbmdbfcbcjaoKaoKbckaMPaMPaMPaMPaMPaMPaMPaMPaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablmblmblmblmblmblmblmblmblmblmblmaEUaEVaEWaaiaaiaaibmeaaiaaiaaibiBbltbltbltbmfaaqaTQbdWaSqaaibmgbmhcDDbiIbiIaaibmjblxbmkaaibmjaaibmlblzcDzbmnbhKaaibmobkcbiSbmpbmqblFblGbmrbmsblJbkibmtaaibmubmvbmwaaqbmxaaqbmybmzbmAafjbmBbmCbmDbmEbmEbmFbkubmGaaibmHbmIbkBbkCbkDbkEbkGbmJbkGbkGbkGbkGbmKbmLbmLbmLbmLbmMbkGbkGbkGbkGbmNbkGbmJbmObkGbmPbmQbmRbkGbmSbmTbmTbmUbmVbmWbmXaRLaRLaRLaRLaRLaRLaRLbmYcDHbnaaRLaRLaRLaRLaRLaRLaRLaRLaRLaRLbnbbncbncbndbnebnfbngbnhbnhbnhbnhbnibnjaERaabaaaaaaaabaMPaMPaMPaMPaMPaMPaaaaMPaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablmblmblmblmblmblmblmblmblmblmblmbnkbnlbnmbnnbnobnpbnqbnrbnsaaibhtbntbntbnubnvaaqaTQbdWaSqaaiaaiaaiaaiaaiaaiaaiaaiblxbnwaaiaaiaaiaaiafjaaiaaiaaiaaibnxbkcbnyaaibnzbnAbkgbkgbkgbkgbkibnBaaiaaibnCbnDbnGbEvbGnbnDbnHaaiafjaaibnIbnJbnKbnLbnMbnNbnOaaibnPbnQbnQaaiaaiaaiaaiaaiaaiaaiaaqaaqbnRbnSbnTbnTbnSbnRaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqbnUaaqaaqaaqaaqaaqaaibnVaoubnWaRLaRLbnXbnXaaiaaiaaiaaiaaibnYbncbncbnbbncaRLbncbncbncbncbnZaaiaaiaaiaaiboaaaiaaiaaiaaiaaiaaiaaiaaiaaiaaaaaaaaaaaaaMPaMPaMPaMPaMPaMPaaaaMPaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablmblmblmblmblmblmblmblmblmblmblmaGGaGHaEWbobbocbocbodboebocaaibofbofbofbogbohaaqaTQbdWaSqaaqboicczbokbolbomaaibonblxbooaaibopaaiboqborbosbotbouaaqbovbkcbowaaiboxboybozboAboBboCboDaaiaaiaaiboEboFboGboHboIboJboKaaiafjaaiboLboMboNboObnMbkuboPaaiboQboRboSaaiboTboUboVboWboXboYboZbpabpbbpcbpdbpdbpcbpebpfbpgaaqbphbpibpjbpkaaqbplbyrbpnbpobppbpqbpqbpraaibpsabnaaibptaaibpubpuaaibpvbpwbpxaaibDTbpzbDTaaicBVbncbnZaaibpAbpBbpAaaibpCbpDaaibpEbpFbpGaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMPaMPaMPaMPaMPaMPaaaaMPaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablmblmblmblmblmblmblmblmblmblmblmaGGaGHaEWbobbocbocbodboebocaaibofbofbofbogbohaaqaTQbdWaSqaaqboicczbokbolbomaaibonblxbooaaibopaaiboqborbosbotbouaaqbovbkcbowaaiboxboybozboAboBboCboDaaiaaiaaiboEboFboGboHboIboJboKaaiafjaaiboLboMboNboObnMbkuboPaaiboQboRboSaaiboTboUboVboWboXboYboZbpabpbbpcbpdbpdbpcbpebpfbpgaaqbphbpibpjbpkaaqbplbyrbpnbpobppbpqbpqbpraaibpsabnaaibptaaibpubpuaaibpvccxbpxaaibDTbpzbDTaaicBVbncbnZaaibpAbpBbpAaaibpCbpDaaibpEbpFbpGaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMPaMPaMPaMPaMPaMPaaaaMPaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablmblmblmblmblmblmblmblmblmblmaaabpHaHNbpIbpJbnobnobpKbpLbpMaaibpNbpNbpNbpNbpOaaqaTQbdWaSqaaqbpQbpRbpSbpRbpTaaibpUbpVbpWbpYbpYaaibpZbqabqbbqbbqcbqdbqebkcbqfaaibqgaaJaaqaaqaaqaaibqhaaibqiacCbqjbqkbjbbqlbjbbqmbqnacfbqoaaibqpbkubqqbqrbnMbqsbkuaaibqtbqubqvaaibqwbqxbqybqzbqAbqBbqCbpdbpdbpdbpdbpdbpdbpdbqDbqEbqFbqGbqHbqIbqJaaqbqKbqLbqMbqNbqObqPbqLbpraaibpsabnbNtbqRbqSbqTbqUaaqbqVbqWbqVbqXbqYbqZbraaaiaaqbrbampaaibrcbrdbrebrfbrfbrfaaibrgbrhbriaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMPaMPaMPaMPaMPaMPaaaaMPaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrjazMaaiaaiaaiaoJaoLazMaoJaoLaaiaoJaoLaaiaaiaaiaaibrkbnobocbocbodboebocaaibrlbrmbofbofbogaaqblvbdWbrnaaqbrobrpbrqbrrcHNaaibrtbrubrvbpYbpYaaibrwbrxcHPbrzbrAbrBbrCbrDbrEacfbrFbrGbrHbrIabIbrJbrKacfbrLacfacfacfacfbrMacfacfacfacfbrNacfbrOeEkeEieEjeEhbrTbrUacfbrVboRboRaaibrWbrXdFdbrZbsaaaibqCbpdbpdbpdbpdbpdbpdbpdbsbbscbsdbsebsfdBObshaaqbsibsjbskbqNbprbqPdFhdyNaaibslbsmbsnbsobsobspbsqbsrbssbssbssbstbsubsvbswbsxbsybszbsAbsxbsBbsCbsDbsDbsDcrZaaibsFbrhbsGaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMPaMPaMPaMPaMPaaaaMPaMPaMPaMPaMPaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaaaaCZbobbnobnobnobpKbpLbnoaaibpNbpNbsIbltbltbsJaTQbdWaSqaaqbsKbsLbsMbsNbsOaaibsPbsQbsRbsScFjaaibsUbsVbsWbsXbsYbsZbtabtbbtcbtdbtebtebtfbtgabXbthbtiacCbtjaGCbtkbtlbtmbtnbtobtlbtpaGCbtqaaiabneEgaaiaaiaaiaaibtsaaibttboRbtuacCbtvbtwbtxbtybtzaaibtAbtBbtCbtDbtEbtFbtGbtHbqDbtIaaqbtJbsfbtKbtLaaqbtMbtNbqMbqNbprbqPbqLbpraaibpsabnbtObtPbtQbtRbtSaGCbtTbtUbtVbtVbtWbqVbtXaaibtYbtZbuaaaibubbucbudbrfbuebufaaibsFbrhbugaaiaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaaaaATbuhbuibocboccEJboebujaaiaaqbukbYMbumaaqaaqblvbdWbhzaaqbunbuobupbuqburaaibpYbrubusbpYbpYaaibutbuubuvbuwbuxaaqbuybuzbuAaaibuBaaqaaqaouaaqaaJbuCaaibuDbuEbuFbtlbuGbtnbuGbtlbuHbuEbtqaaieEdeEecbZeEceEfabIbuMabIbuNboRbuOaaiboTbuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbuZbvabvbbvcbvdbnSbvebvfbvgbvhaaqbvibvjbvkbvlbvmbvnbvmbpraaibvobvpbvqbvrbvrbvsbvtbvubvvbvwbvxbvxbvybvzbvAaaibvBbtZbvCaaibvDbvEbvFbrfbrfbvGaaibrgbrhbvHaaiaaaaaaaaaaaaaabbvIbvJbvKbvJbvKbvJbvLaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaEUaEVbvMbvNbnobnobpKbpLbpMaaibYRbltbXpbltbYLaaqaTQbdWaSqaaqaGGbvRbvSbvTaSGaaibvUbvVbvWbvXbvYaaibvZbwabwbbwcbvZaaqbwdbwebwfaaiaaiaaibFCbwhbwibwjbwkaaibwlbwmbwnbwobwpbwqbwpbwrbwsbwtbwuaaibGdbHubLvaaqbYeaaqbwyaaqbwzboRbwAaaiaGGbwBbvRbwCbwDaaqbwEbwFbwGbwHbwIbwIbwJbwKbwLbwMaaqbwNbwOaouaaqaaqaaqaaJbwPaouaaqaaiaaiaaibwQbwRabnbwSbtPbtQbwTbvrbwUcoAbwWbwWbwWbwXbwYbwZbxaaaibrbbxbaaibxcbxdbrfbxebxfbxgaaibsFbxhaaiaaiaaaaaaaaaaaaaabbxibxjbxkbxlbxlbxmbxiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaaaaATbuhbuibocboccEJboebujaaiaaqbukbYMbumaaqaaqblvbdWbhzaaqbunbuobupbuqburaaibpYbrubusbpYbpYaaibutbuubuvbuwbuxaaqbuybuzbuAaaibuBaaqaaqaouaaqaaJbuCaaibuDbuEbuFbtlbuGbtnbuGbtlbuHbuEbtqaaicmHeEecbZeEceEfabIbuMabIbuNboRbuOaaiboTbuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbuZbvabvbbvcbvdbnSccAbvfbvgbvhaaqbvibvjbvkbvlbvmccybvmbpraaibvobvpbvqbvrbvrbvsbvtbvubvvbvwbvxbvxbvybvzbvAaaibvBbtZbvCaaibvDbvEbvFbrfbrfbvGaaibrgbrhbvHaaiaaaaaaaaaaaaaabbvIbvJbvKbvJbvKbvJbvLaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaEUaEVbvMbvNbnobnobpKbpLbpMaaibYRbltbXpbltbYLaaqaTQbdWaSqaaqaGGbvRbvSbvTaSGaaibvUbvVbvWbvXbvYaaibvZbwabwbbwcbvZaaqbwdbwebwfaaiaaiaaibFCbwhbwibwjbwkaaibwlbwmbwnbwobwpbwqbwpbwrbwsbwtbwuaaibGdbHubLvaaqbYeaaqbwyaaqbwzboRbwAaaiaGGbwBbvRbwCbwDaaqbwEbwFbwGbwHbwIbwIbwJbwKbwLbwMaaqaaJbwOaouaaqaaqaaqaaJbwPaouaaqaaiaaiaaibwQbwRabnbwSbtPbtQbwTbvrbwUcoAbwWbwWbwWbwXbwYbwZbxaaaibrbbxbaaibxcbxdbrfbxebxfbxgaaibsFbxhaaiaaiaaaaaaaaaaaaaabbxibxjbxkbxlbxlbxmbxiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbxnbxobxpbxqbocbocbodboebocaaibxrbltbltbltbXlaaqaTQbdWaSqbxubxvbxwbxxbxybxzaaiaaiaaiaaibxAaaiaaibxBbxCbxDbxEbKvaaqbxGbxHbxIbxXbxKbxWbxMbxNbxObxPbxQaaibuDbxRbxSbtlbwpbxTbwpbtlbxUaaibtqaaibrPbARbznaaqbxYaaqbxZaaqbyaboRbybaaibycbydbyebyfbygabIbyhbyiabIabIbyjbykabIabIbylbymaAnaAqbynbyobypbyqbpmbysbytbyubyvaaibywbyxbyybyzabnbyAbyBbyCbyDbyEaaqbyFbwWbwWbyGbyHbwYbyIaaibyJbyJbyKaaibyLbyMbpybyObrfbyPaaibsFbyQaaiaaaaaaaaaaaaaaaaabbyRbySbxkbxlbxkbyTbvKaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaGGaGHbvMbobbnobnobpKbpLbnoaaibyUbjJbmmbjKbyVabIaSobjMbdXaaqbzebqabyXbyYcwRbzabzbbzcbzdbzdbyWbzfcuTbzhbyYbzibzjaaqbwdboRbzkbzlbzmbxVbzobzpbzqbzrbzsaaibuDaaiaaibztbzubzvbtlbzwbzxacfbzyaaiabnaaiaaiaaiaaiaaibzzaaibzAboRbybaaibzBbzCbzCbzDbzEaaqbzFbzGbzHbzIbzJbzKbzLbzHbzMbzNbzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbAabAbbAcbAdbAebAfbAfbAgbAhbAiaaqbAjbqVbqVbAkbAlbwYbAmaaqbAnbAobApaaqbxJbxLaSGeGXbjxaaiaaibAsaaiaaibAtbAubAubAubAvaaibxibxlbxkbxlbxlbAwbxiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbAybAzbpIbpJbocbocbodboebocaaibAAbiCbiDbABbACbYObAEbAFaSqaaqbAGbqabyXbyYbAHaaqbAIbAJbqbbqbbAKbALbAMbzhbyYbANbAObAPbwdboRbAQbadbzmbwxbASbATbAUbAVbAWbAXabubzxacfarzbAYbxTbAYbzxbAZaaiaaiaaibBabBbbBcbBdbBebBfbBgacfbBhboRbybbuTbBibBjbBkbBlbBmaaqbBnbBobBpbBqbBrbBsbBtbBubBvbBwbBxbBybBzbBAbBBbarbBDbBEbBFbBGbBHaaibBIbBJbBKbBLaaibBMbBNbBObBPbBPaaqbBQbBRbBSaaqbBTbwYbBUaCZbBVbBWbBXbBYbBZbCabCbbCcbCdbCebwvbCgbChbwwbCjbCjbCkbClbCmbCnbCobvJbvKbCpbvKbvJbCqaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHbsHaaabCrbobbnobnobnobCsbCtbCuaaibXibCwbCxbYKbCzaoibCAbCBaSqaaqbCCbCDbCEbCFbCGbCHbCIbCJcuRbCKbCLbCHbCMbCNcsZbCObCPaaqbCQboRbAQbadbzmaaibCRbCSbCTbCUbCVabnbCWbCXbCYbgPacfbCZbDabgPbDbbDcbDdaaibDebDfbDgbDhbDibDibDjbDkbDlboRbDmaaiaaqbDnbjxbDobDpaaqbBnbDqaaqbDrbDsbBsbDtaaqbBnbDubDvaaqaaqaaqaouaaqaaqaaqbDwamwaaqaaiaaibDxaaqaaqaaiaaiaaqaaJaaqaaqaaqaaqaaqaaqaaqbDybDzaCnaCobDAbDBbDCbDDbDDbDEbDFbDGbDHbDIbDJbDKbDLbuLbDNbDNbDObBZbDPaaibDQbDRbDSbwgaaibDUaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazMaaiaaiaaiaoJaoLazMaoJaoLaaiaoJaoLaaiaaibDVafjaaibxAaaqaaqaaqaaqazlbDWaoiaoibDXaoibDYbDZbEabEbbEcbEdbEebqbbEfbqbbEgbzfbEhbqbbyYbqbbEibjxbwdboRbEjbEkbElaaibEmbEnbEobEpbEqabnbErcACbEtbEubnFbEwbExbEybEzcBgbEBaaibECbEDbEEbEFbEGbEHbEIaaibEJbEKbybbELbEMbENbEObEPbEQbERbESbBobjxbETbEUbEVbEWbjxbBnbDubDvbEXbEYczMbFabFbbFcbFdbFebFfaaqbFgbFhbFibFjbFkbFlbFmbCebFobDDbDDbFnbFpbDDbFqbFrbFsbFtbFubDDbFvbFwbFxbFybFzbFAaaiabnaaiaaiaaibFBaaiaaibAtbAvaaibDMbFDbFEbFFbFGbFHbFIbFJaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaabzlbFLbFMbFMbFMbFNbFObFPbFPbFPbPubFQbFPbFPbFRbFPbFPbFPbFPbFPbFSbFTbFUbFPamwbFVbqbbqbbqbbEgbFWbFXbFYbyYbFZbGabGbbwdboRbGcbCibzmaaibGebGfbGgbCSbGhabnbGibGjbGkaaibrRbGmczAacCbGobGpbGqaaibGrbGsbGtbGubEGbEHbEIaaibGvbGwbGxbGybGzbGAbGBbGCbGDbGEbGFbGGaaqaaqbGHbGIaaqaaqbBnbDubDvbjxbGJbGKbGKbGKbGLbGKbGMbGNbGObGPbGQbGRbGRbGSbGTbGUbGVbGWbBZbBZbGXbBZbGYbBZbGZbBZbHabHbbHbbHcbHdbHebHfbHgbHhbHibHjbHkbHlaaibHmbHnaaaaaaaaaaaibHobHpbHqbHrbHsbHtbCfaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazMaaiaaiaaiaoJaoLazMaoJaoLaaiaoJaoLaaiaaibDVafjaaibxAaaqaaqaaqaaqazlbDWaoiaoibDXaoibDYbDZbEabEbbEcbEdbEebqbbEfbqbbEgbzfbEhbqbbyYbqbbEibjxbwdboRbEjbEkbElaaibEmbEnbEobEpbEqabnbErcACbEtbEubnFbEwbExbEybEzcBgbEBaaibECbEDbEEbEFbEGbEHbEIaaibEJbEKbybbELbEMbENbEObEPbEQbERbESbBobjxbETbEUbEVbEWbjxbBnbDubDvbEXbEYczMbFabFbbFcbFdbFebFfaaqbFgccwbFibFjbFkbFlbFmbCebFobDDbDDbFnbFpbDDbFqbFrbFsbFtbFubDDbFvbFwbFxbFybFzbFAaaiabnaaiaaiaaibFBaaiaaibAtbAvaaibDMbFDbFEbFFbFGbFHbFIbFJaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaabzlbFLbFMbFMbFMbFNbFObFPbFPbFPbPubFQbFPbFPbFRbFPbFPbFPbFPbFPbFSbFTbFUbFPamwbFVbqbbqbbqbbEgbFWbFXbFYbyYbFZbGabGbbwdboRbGcbCibzmaaibGebGfbGgbCSbGhabnbGibGjbGkaaibrRbGmczAacCbGobGpbGqaaibGrbGsbGtbGubEGbEHbEIaaibGvbGwbGxbGybGzbGAbGBbGCbGDbGEbGFbGGaaqaaqbGHbGIaaqaaqbBnbDubDvbjxbGJbGKbGKbGKbGLbGKbGMbGNbGObGPbGQbGRbGRbGSbGTbGUbGVbGWbBZbBZbGXbBZbGYbBZbGZbBZbHabHbbHbbHcbHdbHebHfbHgbHhccvbHjbHkbHlaaibHmbHnaaaaaaaaaaaibHobHpbHqbHrbHsbHtbCfaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjHbjHbjHbjHbjHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaabadbHvbHwbHwbHwbHxbHybFPbFPbFPbFPbFPbFPbFPbFRbFPbFPbFPbFPbFPbFSbFTbFUbFPamwbHzbHAbHBbHCbHDbHEbHFbHGbHHbHIbHJbjxbwdboRbHKaaqaaqaaiaaiaaiaaiaaibHLabnaaibHMabnacCabnbHNaaiaaiaaiaaiaaiaaiabnaaiaaiaaiaaiaaiaaiaaibHOboRbHPbnSaaqbHQbHRaaqaaqbBnbHSbHTbEQbHUbHVbHWbHXbHYbESbHZbIabIbbIcbIdbIdbIdbIebIdbIfbIgbIhbIibIjbIkbFibIlaaiaaiaaiaaiaaiaaibImaaiaaiaaiaaJbInaaqaaqbIobIpbIqbIrbHfbIsbItbIubIvbIwbIxaaibHmbIyaaaaaaaaaaaibIzbIAaaibCnaaiaaibCnaaiaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbIBaoKaCobICbIDbIDbIDbIEbIFbIDbHwbHwbHwbHwbHwbIGbIHbHwbHwbIGbHwbHwbHybIIbIJbFPazlaoiaoiaoiaoiaoiaoibIKbEdaaqaaqaaqaaqbwdboRbILbIMbINbIObIPbIQbIRbISbITbIUbIVbIWbIXbIYbIZbJabJbbJcbJdbJebJfbJebJgbJhbJibnQbJjboRbJkbJlbJmboRbJnaaqbJobJpbJqbJrbJsbBnbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDaaqbJEbJFbJGbJHbJIbGKbJJbJKaaqbJLbFibFibFibJMaaibJNbJObJPbJQbJRbJSczzbJUaaicbObJWbJXaaqaaqbJYbIqbJZbKabKbbKcbKdbKebKfbKgaaibKhaaiaaaaaaaaaaaiaaiaaiaaiaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOTaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbKibKjbKibKkbKkbKkbKkbKlbKmbKkbKkbKkbKkbKkbKkbKkbKnbKkbKkbKkbKkbKkbKmbKobKpbKkbKqbKrbKsbKtbKubwVbKwbKxbKybKzbKAbKAaaqbwdbKBbKCboRboRbybbKDbnQbJibJhbKEbKFbKEbKGbKHbKHbKIbKJbKKbKHbKHbKLbKHbKMbKHbJhbJibnQbKNbKObKPbKQbKRbKSboRaaqbKTbJpbKUbKVbKWbBnbKXbKYbKZbLabLbbLcbLdbLebBnbLfbLgaaqaaqbLhbLibLjbLkbLlbLmbLnaaqbLobLpbFibLqbLraaibJNbLsbLtbLubuKbLwbLxbLyaaibLzbLAbLBbLBaaqbLCbLDbLEbLFbLGbLHbVAbLJbLKbVHaaibHmaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbLMbLNbLMbFLbFMbLObLPbLQbLRbLPbLSbLSbLTbLSbLSbLPbLUbLSbLSbLPbLSbLSbLVbLWbLXbLYabIbLZbMabMbbMcbMbbMdbMebMfbMgbMhbMiaaqbwdbTQbMkbMlbMFbPfbPgbSsbMqbMrbMsbMtbMubMvbMwbMwbMxbMybMybMybMybMybMybMzbMAbMBbMCbMDbMEbMFbMGbMHbMIbMJbMKaaqbMLbJpbJqbMMbKWbBnbKXbKYbMNbMObMPbMQbMRbMSbBvbMTbMUaaqbMVbMWbMXaaqbMYaaqbMZaxeaaqbNabNbbNcbNdbNeaaibJNbNfbNgbJQbNhbNibNjbNkaaibNlbLAbLBbLBaaqbNmbNnbNoacCbNpbNqbNrbNsbxFbNuaaibHmaaiaabaabaabaabaabaabaabaabaabaabaabaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbIBaoKbckbNvbHwbHybHwbNwbNxbNybNybNybNzbNybNybUrbNAbNybNybNBbNybNybNCbNDbNEbNybNFbNGbNHbNIbNJbNIbNKbNLbNMbNNbNObNPaaqbNQaaqbNRaaqaaqbMnbNTbNSaaqaaqaaqbNUbXmbNWaaqaaqbNXbJhbJhbNYaaqaaqaaqaoubNZaaqaaqaaqbOaaaqaaqbObaaqbOcaouaaqbOdbOebOfaaqbOgbBnbKXbOhaaibOibOjbOkbOlaaibOmbLfbOnaaqbOobOpbOqbOrbOsbOtabIbOubOvbOwbOxbOybOzbOAaaiaaiaaiaaiaaiaaiaaiaaiaaiaaibOBbOCbODbODaaqbOEbOFbOGaaiaaiaaiaaiaaiaaiaaiaaibHmaaiaaabOHbOHbOHaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbOIbAubAubAvaaqaaqaaiaaiaaiaaibOJaabaabaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbLMbLNbLMbOKbIDbIFbIDbOLbOMbONbOObOObOPbOObOObOQbORbOObOObOSbOObOObOObOObOTbOUabXbOVbOWbOXbOYbOXbOZbPabPbbPcbPdbMiaaqaaqaaqbQUaaqbMobMpbPhbPibPjaaqbPkbPlbPmbPnbPoaaqbPpbPqbPraaqbPsbPtbsEbPvbPwbPxbPybPzbPAabXbPBbPCbPDbPEbPFabXbPGbPHbPIbPJbPKbPLbPMbKYbPNbPObPPbPQbPRbPSbBvbPTbPUbPVbPWbPXbPXbPYbPZbQaaaqbQbbQcbQdbQebQfbQgbQhaaibQibQjbQkaaibQlbQmbQnbQoaaibUXbQqbQrbQraaqbQsbQtbIraaibrhbQubQvbQwbQwbQvbQwbQxaaiaaabOHbQybOHaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabbQzbQAbQBbQAaaqaaiaaibQCbQDbQCbQEaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbQFbQGbQFbQHbQHbQIbQHbQHbQJbQHbQHbQHbQKbQHbQHbQHbQLbQHbQHbQMbQHbQHbQHbQHbQHbQHbQNbQObQPbNNbNNbNNbNNbNNbQQbQRbQSbQTbEdacEaaqbPeabXbVDbQWbQWbQWbQXaaqcmIbQZbQZbQZbRabRbbRcbRdbReabXbRfbRgbRhcjQbRibRjaaqaaqbRkaaqbRlbRmcqgbRobRpaaqbKTbJqbKUbKVbRqbRrbRsbRtacCcpBbRvbRwbRxaaibRybRzbRAbRBbRCbRDcmJbRFbRGbRHaaqaaqaaqaaqaaqaaJaCGaoraaibRIbRJbRJbRKbQobRLbQobRMaaibRNbLAbRObROaaqbIpbRPbIraaiaaibRQaaiaaiaaiaaiaaiaaiaaiaaiaaibRRaaiaaiaaiaaiaaiaaiaaiaaiaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbRSbQAbQAbRTaaiaaibQCbQCbRUbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbIBaoKaEWbRVbFMbRWbFMbRXbRYbRZbHwbHwbSabHwbHwbFMbSbbHwbHwbScbHwbSdbHwbHwbSebFPaaqbSfbSgbShbSibSjbSkcrRbSmbSnbSobSpbSqbEdaaqbQUaaqbQXbQWbSrbQWbXhaaqbStbQZbSubQZbXqaaqbSvbSwbSxaaqbSybSzbSAbSBbSCbSDabIbSEbSFabIbSGbSHbSIbSJbSKaaqbSLbJqbJqbSMbRqbRrbSNbSObSPbPObSQbSRbSSbSTbSUbSVbSWaaqbSXbSYbREbSZbSZbTaaaqbTbbTcbTdbTebTfbTgbThaaibRJbRJbRJbTibQobTjbQobTkaaibTlbLAbTmbTmaaqbTnbTobIraaibTpbTqbTracCbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTDbTEbTFbTGaaiaaiaaiaaiaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabTHaaibRSaaiaaibQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaiaaiaaqazSbTIazTaaqbTJaaqaaqazSaoKazTaaqaaqbTKaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqbTLaaqaaqaaqbTMbTNbTObTPaaqbQXbQWbQWbQWbTRaaqbStbQZbQZbTTbTUabIbTVbTWbTXaaqaaqaaqaaqaaqbTYaaqaaqbTZbUaaaqaaqaaJaaqaouaaqaaqbUbbUcbUcaaqaaqbUdbUebUfbUgbUhbUibUjbUkbUlaaqbUmbUnaaqbUobSYbREbSZbSZbSZaaqbUpbUqcfTbUsbUtbUubUvaaibRJbUwbRJbUxbQobRLbUybUzacCbUAbUBbUCbUCabXbUDbUEbNobUFbUGbUHbUIbUJbUKbULbULbUMbUNbULbUObULbUPbUQbURbUSbUTbUUbUVacfbUWbXIbUYbUZaabaabaabaabaabaabaabaabaabaabaabaabaabaaqaaibVabVbbVbbQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaibVcbVdbVebVfbVgbVhbVibVjaaibVkbVlbVmbVnbVobVpbVqbVrbVsbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVtbVrbVrbVrbVubVvbVwbVxaaqbVybVzbXobQWbQXaOqbVBbVEbVFbVGbVCaaqbVIbVJbVKbVLbVMbVMbVMbVMbVNbVObVPbVQbVQbVRbVRbVSbVTbVUaaqaaqbVVbVWbVXbVYbVZbRrbWabUfbWbbWcaHobWdbLdbWeaHobWfbWgaoibWhbWibWjbWkbWlbWmaaqbWnbWobWpbWqbWrbWsbWtaaibWubRJbRJaaibWveGWbWxaaiaaqbWybWzbJXaaqaaqbWAbRPbWBaaibWCbWDbWEaaibWFbWGbWGbWHbWIbWJbWKbWGbWLbWMbWGbWGbWNbWObWPbWQbWRbWSbWTbWUaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaiaaibWVbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKaaaaaaaaibWWbWXbWXbWYbWXbWXbWZbXaaaibXbbXcbXdbXcbXcbXeaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaqbXfaaqaaqbXgaaqbxtbADbXjbXkbxsaaJbvPbXnbTSbulbpPaOqbXrbXsbXtabIacfacfacfacfbXuauWbAXabXbXvabXabXbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbQVbXJbXKbXLbXMbXNbXObXPbXQbXRaaqaaqaEqabXabXabXbXSaaqaaqbXTaaqamwbXUbXVbXWaaibXXbRJbRJbXYbXZbYabYbbYcaaqaaqbYdaaqaaqbuJbYfbRPbtZaaiaaibYgaaiaaibYhbYibYjbYkbYlbWGbYmbWPbYnbWPbWPbWPbYobTzbYpaaibYqbYrbYsbYtaabaabaabaabaabaabaabaabaabaabaabaabaabaaibQCbQCbQCbQCbQCbQCbYubQCbYvbQCbQCbQCbQCbQCaaiaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYwbYxbYybYxbYzaaaaaaaaaaaibYAbWXbWXbWYbWXbWXbWZbYBaaibXbbYCbYDbYEbojbXeaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibYFbYGbYHaaqbYIaaqbYJbMjbMmbQXbCyaOrbvObStbYPbvQbCvaOrbYSbYTbYUaaiaaibYVbYWbYXbYYbYZabnbZabBJbZbaaqbZcbBJbBJbZdabXbZebZfbQYbXEbZgbZhbZibZjbZkbZlbZmbZnbZobZlbZlbZpbZqbZqbZqbZrbZqbZqbZqbZsbaqbZubZvbZwbZxbZybZzbZAaaibZBbZCbZDbZEbZFbZGbZHbZIbZJbZKbZLbtZbZMbtZbYfbRPbtZaaibrhbZNbZOaaiaaiaaqaaqaaqbZPbWGbZQbRnbWGbZRbZSbZTbZUbZVbZWaaibZXbZYbZZaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaicaacaacaacaacaacaacabbQCcaccaabYvbQCbQCbQCbQCaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadcaecafcagcadbfcaoKbckaaicahcaibWXbQpbWXbWXbWZcajaaibXbcakbYDbYDbYDbXeaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicalcamcanaaqbYIaaiaaiaaiaaiaaiaaiaaqaaqaaqaaqaaqaaqaaqcaocapcaqcarcascatcaucaucavcawabnbBJbBJcaxaaqcaybBJbBJbBJcazcaAcaBbXCcaCaHocaDbZqcaEcaFcaGbKXcaFcaHcaIcaIcaIcaIcaIcaIcaFcaIcaIcaIbKXcaKcaLcaMcaNcaOcaPcaQcaRaaicaScaTcaTcaUbRJcaVcaWcaXcaYcaZcbacbbbtZcbcbYfbRPcbdaaibrhcbecbfcbgaaicbhcbicbjbWGbWGcbkbWGbWGcblcbmcbncbocbpcbqaaicbrcbscbtcbuaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbvbQAbQAbQAbQAbQAbQAbQAcbwbQDbQCbQCbQCbQCcbxbQDaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYycbycbzcbybYycbAcbBcbCaaicbDbWXbWXcbEbWXcbFcbGcbHaaicbIbXccbJbYDbYDcbKaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaibYIaaiaaaaaaaaaaaaaaicbLcbMcbNbJVcbPcbQaaqcbRcbScbTcbUcbVcbWcbXcbXcbYbpXabnaaiaaiaaiafbccaaaibBJbBJaaqccbcccccdcceccfccgcaOcchcciccjcckcclccmccncaIcaIcaIccoccpccqccpccoaaiauYacCacCccrccsccoaaqcctccuaaiccvccwccxccybjjccAccBaaiaaiaaiabnaaiaaiaaiccCccDccEaaibrhcbeccFcbgaaiccGbWGbWGbWGbZRccHccIccJaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaibVbbVbbVbbVbbVbbVbccKbQCbVabVbccLbQCbQCbQCbQCaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadcbycbycbyccMccNccOccPccQccRbWXbWXbWXbWXbWXbWXccSaaiccTbXcccUbYDbYDccVaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWaaaaabaabaaiaaiaaiaaiaaiaaiaaiaaiaaqbXgaCZaaaccXccYccZcdacdbcdccddcdecdfcdgabXcdhcdicdjcdkcdlcdmcdncdocdpcdqabncdrcdscdtcducdvaaibBJbBJaaqaaqaaqaaqaaJaaqcdwcdwcdxaaqaaqaouaaqaPPcdycdBcdAcdBacfcdCcdDcdEacfcdFcdFacfcdGcdHcdIaaicdJcdKbVUaaiaaiaaiabnbNVaaicdMbAZaaicdNcdOcdPbBJcdQaaiabncdRafjaaibrhcbecdScdTaaicdUcdVcdWbZRcdXcdYccIcdZaaiaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaibQCbQCbQCbQCbQCbQCbYubQCccLbQCbQCbQCbQCbQCaaiaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYycbzcbzcbzbYyceacebcecacfcedceecefcefcefcefcegcehaaibXbceicejbYDbYDccVaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacekcelcelcelcemcenceobqQceqcercesaaqcetbXgaATaaaceucevcewcexceycdccezceAceBceCaaqceDbYTbTWcbUceEcauceFcauceGceHceIceJceKceLceKceMaaibBJbBJaaqceNceOcePceQceRceSceSceTceUceVceWceXceYabXceZcfacfaacCcfbcfccfdaaiaaaaaaaaicfecffcfgacfcfhcficfjcfkcfkcfkcflcfmcfncfocfpcfncfncfncfqcfncfncfrcfscftcfucfvbQwcfwcfxbrhaaicfycfzcfAcfBcfycfCcfDcfEaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaiaaibWVbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbLMbLNbLMbOKbIDbIFbIDbOLbOMbONbOObOObOPbOObOObOQbORbOObOObOSbOObOObOObOObOTbOUabXbOVbOWbOXbOYbOXbOZbPabPbbPcbPdbMiaaqaaqaaqbQUaaqbMobMpbPhbPibPjaaqbPkbPlbPmbPnbPoaaqbPpbPqbPraaqbPsbPtbsEbPvbPwbPxbPybPzbPAabXbPBbPCbPDbPEbPFabXbPGbPHbPIbPJbPKbPLbPMbKYbPNbPObPPbPQbPRbPSbBvbPTbPUbPVbPWbPXbPXbPYbPZbQaaaqbQbbQcbQdbWxbQfbQgbQhaaibWvbQlbQobXYbQobQobXZacCacCbXXbQqbQrbQraaqbQsbQtbIraaibrhbQubQvbQwbQwbQvbQwbQxaaiaaabOHbQybOHaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabbQzbQAbQBbQAaaqaaiaaibQCbQDbQCbQEaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbQFbQGbQFbQHbQHbQIbQHbQHbQJbQHbQHbQHbQKbQHbQHbQHbQLbQHbQHbQMbQHbQHbQHbQHbQHbQHbQNbQObQPbNNbNNbNNbNNbNNbQQbQRbQSbQTbEdacEaaqbPeabXbVDbQWbQWbQWbQXaaqcmIbQZbQZbQZbRabRbbRcbRdbReabXbRfbRgbRhcjQbRibRjaaqaaqbRkaaqbRlbRmcqgbRobRpaaqbKTbJqbKUbKVbRqbRrbRsbRtacCcpBbRvbRwbRxaaibRybRzbRAbRBbRCbRDcmJbRFbRGbRHaaqaaqaaqaaqaaqaaJaCGaoraaibRLbQobQocaVbQocaUbRMaaiaaicaWbLAbRObROaaqbIpbRPbIraaiaaibRQaaiaaiaaiaaiaaiaaiaaiaaiaaibRRaaiaaiaaiaaiaaiaaiaaiaaiaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacbRSbQAbQAbRTaaiaaibQCbQCbRUbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKbIBaoKaEWbRVbFMbRWbFMbRXbRYbRZbHwbHwbSabHwbHwbFMbSbbHwbHwbScbHwbSdbHwbHwbSebFPaaqbSfbSgbShbSibSjbSkcrRbSmbSnbSobSpbSqbEdaaqbQUaaqbQXbQWbSrbQWbXhaaqbStbQZbSubQZbXqaaqbSvbSwbSxaaqbSybSzbSAbSBbSCbSDabIbSEbSFabIbSGbSHbSIbSJbSKaaqbSLbJqbJqbSMbRqbRrbSNbSObSPbPObSQbSRbSSbSTbSUbSVbSWaaqcbabSYbREbSZbSZbTaaaqbTbbTcbTdbTebTfbTgbThaaibRLcaZbQobQobQocaXbUyaaiaaicaYbLAbTmbTmaaqbTnbTobIraaibTpbTqbTracCbTsbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTDbTEbTFbTGaaiaaiaaiaaiaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabTHaaibRSaaiaaibQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaiaaiaaqazSbTIazTaaqbTJaaqaaqazSaoKazTaaqaaqbTKaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqaaqbTLaaqaaqaaqbTMbTNbTObTPaaqbQXbQWbQWbQWbTRaaqbStbQZbQZbTTbTUabIbTVbTWbTXaaqaaqaaqaaqaaqbTYaaqaaqbTZbUaaaqaaqaaJaaqaouaaqaaqbUbbUcbUcaaqaaqbUdbUebUfbUgbUhbUibUjbUkbUlaaqbUmbUnaaqbSXbSYbREbSZbSZbSZaaqbUpbUqcfTbUsbUtbUubUvaaibZDaaibZCbZBbYcaaiafjaaiaaibYabUBbUCbUCabXbUDbUEbNobUFbUGbUHbUIbUJbUKbULbULbUMbUNbULbUObULbUPbUQbURbUSbUTbUUbUVacfbUWbXIbUYbUZaabaabaabaabaabaabaabaabaabaabaabaabaabaaqaaibVabVbbVbbQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKbFKbFKaaaaaibVcbVdbVebVfbVgbVhbVibVjaaibVkbVlbVmbVnbVobVpbVqbVrbVsbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVrbVtbVrbVrbVrbVubVvbVwbVxaaqbVybVzbXobQWbQXaOqbVBbVEbVFbVGbVCaaqbVIbVJbVKbVLbVMbVMbVMbVMbVNbVObVPbVQbVQbVRbVRbVSbVTbVUaaqaaqbVVbVWbVXbVYbVZbRrbWabUfbWbbWcaHobWdbLdbWeaHobWfbWgaoibZEbZFbWjbWkbWlbWmaaqbWnbWobWpbWqbWrbWsbWtaaicaSbZLbZKbZHbZGbZLbZIbUXaaqbWybWzbJXaaqaaqbWAbRPbWBaaibWCbWDbWEaaibWFbWGbWGbWHbWIbWJbWKbWGbWLbWMbWGbWGbWNbWObWPbWQbWRbWSbWTbWUaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaiaaibWVbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFKbFKbFKbFKbFKaaaaaaaaibWWbWXbWXbWYbWXbWXbWZbXaaaibXbbXcbXdbXcbXcbXeaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaqbXfaaqaaqbXgaaqbxtbADbXjbXkbxsaaJbvPbXnbTSbulbpPaOqbXrbXsbXtabIacfacfacfacfbXuauWbAXabXbXvabXabXbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbQVbXJbXKbXLbXMbXNbXObXPbXQbXRaaqaaqaEqabXabXabXbXSaaqaaqbXTaaqamwbXUbXVbXWaaicVCbRNbjjbTkbjjbTjbTibTlaaqaaqbYdaaqaaqbuJbYfbRPbtZaaiaaibYgaaiaaibYhbYibYjbYkbYlbWGbYmbWPbYnbWPbWPbWPbYobTzbYpaaibYqbYrbYsbYtaabaabaabaabaabaabaabaabaabaabaabaabaabaaibQCbQCbQCbQCbQCbQCbYubQCbYvbQCbQCbQCbQCbQCaaiaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYwbYxbYybYxbYzaaaaaaaaaaaibYAbWXbWXbWYbWXbWXbWZbYBaaibXbbYCbYDbYEbojbXeaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibYFbYGbYHaaqbYIaaqbYJbMjbMmbQXbCyaOrbvObStbYPbvQbCvaOrbYSbYTbYUaaiaaibYVbYWbYXbYYbYZabnbZabBJbZbaaqbZcbBJbBJbZdabXbZebZfbQYbXEbZgbZhbZibZjbZkbZlbZmbZnbZobZlbZlbZpbZqbZqbZqbZrbZqbZqbZqbZsbaqbZubZvbZwbZxbZybZzbZAaaibUobUxbUwbRKbUwbUzbUAbjjbWhbWubWibtZbZMbtZbYfbRPbtZaaibrhbZNbZOaaiaaiaaqaaqaaqbZPbWGbZQbRnbWGbZRbZSbZTbZUbZVbZWaaibZXbZYbZZaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaicaacaacaacaacaacaacabbQCcaccaabYvbQCbQCbQCbQCaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAxbAxbAxbAxbAxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadcaecafcagcadbfcaoKbckaaicahcaibWXbQpbWXbWXbWZcajaaibXbcakbYDbYDbYDbXeaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicalcamcanaaqbYIaaiaaiaaiaaiaaiaaiaaqaaqaaqaaqaaqaaqaaqcaocapcaqcarcascatcaucaucavcawabnbBJbBJcaxaaqcaybBJbBJbBJcazcaAcaBbXCcaCaHocaDbZqcaEcaFcaGbKXcaFcaHcaIcaIcaIcaIcaIcaIcaFcaIcaIcaIbKXcaKcaLcaMcaNcaOcaPcaQcaRaaibvebpwbjjbQibjjbQebHibFhbZJbwNbvncbbbtZcbcbYfbRPcbdaaibrhcbecbfcbgaaicbhcbicbjbWGbWGcbkbWGbWGcblcbmcbncbocbpcbqaaicbrcbscbtcbuaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbvbQAbQAbQAbQAbQAbQAbQAcbwbQDbQCbQCbQCbQCcbxbQDaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYycbycbzcbybYycbAcbBcbCaaicbDbWXbWXcbEbWXcbFcbGcbHaaicbIbXccbJbYDbYDcbKaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaibYIaaiaaaaaaaaaaaaaaicbLcbMcbNbJVcbPcbQaaqcbRcbScbTcbUcbVcbWcbXcbXcbYbpXabnaaiaaiaaiafbccaaaibBJbBJaaqccbcccccdcceccfccgcaOcchcciccjcckcclccmccncaIcaIcaIccoccpccqccpccoaaiauYacCacCccrccsccoaaqcctccuaaibQjbQmbQkbQnbRJcaTbRIaaiaaiaaiabnaaiaaiaaiccCccDccEaaibrhcbeccFcbgaaiccGbWGbWGbWGbZRccHccIccJaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaibVbbVbbVbbVbbVbbVbccKbQCbVabVbccLbQCbQCbQCbQCaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadcbycbycbyccMccNccOccPccQccRbWXbWXbWXbWXbWXbWXccSaaiccTbXcccUbYDbYDccVaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWaaaaabaabaaiaaiaaiaaiaaiaaiaaiaaiaaqbXgaCZaaaccXccYccZcdacdbcdccddcdecdfcdgabXcdhcdicdjcdkcdlcdmcdncdocdpcdqabncdrcdscdtcducdvaaibBJbBJaaqaaqaaqaaqaaJaaqcdwcdwcdxaaqaaqaouaaqaPPcdycdBcdAcdBacfcdCcdDcdEacfcdFcdFacfcdGcdHcdIaaicdJcdKbVUaaiaaiabnaaibNVaaibzxbAZaaicdNcdOcdPbBJcdQaaiabncdRafjaaibrhcbecdScdTaaicdUcdVcdWbZRcdXcdYccIcdZaaiaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaibQCbQCbQCbQCbQCbQCbYubQCccLbQCbQCbQCbQCbQCaaiaaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYycbzcbzcbzbYyceacebcecacfcedceecefcefcefcefcegcehaaibXbceicejbYDbYDccVaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacekcelcelcelcemcenceobqQceqcercesaaqcetbXgaATaaaceucevcewcexceycdccezceAceBceCaaqceDbYTbTWcbUceEcauceFcauceGceHceIceJceKceLceKceMaaibBJbBJaaqceNceOcePceQceRceSceSceTceUceVceWceXceYabXceZcfacfaacCcfbcfccfdaaiaaaaaaaaicfecffcfgacfcfhcficfjcfkcfkcflbAacfmcfncfocfpcfncfncfncfqcfncfncfrcfscftcfucfvbQwcfwcfxbrhaaicfycfzcfAcfBcfycfCcfDcfEaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaiaaibWVbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadcfFcfGcfHcadaINaoKbckaaiaaiaaiaoJaoKaoKaoLaaiaaiaaicfIcfJbYDbYDcfKcfLaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiawjcfMcfNcfOcfPcfPcfQaaqcfRbYIaATaaaceucfSbRubrScfVcfWcfXcfYcfVcfVbtrcgacgbcgcacCacCcgdcgecaucgfcggcghceLcgicgjcgkcglaaibBJbBJaaqcgmcgncgocgpcgqcgrcgrcgscgtcgucgvcgwcgxaaqcgycaIcgzaaicgAcfccgBaaiaaaaaaaaicgCcgDcgEaaibBKcgFcgGcgGcgGcgGcgGcgGcgHcgIcgJcgKacfacfcgLcgMacfacfcgNcgOcgPabIcgQcgRcgSbrhaaicgTbWGbZRcgUcgVcgUcgWcgXaaibOHbOHaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaqaaicaccaacaabQCbQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgYbYxcgZbYxchachbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaichcaYEaSFazTaaiaaiaaiaaaaaaaaaaaaaaaaaaaagaaaaaaaaachdchechfchgchhchichjchkchlchlchmaaqbYHbXgaATaaaceuchnchoafbchpcdcchqchrchschtaaqceDbYTbYUchuaaichvaaqchwchxchychzchAceLceLchBchCaaibBJchDaaqchEchFchGchHchHchHchIchJchHchHchKchGchLaaichMcaIchNaaibSlcfccgBaaiaaaaaaaaichQchRchSaaichTbBJchDaaiaaiaaiaaiaaiaoJaoKaoLaaiaaiaabaaaaaaaaaaaichUchVamuaaiaaiaaichWaamaaibWJccIchXchYchZciacibcgVciccidbOHaaaaaaaaaaaaaaaaabaaaaaaaaaaaqaaqaaqaabaaaaaaaabaaaaaaaabaaaaaabTHaaibRSaaiaaibQCbQCbQCbQCbQCbQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacieaERaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdcifcigcihciicfOcijcfOcikcfOcilcimcincioaERaaacipccYciqcdacircdccdcciscitciuabIcivciwcixciyaaicizeFlciBciCciDabnciEciFciGciHciIaaibBJbBJaaqaaqaaJciJciKciLciMaaqciNciOciPciQbUfaaJaaicgycaIcgzaaiciRcfccgBaaiaaaaaaaaiciSciTciUaaibBJbBJbBJaaiaabaaaaaaaabaaaaabaaaaaaaaaaabaaaaaaaaaciVciWciXciYaaiaaiciZcjacjbaaibWJcjccjdcjecjfcjgcjhbWGaaibOHbOHaaacjicjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjjcjkcjlcjmcjmcjnaaiaaibQCbQCcjobQCbQCaaiaaiaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -13755,7 +13753,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadM
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMneaueaueaueaueaueaudMndMndMndMndMndMndMneaueaueaueaueaudMndMndTOdUBdUBdUBeexeeNeeOebneeQeeReeSeeTeeUeeVeeWeboeeYeeZeaidUBdUBdTOdTOdTOdTOdJadJadJadJadJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdJadJadJadTOdTOdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdTOdTOdTOdJadJadJadJadKkdKkdKkedOefaefeefcefdefeefeedOedWedXeffedUedOefgebxefiefiefieefdUBdUBdUBdUBdUBdUBdUBaaaaaaaaaaaaaaaaaaaaaaaaaaadTOdTOdTOdUBdUBdUBdUBdUBdUBdUBdUBefjefkeflefmefkefkdUBdUBdUBdUBdUBdUBdTOdJadJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdJadKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMndMneaueaueaudMndMndMndMndMndMndMndMneaueaueaudMndMndJadTOdUBdUBdUBeexefnefoefpefqefoefrefoefoefseftefueeYefvefwdUBdUBdUBdUBdUBdTOdTOdTOdJadJadJadJadJadJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdJadJadTOdTOdWTdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdJadJadJadJadJadJaedOefxefeefyefzefAefBedOedOedOedOedUedOefgefCefCefCefDeejdUBdUBdUBdUBdUBdUBdUBaaaaaaaaaaaaaaaaaaaaaaaaaaadUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBefjebyefFefFefGefkdUBefHdUBdUBdUBdXGdWTdTOdJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdKkdJadJadKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMneaueaueaudMndMndMndMndMndMndMndMndMndMndMndMndMndJadTOdUBdUBdUBeexefIefoefoefJefoefreGKefoefoefKefLefMeeZeafdUBdUBdUBdUBdUBdUBdUBdTOdTOdTOdTOdJadJadJadJadJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdJadJadTOdTOdUBeegdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdTOdTOdJadJadJaedOefNeGLefOefeefPebSefQefDefRefSefTedOecdefCefVecqefXeesdUBdUBdUBdUBdUBdUBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUBdUBdUBdUBdUBefYefYefZegaefjeGMegcegdedyefkefkefkefkdUBdUBdUBdUBdTOdTOdJadJadKkdKkdKkdKkdKkdKkdKkdKkdKkdJadKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMndMndMndMndMndMndMndMndMndMndMndMndMndMndKkdKkdTOdTOdUBdUBeexegfefoeggeghegiegjegkefoeexeexeexeexeexeexebbeaidUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdTOdJadJadJadJadJadKkdKkdKkdKkdKkdKkdKkdJadJadJadTOdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBebbeaidUBdUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdJadJaedOedOedOedOedOedOedOeglegmegneglegmedOedOedOedOedOegoedOedOegpegqdUBdUBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUBdUBegregaegsegteguegvegwegxegxegyegzedSegBegCeaidUBdUBdUBdWUdTOdJadJadKkdKkdKkdKkdKkdKkdKkdJadJadJadKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMndMndMndMndMndMndMndMndMndMndMndMndMndMndKkdKkdTOdTOdUBdUBeexegfefoeggeghegiegjegkefoeexeexeexeexeexeexebbeaidUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdTOdJadJadJadJadJadKkdKkdKkdKkdKkdKkdKkdJadJadJadTOdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBdUBebbeaidUBdUBdUBdUBdUBdUBdUBdUBdUBdTOdTOdJadJaedOedOedOedOedOedOedOeglegmegneglegmedOedOedOedOedOegoedOedOegpegqdUBdUBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUBdUBegregaegsegteguegvccBegxegxegyegzedSegBegCeaidUBdUBdUBdWUdTOdJadJadKkdKkdKkdKkdKkdKkdKkdJadJadJadKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMndMndMndMndMndMndMndMndMndMndKkdKkdJadTOdUBdUBeexegDeePegFefqegGegHegIegJegKegLegMegNegOegPecgecheaGeaGeaGeaGeaGeaBdUBdUBdUBdUBdTOdTOdTOdJadJadJadJadJadKkdKkdKkdJadJadJadJadTOdTOdUBdUBeceeaGeaGeaGeaGeaGeaGeaGeaGecgecheaGeaGeaGeaGeaBdUBdUBdUBdUBdUBdTOdJadJadJadJadJaedOeeXegRegSefCefXegTefDefXefQegUegVegWefDefXefCegYegZehaeeHeeIehbehbehbehbehbehbehbehbehcehcehcehcehcehcehcefZehdeheehfegtehgehhehiehjegxegxehkehlehmehnehoehpdUBdUBdUBdWUdTOdJadJadKkdKkdKkdKkdKkdKkdJadJadJadKkdKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMndMndMndKkdKkdJadTOdUBdUBeexeexeexeexeexehqehrehseexeexehteexeexeexeexeadeafdUBdUBdUBdUBdUBeardUBdUBdUBdUBdTOdUBdTOdTOdJadJadJadJadJadJadJadJadJadJadTOdTOdUBdUBdUBeardUBdUBdUBdUBdUBdUBdUBdUBeadeafdUBdUBdUBdUBeardUBdUBdUBdUBdUBdTOdTOdWTdTOdTOdJaedOedOedOedOefCefXehuehvehwefSeGNehyehyehzehzehAehyehBehCehyehCehDehDehDehDehDehDehDehDehEehEehEehEehEehEehEehFehGehFehHehGehIehJehKehLehMefbehOefkefkefkegCeafdUBdUBdUBdUBdTOdTOdJadJadKkdKkdKkdKkdKkdJadJadJadKkdKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadMndMndKkdKkdJadTOdTOdUBdUBdUBdUBdUBeexehPehQehRefheexehTehUdXPdUBdUBdUBdUBdUBeatdUBdUBdUBeaAeaGeaGeaBdUBdUBdUBdUBdTOdJadJadJadJadJadJadJadJadJadJadTOdUBdUBeceeaGecfdUBdUBdUBdUBdTOdUBdUBeatdUBdUBdUBdUBdUBdUBeardUBdUBdUBdUBdUBdUBdUBeegdUBdTOdTOdTOdTOdTOedOefCehVehWehXehXehWehYehZeiaehXehXeibehWefEeideieeifeigeigeigeigeigeigeigeigeiheiheiheiheiheiheiieijeikeileimeineioeipeiqefYefYefYefYefYefYefYefYeireiseiteisdXPdWUdTOdJadJadKkdKkdKkdKkdJadJadJadJadKkdKkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/nano/templates/teleporter_console.tmpl b/nano/templates/teleporter_console.tmpl
index 4b803dd79d1..c101b1b833c 100644
--- a/nano/templates/teleporter_console.tmpl
+++ b/nano/templates/teleporter_console.tmpl
@@ -28,7 +28,7 @@ Used In File(s): \code\game\machinery\teleporter.dm
{{:helper.link('Get target from memory', 'arrowthickstop-1-s', {'locked': 1}, data.locked ? '' : 'disabled')}}
-
{{:helper.link('Eject SPS device', 'eject', {'eject': 1}, data.locked ? '' : 'disabled')}}
+
{{:helper.link('Eject GPS device', 'eject', {'eject': 1}, data.locked ? '' : 'disabled')}}
{{:helper.link('Calibrate hub', 'arrow-4-diag', {'calibrate': 1}, data.target == 'None' ? 'disabled' : '')}}
diff --git a/nano/templates/telescience_console.tmpl b/nano/templates/telescience_console.tmpl
deleted file mode 100644
index 48f26e74728..00000000000
--- a/nano/templates/telescience_console.tmpl
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
Telescience Console
-
-
Coordinates:
-
- {{:helper.link('X: ' + data.coordx, 'gear', {'setx': 1})}}
- {{:helper.link('Y: ' + data.coordy, 'gear', {'sety': 1})}}
- {{:helper.link('Z: ' + data.coordz, 'gear', {'setz': 1})}}
-
-
-
-
Controls:
-
- {{:helper.link('Send', 'gear', {'send': 1}, null, (data.coordx != 'Unset' && data.coordy != 'Unset' && data.coordz != 'Unset') ? '' : 'disabled')}}
- {{:helper.link('Receive', 'gear', {'receive': 1}, null, (data.coordx != 'Unset' && data.coordy != 'Unset' && data.coordz != 'Unset') ? '' : 'disabled')}}
- {{:helper.link('Recalibrate', 'gear', {'recal': 1})}}
-
-
-{{if data.sps}}
-
Space Positioning System
-
-
Options:
-
- {{:helper.link('Eject SPS', 'eject', {'ejectSPS': 1})}}
- {{:helper.link('Set SPS Memory', 'arrowstop-1-n', {'setMemory': 1})}}
-
-
-{{/if}}
diff --git a/paradise.dme b/paradise.dme
index 2689cc3ae6a..b99b8aeeceb 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -427,7 +427,6 @@
#include "code\game\machinery\supply_display.dm"
#include "code\game\machinery\syndicatebeacon.dm"
#include "code\game\machinery\syndicatebomb.dm"
-#include "code\game\machinery\telepad.dm"
#include "code\game\machinery\teleporter.dm"
#include "code\game\machinery\transformer.dm"
#include "code\game\machinery\turrets.dm"
@@ -485,7 +484,6 @@
#include "code\game\machinery\computer\store.dm"
#include "code\game\machinery\computer\syndicate_specops_shuttle.dm"
#include "code\game\machinery\computer\telecrystalconsoles.dm"
-#include "code\game\machinery\computer\telescience.dm"
#include "code\game\machinery\computer\xenos_shuttle.dm"
#include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_control.dm"
@@ -589,7 +587,6 @@
#include "code\game\objects\effects\spawners\vaultspawner.dm"
#include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm"
-#include "code\game\objects\items\bluespace_crystal.dm"
#include "code\game\objects\items\bodybag.dm"
#include "code\game\objects\items\candle.dm"
#include "code\game\objects\items\contraband.dm"
@@ -604,7 +601,6 @@
#include "code\game\objects\items\devices\debugger.dm"
#include "code\game\objects\items\devices\flash.dm"
#include "code\game\objects\items\devices\flashlight.dm"
-#include "code\game\objects\items\devices\gps.dm"
#include "code\game\objects\items\devices\handtv.dm"
#include "code\game\objects\items\devices\laserpointer.dm"
#include "code\game\objects\items\devices\lightreplacer.dm"
@@ -673,7 +669,6 @@
#include "code\game\objects\items\weapons\paiwire.dm"
#include "code\game\objects\items\weapons\power_cells.dm"
#include "code\game\objects\items\weapons\RCD.dm"
-#include "code\game\objects\items\weapons\RCS.dm"
#include "code\game\objects\items\weapons\RSF.dm"
#include "code\game\objects\items\weapons\scrolls.dm"
#include "code\game\objects\items\weapons\shards.dm"
@@ -1534,6 +1529,10 @@
#include "code\modules\surgery\ribcage.dm"
#include "code\modules\surgery\robolimbs.dm"
#include "code\modules\surgery\surgery.dm"
+#include "code\modules\telesci\bscrystal.dm"
+#include "code\modules\telesci\gps.dm"
+#include "code\modules\telesci\telepad.dm"
+#include "code\modules\telesci\telesci_computer.dm"
#include "code\modules\vehicles\ambulance.dm"
#include "code\modules\vehicles\cargo_train.dm"
#include "code\modules\vehicles\janicart.dm"