Merge pull request #8515 from Kyep/depot

Reworks Syndicate Supply Depot
This commit is contained in:
Crazy Lemon
2018-08-07 09:34:02 -07:00
committed by GitHub
39 changed files with 2244 additions and 186 deletions
+210 -85
View File
@@ -174,6 +174,7 @@
"dr" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
"ds" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
"dt" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
"du" = (/turf/space,/area/syndicate_depot/perimeter)
"dv" = (/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
"dw" = (/obj/item/disk/data/demo,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"dx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
@@ -273,6 +274,7 @@
"fn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
"fo" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
"fp" = (/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
"fq" = (/obj/effect/landmark{name = "syndi_depot_backup"},/turf/space,/area/syndicate_depot/perimeter)
"fr" = (/obj/item/ore/slag,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"fs" = (/obj/item/shard,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
"ft" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
@@ -563,6 +565,7 @@
"kS" = (/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload)
"kT" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
"kU" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"kV" = (/turf/space,/area/syndicate_depot/outer)
"kW" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"kX" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
"kY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
@@ -616,42 +619,42 @@
"lU" = (/obj/structure/table,/obj/item/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
"lV" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/teleporter)
"lW" = (/obj/machinery/power/apc/noalarm{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
"lX" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot)
"lY" = (/turf/simulated/mineral,/area/syndicate_depot)
"lZ" = (/obj/structure/lattice,/obj/machinery/porta_turret/syndicate/exterior,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot)
"ma" = (/turf/simulated/mineral/random,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_depot)
"mb" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_depot)
"mc" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/simulated/shuttle/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; icon_state = "window5"; name = "window"; opacity = 0},/area/syndicate_depot)
"md" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_depot)
"me" = (/obj/machinery/door/airlock/hatch{req_access_txt = "150"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mf" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_depot)
"mg" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/syndicate_depot)
"mh" = (/obj/structure/closet/crate{name = "foot locker"},/obj/item/ammo_box/magazine/m10mm{pixel_x = 4},/obj/item/gun/projectile/automatic/pistol,/obj/item/clothing/head/helmet/swat/syndicate,/obj/item/clothing/glasses/thermal{pixel_x = -3; pixel_y = 3},/obj/item/clothing/shoes/black{pixel_y = -4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mi" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mj" = (/obj/structure/stool/bed,/obj/item/bedsheet/red,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mk" = (/obj/structure/closet/crate{name = "foot locker"},/obj/item/ammo_box/magazine/smgm45{pixel_x = 3},/obj/item/storage/fancy/cigarettes/cigpack_syndicate{pixel_x = -3; pixel_y = -2},/obj/item/lighter/zippo/gonzofist,/obj/item/clothing/under/syndicate{pixel_x = 3; pixel_y = 3},/obj/item/clothing/suit/armor/vest/combat{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"ml" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/unsimulated/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; dir = 8; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; name = "window"; opacity = 0; tag = "icon-window5_end (WEST)"},/area/syndicate_depot)
"mm" = (/obj/machinery/porta_turret/syndicate/interior,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mn" = (/obj/item/radio/intercom/syndicate{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mo" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mp" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/unsimulated/wall{desc = "This window appears to be reinforced, it looks nearly impossible to break."; dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "window5_end"; name = "window"; opacity = 0; tag = "icon-window5 (EAST)"},/area/syndicate_depot)
"mq" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_depot)
"mr" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_depot)
"ms" = (/obj/machinery/porta_turret/syndicate/interior{density = 0; desc = "Syndicate interior defense turret chambered for .45 rounds and mounted on a wall. Designed to down intruders without damaging the hull."; name = "wall mounted machine gun turret (.45)"; pixel_y = -27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mt" = (/obj/structure/table,/obj/item/reagent_containers/food/snacks/syndicake,/obj/item/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mu" = (/obj/machinery/porta_turret/syndicate/grenade,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mv" = (/obj/machinery/porta_turret/syndicate/interior{density = 0; desc = "Syndicate interior defense turret chambered for .45 rounds and mounted on a wall. Designed to down intruders without damaging the hull."; name = "wall mounted machine gun turret (.45)"; pixel_y = 27},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mw" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/syndicate_depot)
"mx" = (/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"my" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/engine,/area/syndicate_depot)
"mz" = (/turf/simulated/floor/engine,/area/syndicate_depot)
"mA" = (/obj/structure/closet/crate{name = "munitions crate"},/obj/item/storage/box/donkpockets,/obj/item/ammo_box/magazine/mm556x45,/obj/item/gun/projectile/automatic/m90,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mB" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Telepad"; req_access_txt = "0"},/turf/simulated/floor/engine,/area/syndicate_depot)
"mC" = (/obj/machinery/telepad,/turf/simulated/floor/engine,/area/syndicate_depot)
"mD" = (/obj/structure/closet/crate{name = "munitions crate"},/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/ammo_box/magazine/m12g/dragon,/obj/item/storage/fancy/cigarettes/cigpack_syndicate,/obj/item/storage/firstaid/tactical,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mE" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mF" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"mG" = (/turf/simulated/mineral,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/syndicate_depot)
"lX" = (/turf/simulated/mineral,/area/syndicate_depot/outer)
"lY" = (/obj/structure/mineral_door/wood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"lZ" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"ma" = (/obj/structure/spider,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mb" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mc" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"md" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"me" = (/obj/item/reagent_containers/food/snacks/spiderleg,/obj/structure/spider,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mf" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mg" = (/obj/effect/landmark{name = "syndi_depot_bot"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"mh" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDNW"; invisibility = 100; location = "SDNE"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"mi" = (/turf/simulated/wall,/area/syndicate_depot/outer)
"mj" = (/obj/effect/spawner/random_spawners/syndicate/turret/external,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"mk" = (/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"ml" = (/obj/structure/table,/obj/item/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mm" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/spider,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mn" = (/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"mo" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"mp" = (/obj/structure/falsewall,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mq" = (/obj/structure/stool/bed,/obj/item/bedsheet/syndie,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mr" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ms" = (/obj/structure/table,/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mt" = (/obj/item/reagent_containers/food/drinks/flask/barflask,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mu" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mv" = (/obj/machinery/door/poddoor{id_tag = "syndi_depot_lvl2"; name = "Level 2 Blast Doors"; protected = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mw" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mx" = (/obj/effect/spawner/random_spawners/syndicate/layout/door,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"my" = (/obj/machinery/door/airlock/hatch/syndicate,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mz" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mA" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mB" = (/obj/structure/sign/poster/contraband/syndicate_recruitment,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"mC" = (/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mD" = (/obj/machinery/light,/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mE" = (/obj/structure/sign/poster/contraband/lamarr,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"mF" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mG" = (/obj/effect/spawner/random_spawners/syndicate/turret/external,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mH" = (/turf/simulated/mineral,/area/space)
"mI" = (/turf/simulated/floor/plating/airless/asteroid,/area/space)
"mJ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space)
@@ -663,8 +666,10 @@
"mP" = (/obj/structure/closet/crate,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space)
"mQ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/ore/bananium,/obj/item/grenade/bananade,/turf/simulated/floor/plasteel/airless,/area/space)
"mR" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
"mS" = (/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mT" = (/obj/item/shard{icon_state = "small"},/turf/simulated/floor/plating/airless/asteroid,/area/space)
"mU" = (/obj/item/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space)
"mV" = (/obj/machinery/light{dir = 1; on = 1},/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"mW" = (/obj/structure/computerframe/HONKputer,/turf/simulated/floor/plasteel/airless,/area/space)
"mX" = (/obj/item/shard{icon_state = "medium"},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/space)
"mY" = (/obj/effect/landmark/corpse/clown{name = "Clown Pilot"},/turf/simulated/floor/plasteel/airless,/area/space)
@@ -676,7 +681,11 @@
"ne" = (/turf/simulated/floor/plasteel/airless,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/space)
"nf" = (/obj/item/pickaxe,/turf/simulated/floor/plasteel/airless,/area/space)
"ng" = (/obj/structure/closet/crate,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/obj/item/ore/bananium,/turf/simulated/floor/plasteel/airless,/area/space)
"nh" = (/obj/effect/spawner/random_spawners/syndicate/trap/mine,/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ni" = (/obj/item/flag/chameleon{icon_state = "syndiflag"; name = "Syndicate Flag"; used = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nj" = (/obj/machinery/computer/syndicate_depot/teleporter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nk" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/space)
"nl" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/decal/warning_stripes/blue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nm" = (/obj/item/shard,/turf/simulated/floor/plasteel/airless,/area/space)
"nn" = (/obj/item/broken_bottle,/turf/simulated/floor/plasteel/airless,/area/space)
"no" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area/space)
@@ -687,6 +696,122 @@
"nt" = (/obj/item/shard,/turf/simulated/floor/plating/airless/asteroid,/area/space)
"nu" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/space)
"nv" = (/obj/effect/landmark/corpse/mime{name = "Mime Pilot"},/turf/simulated/floor/plasteel/airless,/area/space)
"nw" = (/obj/machinery/bluespace_beacon/syndicate,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nx" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"ny" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDSW"; invisibility = 100; location = "SDNW"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"nz" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nA" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nB" = (/obj/structure/sign/poster/contraband/fun_police,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"nC" = (/obj/machinery/door/poddoor/multi_tile/two_tile_hor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nD" = (/obj/effect/spawner/random_spawners/syndicate/trap/medbot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nE" = (/obj/effect/spawner/random_spawners/syndicate/mob,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nF" = (/obj/effect/spawner/random_spawners/syndicate/loot/level2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nG" = (/obj/item/lighter/zippo/black,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nH" = (/obj/structure/sign/poster/contraband/lusty_xenomorph,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"nI" = (/obj/effect/spawner/random_spawners/syndicate/layout/spacepod,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nJ" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nK" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/loot/level2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nL" = (/obj/structure/sign/poster/official/high_class_martini,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"nM" = (/obj/machinery/light{dir = 8},/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nN" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/effect/spawner/random_spawners/syndicate/loot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nO" = (/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nP" = (/obj/structure/dispenser,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nQ" = (/obj/structure/sign/poster/official/air1,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"nR" = (/obj/item/storage/box/donkpockets,/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nS" = (/obj/machinery/computer/syndicate_depot/syndiecomms,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nT" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nU" = (/obj/structure/sign/poster/contraband/tools,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"nV" = (/obj/structure/sign/poster/contraband/hacking_guide,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"nW" = (/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nX" = (/obj/effect/spawner/random_spawners/syndicate/loot/level3,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nY" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"nZ" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oa" = (/obj/machinery/vending/syndisnack,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ob" = (/obj/machinery/door/airlock/silver,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oc" = (/obj/structure/closet/secure_closet/syndicate/depot,/obj/effect/spawner/random_spawners/syndicate/trap/documents,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"od" = (/obj/machinery/computer/syndicate_depot/selfdestruct,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oe" = (/obj/effect/decal/warning_stripes/red,/obj/structure/window/plasmareinforced{dir = 8},/obj/structure/fusionreactor,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"of" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"og" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oh" = (/obj/structure/table,/obj/effect/spawner/random_spawners/syndicate/trap/pizzabomb,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oi" = (/obj/structure/table,/obj/item/reagent_containers/food/snacks/syndicake,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oj" = (/obj/machinery/vending/syndicigs,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ok" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ol" = (/obj/effect/spawner/random_spawners/syndicate/layout/door/secret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"om" = (/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
"on" = (/obj/machinery/door/airlock/plasma{welded = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oo" = (/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
"op" = (/obj/structure/table,/obj/item/wrench,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oq" = (/obj/structure/table,/obj/item/folder/syndicate/yellow,/obj/item/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"or" = (/obj/effect/landmark{dir = 6; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"os" = (/obj/structure/cable,/obj/machinery/power/terminal,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ot" = (/obj/effect/spawner/random_spawners/syndicate/layout/door/vault,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ou" = (/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"ov" = (/obj/structure/sign/poster/contraband/energy_swords,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"ow" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"ox" = (/obj/effect/landmark{dir = 10; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"oy" = (/obj/effect/spawner/random_spawners/syndicate/mob,/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
"oz" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
"oA" = (/obj/structure/sign/poster/official/state_laws,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"oB" = (/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"oC" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes/upgraded{charge = 5e+006; input_level = 20000; output_level = 100000},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oD" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oE" = (/obj/machinery/turretid/syndicate{name = "internal turret controls"; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oF" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/loot/level4,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oG" = (/obj/effect/spawner/random_spawners/syndicate/loot/level4,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oH" = (/obj/effect/spawner/random_spawners/syndicate/loot/level4,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oI" = (/obj/machinery/computer/syndicate_depot/aiterminal,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oJ" = (/obj/structure/mirror{pixel_x = -32},/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
"oK" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 12; pixel_y = 0},/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
"oL" = (/obj/structure/sign/poster/contraband/missing_gloves,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"oM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oN" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/spawner/random_spawners/syndicate/layout/door/vault,/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oS" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oT" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oU" = (/obj/structure/sign/poster/contraband/revolver,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"oV" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume{dir = 8},/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oW" = (/obj/structure/mirror{pixel_x = -32},/turf/simulated/floor/mineral/plasma,/area/syndicate_depot/core)
"oX" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/mineral/silver,/area/syndicate_depot/core)
"oY" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"oZ" = (/obj/machinery/light,/obj/effect/spawner/random_spawners/syndicate/loot/level3,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pb" = (/obj/structure/cable,/obj/machinery/power/apc/noalarm{dir = 4; pixel_x = 24; req_access = list(150)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pc" = (/obj/machinery/computer/syndicate_depot/shieldcontrol,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pd" = (/obj/effect/spawner/random_spawners/syndicate/layout/door/vault,/obj/effect/landmark{name = "syndi_depot_shield"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pe" = (/obj/machinery/light{dir = 1; on = 1},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"pf" = (/obj/structure/sign/poster/official/obey,/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"pg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"ph" = (/obj/effect/landmark{dir = 5; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"pi" = (/obj/structure/sign/poster/contraband/syndicate_pistol,/obj/effect/landmark{dir = 4; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"pj" = (/obj/effect/landmark{dir = 9; name = "syndi_depot_shield"},/turf/simulated/wall/r_wall,/area/syndicate_depot/core)
"pk" = (/mob/living/silicon/decoy/syndicate/depot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pl" = (/obj/machinery/door_control{active_power_usage = 0; id = "syndi_depot_rear"; idle_power_usage = 0; name = "mysterious button"; normaldoorcontrol = 0; use_power = 0},/obj/structure/sign/poster/contraband/syndicate_recruitment,/turf/simulated/wall,/area/syndicate_depot/core)
"pm" = (/turf/simulated/mineral,/area/syndicate_depot/core)
"pn" = (/obj/effect/spawner/random_spawners/blood_maybe,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
"po" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/spawner/random_spawners/syndicate/turret,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pp" = (/obj/machinery/light{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pq" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pr" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"ps" = (/obj/machinery/door_control{active_power_usage = 0; id = "syndi_depot_rear"; idle_power_usage = 0; name = "mysterious button"; normaldoorcontrol = 0; pixel_x = 24; use_power = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pt" = (/obj/item/candle,/obj/structure/table,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
"pu" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
"pv" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pw" = (/obj/machinery/computer/syndicate_depot/doors,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"px" = (/obj/machinery/atmospherics/unary/passive_vent/high_volume{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"py" = (/obj/machinery/door/poddoor{id_tag = "syndi_depot_rear"; name = "Sealed Doors"; protected = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pz" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/core)
"pA" = (/obj/structure/falsewall,/turf/simulated/floor/plating/airless,/area/syndicate_depot/core)
"pB" = (/obj/machinery/light/small{dir = 8},/obj/effect/spawner/random_spawners/syndicate/loot/level2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pC" = (/turf/simulated/wall,/area/syndicate_depot/core)
"pD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pE" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDSE"; invisibility = 100; location = "SDSW"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"pF" = (/obj/machinery/light/small{dir = 8},/obj/effect/spawner/random_spawners/syndicate/turret,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"pG" = (/obj/machinery/power/apc/noalarm{dir = 4; pixel_x = 24},/obj/structure/cable,/obj/machinery/turretid/syndicate{name = "external turret controls"; pixel_y = 32},/turf/simulated/floor/plating/airless,/area/syndicate_depot/outer)
"pH" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDNE"; invisibility = 100; location = "SDSE"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -874,55 +999,6 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalXaaaalXlXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlXlXaalXlXlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlXlXlXlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlZlXlZlYlYlYlYmambmcmbmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYmambmembmflYlYlYmgmhmimjmgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYmgmimimimglYlYmamgmkmimjmlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYmgmmmimmmgmbmbmbmgmnmimompaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYmqmbmembmrmimimimemimsmtmglYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmgmimimimimimumgmbmbmbmbmflYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmgmimimimimimimemimvmwmbmbmbmflYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmqmbmbmbmbmbmbmgmnmimimxmymzmglYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYmqmgmAmimimimBmCmglYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYmgmDmimEmFmymzmglYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYmqmbmbmbmbmbmbmGlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYlYlYlYlYlYlYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalYlYaalYlYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvcvcvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznknknkmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamLnnnmncmLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznonpaznpnqmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHaaaamHmHmHmHmHntnvnumHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaaczmKmKmLmLmKmKmKmKmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmIczmKmNmImOazazmPmPmQazmRdlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmTazazazazazmUazmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmWmXmYazmZmUazmUazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHnaaznbazncazmOazazazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHndmKneaznfazazngmPmPazmRhZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHndmKmKmLmLmKmKmKmKmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaamHmHmHmHmHmImImHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmImImImHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamImImHmImHmHmImImIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHaaaaaaaaaaaamImHmHmHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -933,6 +1009,55 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudududududududufqdudududududufqdudududududududududufqdududududududududufqdududududududududududufqdudududududududuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXkVkVkVkVkVkVkVlXkVkVkVkVkVkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXkVkVkVkVkVlXlXkVkVlXkVkVkVkVlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXlXkVlXlXlXkVkVlXlXlXlXkVlXlXlXlXlXkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVlXkVkVkVkVkVlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVlXlXlXlXlXlYlYlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlZlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVlXlXmbmamdmcmcmcmfmemalXlXmgmhlZlZlZlZlZlZlZlZlZlZlZlZlZlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvcvcvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVlXlXmimcmcmcmcmcmcmcmdmamilXlZlZmjlZmklZlZlZlZlZmklZmjlZlZlXlXlXlXkVkVkVkVlXkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznknknkmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVlXlXlXmimcmcmcmcmcmcmlmcmmmilXlXlXmnmnmnmnmnmnmnmnmnmnmnmolZlZlXlXlXlXkVkVlXlXlXkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamLnnnmncmLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVlXlXlXlXmimpmpmimimimimimimimilXlXlXmnmqmqmqmrmtmsmnmumqmnmvmnlZlZlXlXlXkVkVkVkVlXkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznonpaznpnqmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlXlXlXlXmcmclXlXlXlXlXlXlXlXlXlXlXmnmwmwmwmwmwmwmxmwmwmymzmnlZlZlXlXlXlXlXkVkVkVlXkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZmnmnmAmwmnmnmnmnmnmBmnmnmnmnmnmnmCmCmDmwmwmwmnmxmEmnmnmnmjlZlZlXlXlXlXlXkVkVlXkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHaaaamHmHmHmHmHntnvnumHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXmglZmnmwmwmwmFmwmGmnmSmSnhmVmwnimnmnmnmnmnmnmnmxmnmwnlnjnwmnlZlZlZlXlXlXlXlXkVlXlXkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVlXlXlZnynxmnmGmzmwmwmwmzmxmwmSmSnhnhmwmxmwmwmwnzmwmwmwmnmwmwnAmwmnmolZlXlXlXkVkVlXlXlXkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlZlZlZmnmnmnnBnCmwmnmnmwmwmSmnmnmxmnnDmwmwmwnEmwnFmnmwnimwnimnlZlZlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaaczmKmKmLmLmKmKmKmKmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlXlZmjmnmwmwmwmwmwmnmnmnmnmnmnnGmwmnnFnFmwmwmwmwnFmnmymnnHmnmnlZlZlXlXkVkVlXkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmIczmKmNmImOazazmPmPmQazmRdlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmnnImwmwmwmwmnmCnJnFmnnKmwmwmnmnnLmnmnmxmnmnmnmwmwnJmCmnlZlZlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmTazazazazazmUazmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZmnnMmwmwmwnNmnmwmwmwmxmwmwmwmxmwmwnOmFmwmwmwmxmwmwmwmwmnlZlZlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmWmXmYazmZmUazmUazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZnxnQnPmwmwmwmwmxmwmwnEmnnOmwmwmnmwmwmwmwmwmwnRmnnimrnSmwmnmolZlZlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHnaaznbazncazmOazazazmUmRehaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmnnTnOmwmwnOmnnUmxmnmnmnnVmnmnnWnYnXnZnZmwoamnmnmnmnobmnmjlZlXlXlXlXmilXkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHndmKneaznfazazngmPmPazmRhZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlZlZmjmnmnmnmxmnmnmnocmwmFmrodofoemnmwognXoiohmwojolokonomoomnlZlZlXlXlXlZlZlZmikVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHndmKmKmLmLmKmKmKmKmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmvmzmymwmwopmnoqmwmwmwmwosorouotowovouoxmxmnmnolmnoyozmnlZlZlXlXlZlZmilZlZkVkVkVlXkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmnmnoAmwnEmwmxmwnOmwnWmwoCoBoEoDoGoFoHoBmwmwnzoImnoJoKmnlZlZlXlXmilZlXlZlZkVkVmilXlZkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaamHmHmHmHmHmImImHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZnxmnmCmwmwnNoLmwmwmwoNoMoPoOoRoQoToSoSoUoRoVmwnAmnoWoXmnmolZlXlXlZlZlXlXlZkVkVkVlZlZkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmImImImHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlZlZlZmnmnmnmxmnmnoYnXoZmwpapboBpcmwogmwmwpdmwmwmwmwmnobmnmnlZlZlXlXlZlXlXlXlZlZkVlXmilXlZkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamImImHmImHmHmImImIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVlXlXlXlZlZmjlZpemnmwmwmnpfmnmnmxpgmnphoupiowotoupjnXnXmwpkmnmwnOmnlZlZpmplpnlXlZlZlZlZmilXkVlXkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHaaaaaaaaaaaamImHmHmHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVlXlXlXlZlZlZlZlZmnnEmwmFmwmwmnmwpomnoYnXnXppmwpqmnmnmnmxmnmnprpsmnmymnpmptpumilZmilXlZlXlZlZlXkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVlXlXlXlXlXlXlXlZlZmnmnnFpwpvmwmxmwpamxmwmwmwpxnWmwmxmwmFmwnhmxmwmwmymzpypApzpnlXlZlXlZlZlZlXlZlXlXkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVlXlXlXlXlXlXlZlZmnmnmnmnmnmnpBpamnmwmwnOmwmwmwmnnOmwmwmwmBmwmwmnmymnpmpmpClXlZlZlZlXlZlXlZmikVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVlXkVlXlXlXlZmjlZpelZlZlZmnmnpgmnmnmxmnmxmnmnmnmnnFmwmwmnmCmCmnlZlZlXlXlXkVlZlXmilXlZlXlZlXkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVlXlXlXlZlZmglZlZlZlZmvpDmymwmwmnmwnKnFnFmnnFmwnEmnmnmnmnlZlZlXlXlZlXkVkVlZkVlZlZlZkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVlXlXkVlXlXlZpElZlZlZlZmnpgmnpFmwmxnEmwmwmwmxmwmwmwmnlZlZpelZlZlXlXlZlZkVkVkVkVlZlZkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVlXlXlZlZlZlZmjlZpepGmnmnmnmnmnmnmnmwmnmwmwnOmnlZlZlZlZlZlXlXlZmikVkVkVkVlZkVkVkVkVkVkVkVfqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVlXlXlXlXlXlXlZlZlZlZlZlZpelZlZlZlZmnmnmnmnmnmnmnlZlZmglZlXlXlXlZkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafqkVkVkVkVkVkVkVkVkVlXlXlXlXlXlXlXlXlXlXlXlXlZlZlZlZlZmjlZlZpelZlZlZpemjpHlZlXlXlXlXkVlXkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVlXlXkVkVlXlXlXlXlXlXlXlXlXlXlZlZlZlZlZlZlZlZlZlZlZlZlXlXlXlXlXkVkVlXkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVlXkVkVkVlXlXlXkVkVlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXkVkVlXkVkVlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXlXlXkVkVlXlXlXkVkVlXlXlXkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXkVkVkVkVkVkVlXlXkVkVlXlXlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVlXlXkVkVkVkVlXkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadukVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVkVduaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadududududududududududufqdududududududududufqdudududududududududududududufqdududududududududufqdudududududududududuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+1 -1
View File
@@ -43,7 +43,7 @@ SUBSYSTEM_DEF(atoms)
count = atoms.len
for(var/I in atoms)
var/atom/A = I
if(!A.initialized)
if(A && !A.initialized)
if(InitAtom(I, mapload_arg))
atoms -= I
CHECK_TICK
+5 -1
View File
@@ -37,4 +37,8 @@
qdel(C, FALSE, TRUE)
dc.Cut()
return QDEL_HINT_QUEUE
return QDEL_HINT_QUEUE
/datum/nothing
// Placeholder object, used for ispath checks. Has to be defined to prevent errors, but shouldn't ever be created.
-6
View File
@@ -543,12 +543,6 @@ var/list/ghostteleportlocs = list()
name = "\improper Syndicate Infiltrators"
icon_state = "syndie-elite"
/area/syndicate_depot
name = "\improper Suspicious Supply Depot"
icon_state = "red"
tele_proof = 1
requires_power = 0
//EXTRA
/area/asteroid // -- TLE
+430
View File
@@ -0,0 +1,430 @@
/area/syndicate_depot
name = "Suspicious Supply Depot"
icon_state = "dark"
tele_proof = 1
/area/syndicate_depot/core
icon_state = "red"
var/local_alarm = FALSE // Level 1: Local alarm tripped, bot spawned, red fire overlay activated
var/called_backup = FALSE // Level 2: Remote alarm tripped. Bot may path through depot. Backup spawned.
var/used_self_destruct = FALSE // Level 3: Self destruct activated. Depot will be destroyed shortly.
var/run_started = FALSE
var/run_finished = FALSE
// Soft UID-based refs
var/list/guard_list = list()
var/list/hostile_list = list()
var/list/dead_list = list()
var/list/peaceful_list = list()
var/list/shield_list = list()
var/list/alert_log = list() // no refs, just a simple list of text strings
var/used_lockdown = FALSE
var/destroyed = FALSE
var/something_looted = FALSE
var/on_peaceful = FALSE
var/peace_betrayed = FALSE
var/detected_mech = FALSE
var/detected_pod = FALSE
var/detected_double_agent = FALSE
var/obj/machinery/computer/syndicate_depot/syndiecomms/comms_computer = null
var/obj/structure/fusionreactor/reactor
/area/syndicate_depot/core/updateicon()
if(destroyed)
icon_state = null
invisibility = INVISIBILITY_MAXIMUM
else if(on_peaceful)
icon_state = "green"
invisibility = INVISIBILITY_LIGHTING
else if(used_self_destruct)
icon_state = "radiation"
invisibility = INVISIBILITY_LIGHTING
else if(called_backup)
icon_state = "red"
invisibility = INVISIBILITY_LIGHTING
else if(local_alarm)
icon_state = "bluenew"
invisibility = INVISIBILITY_LIGHTING
else
icon_state = null
invisibility = INVISIBILITY_MAXIMUM
/area/syndicate_depot/core/proc/reset_alert()
if(used_self_destruct)
return
local_alarm = FALSE
called_backup = FALSE
used_self_destruct = FALSE
something_looted = FALSE
detected_mech = FALSE
detected_pod = FALSE
detected_double_agent = FALSE
updateicon()
despawn_guards()
guard_list = list()
hostile_list = list()
dead_list = list()
peaceful_list = list()
alert_log += "Alert level reset."
/area/syndicate_depot/core/proc/increase_alert(reason)
if(on_peaceful)
peaceful_mode(FALSE, FALSE)
peace_betrayed = TRUE
activate_self_destruct("Depot has been infiltrated by double-agents.", TRUE, null)
return
if(!local_alarm)
local_alarm(reason, FALSE)
return
if(!called_backup)
call_backup(reason, FALSE)
return
if(!used_self_destruct)
activate_self_destruct(reason, FALSE, null)
updateicon()
/area/syndicate_depot/core/proc/locker_looted()
something_looted = TRUE
if(on_peaceful)
increase_alert("Thieves!")
/area/syndicate_depot/core/proc/turret_died()
something_looted = TRUE
if(on_peaceful)
increase_alert("Vandals!")
/area/syndicate_depot/core/proc/saw_mech(obj/mecha/E)
if(detected_mech)
return
detected_mech = TRUE
increase_alert("Hostile mecha detected: [E]")
/area/syndicate_depot/core/proc/saw_pod(obj/spacepod/P)
if(detected_pod)
return
detected_pod = TRUE
increase_alert("Hostile spacepod detected: [P]")
/area/syndicate_depot/core/proc/saw_double_agent(mob/living/M)
if(detected_double_agent)
return
detected_double_agent = TRUE
increase_alert("Hostile double-agent detected: [M]")
/area/syndicate_depot/core/proc/peaceful_mode(newvalue, bycomputer)
if(newvalue)
log_game("Depot visit: started")
alert_log += "Code GREEN: visitor mode started."
ghostlog("The syndicate depot has visitors")
for(var/mob/living/simple_animal/bot/medbot/syndicate/B in src)
qdel(B)
for(var/mob/living/simple_animal/hostile/syndicate/N in src)
N.a_intent = INTENT_HELP
for(var/obj/structure/closet/secure_closet/syndicate/depot/L in src)
if(L.opened)
L.close()
if(!L.locked)
L.locked = 1
L.req_access = list(access_syndicate_leader)
L.update_icon()
for(var/obj/machinery/computer/syndicate_depot/teleporter/P in src)
if(!P.portal_enabled)
P.toggle_portal()
for(var/obj/machinery/door/airlock/hatch/syndicate/vault/V in src)
if(!V.density)
V.close()
V.emergency = 0
if(!V.locked)
V.locked = !V.locked
V.update_icon()
else
log_game("Depot visit: ended")
alert_log += "Visitor mode ended."
for(var/mob/living/simple_animal/hostile/syndicate/N in src)
N.a_intent = INTENT_HARM
for(var/obj/machinery/door/airlock/A in src)
A.req_access_txt = "[access_syndicate_leader]"
for(var/obj/structure/closet/secure_closet/syndicate/depot/L in src)
if(L.locked)
L.locked = !L.locked
L.req_access = list()
L.update_icon()
on_peaceful = newvalue
if(newvalue)
announce_here("Depot Visitor","A Syndicate agent is visiting the depot.")
else
if(bycomputer)
message_admins("Syndicate Depot visitor mode deactivated. Visitors:")
announce_here("Depot Alert","Visit ended. All visting agents signed out.")
else
message_admins("Syndicate Depot visitor mode auto-deactivated because visitors robbed depot! Visitors:")
announce_here("Depot Alert","A visiting agent has betrayed the Syndicate. Shoot all visitors on sight!")
for(var/mob/M in list_getmobs(peaceful_list))
if("syndicate" in M.faction)
M.faction -= "syndicate"
message_admins("- SYNDI DEPOT VISITOR: [ADMIN_FULLMONTY(M)]")
list_add(M, hostile_list)
peaceful_list = list()
updateicon()
/area/syndicate_depot/core/proc/local_alarm(reason, silent)
if(local_alarm)
return
log_game("Depot code: blue: " + list_show(hostile_list, TRUE))
ghostlog("The syndicate depot has declared code blue.")
alert_log += "Code BLUE: [reason]"
local_alarm = TRUE
if(!silent)
announce_here("Depot Code BLUE", reason)
var/list/possible_bot_spawns = list()
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "syndi_depot_bot")
possible_bot_spawns |= L
if(possible_bot_spawns.len)
var/obj/effect/landmark/S = pick(possible_bot_spawns)
new /obj/effect/portal(get_turf(S))
var/mob/living/simple_animal/bot/ed209/syndicate/B = new /mob/living/simple_animal/bot/ed209/syndicate(get_turf(S))
list_add(B, guard_list)
B.depotarea = src
updateicon()
/area/syndicate_depot/core/proc/call_backup(reason, silent)
if(called_backup || used_self_destruct)
return
log_game("Depot code: red: " + list_show(hostile_list, TRUE))
ghostlog("The syndicate depot has declared code red.")
alert_log += "Code RED: [reason]"
called_backup = TRUE
lockout_computers()
for(var/obj/machinery/door/poddoor/P in airlocks)
if(P.density && P.id_tag == "syndi_depot_lvl2" && !P.operating)
spawn(0)
P.open()
if(!silent)
announce_here("Depot Code RED", reason)
var/comms_online = FALSE
if(istype(comms_computer))
if(!(comms_computer.stat & (NOPOWER|BROKEN)))
comms_online = TRUE
if(comms_online)
spawn(0)
for(var/obj/effect/landmark/L in landmarks_list)
if(prob(50))
if(L.name == "syndi_depot_backup")
var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/S = new /mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space(get_turf(L))
S.name = "Syndicate Backup " + "([rand(1, 1000)])"
S.depotarea = src
list_add(S, guard_list)
else if(!silent)
announce_here("Depot Communications Offline", "Comms computer is damaged, destroyed or depowered. Unable to call in backup from Syndicate HQ.")
updateicon()
/area/syndicate_depot/core/proc/activate_self_destruct(reason, containment_failure, mob/user)
if(used_self_destruct)
return
log_game("Depot code: delta: " + list_show(hostile_list, TRUE))
ghostlog("The syndicate depot is about to self-destruct.")
alert_log += "Code DELTA: [reason]"
used_self_destruct = TRUE
local_alarm = TRUE
called_backup = TRUE
activate_lockdown(TRUE)
lockout_computers()
updateicon()
despawn_guards()
if(containment_failure)
announce_here("Depot Code DELTA", reason)
else
announce_here("Depot Code DELTA","[reason] Depot declared lost to hostile forces. Priming self-destruct!")
if(user)
var/turf/T = get_turf(user)
var/area/A = get_area(T)
var/log_msg = "[key_name(user)] has armed the depot self destruct device at [A.name] ([T.x],[T.y],[T.z])"
message_admins(log_msg)
log_game(log_msg)
playsound(user, 'sound/machines/Alarm.ogg', 100, 0, 0)
else
log_game("Depot self destruct activated.")
if(reactor)
reactor.overload(containment_failure)
else
message_admins("<span class='adminnotice'>Syndicate Depot lacks reactor to initiate self-destruct. Must be destroyed manually.</span>")
updateicon()
/area/syndicate_depot/core/proc/activate_lockdown()
if(used_lockdown)
return
used_lockdown = TRUE
for(var/obj/machinery/door/airlock/A in src)
spawn(0)
A.close()
if(A.density)
A.lock()
/area/syndicate_depot/core/proc/lockout_computers()
for(var/obj/machinery/computer/syndicate_depot/C in src)
C.activate_security_lockout()
/area/syndicate_depot/core/proc/toggle_door_locks()
for(var/obj/machinery/door/airlock/A in src)
A.emergency = !A.emergency
if(A.locked)
A.locked = !A.locked
A.update_icon()
/area/syndicate_depot/core/proc/toggle_falsewalls()
for(var/obj/structure/falsewall/reinforced/F in src)
spawn(0)
F.toggle()
/area/syndicate_depot/core/proc/toggle_teleport_beacon()
for(var/obj/machinery/bluespace_beacon/syndicate/B in src)
return B.toggle()
/area/syndicate_depot/core/proc/announce_here(a_header = "Depot Defense Alert", a_text = "")
var/msg_text = "<font size=4 color='red'>[a_header]</font><br><font color='red'>[a_text]</font>"
var/list/receivers = list()
for(var/mob/M in mob_list)
if(!M.ckey)
continue
var/turf/T = get_turf(M)
if(T.loc != src)
continue
receivers |= M
for(var/mob/R in receivers)
to_chat(R, msg_text)
R << sound('sound/misc/notice1.ogg')
/area/syndicate_depot/core/proc/shields_up()
if(shield_list.len)
return
for(var/obj/effect/landmark/L in landmarks_list)
if(L.name == "syndi_depot_shield")
var/obj/machinery/shieldwall/syndicate/S = new /obj/machinery/shieldwall/syndicate(L.loc)
shield_list += S.UID()
/area/syndicate_depot/core/proc/shields_key_check()
if(!shield_list.len)
return
if(detected_mech || detected_pod || detected_double_agent)
return
shields_down()
/area/syndicate_depot/core/proc/shields_down()
for(var/shuid in shield_list)
var/obj/machinery/shieldwall/syndicate/S = locateUID(shuid)
if(S)
qdel(S)
shield_list = list()
/area/syndicate_depot/core/proc/despawn_guards()
for(var/mob/thismob in list_getmobs(guard_list))
new /obj/effect/portal(get_turf(thismob))
qdel(thismob)
guard_list = list()
/area/syndicate_depot/core/proc/ghostlog(gmsg)
if(istype(reactor))
var/image/alert_overlay = image('icons/obj/flag.dmi', "syndiflag")
notify_ghosts(gmsg, title = "Depot News", source = reactor, alert_overlay = alert_overlay, action = NOTIFY_JUMP)
/area/syndicate_depot/core/proc/declare_started()
if(!run_started)
run_started = TRUE
log_game("Depot run: started: " + list_show(hostile_list, TRUE))
/area/syndicate_depot/core/proc/declare_finished()
if(!run_finished && !used_self_destruct)
run_finished = TRUE
log_game("Depot run: finished successfully: " + list_show(hostile_list, TRUE))
/area/syndicate_depot/core/proc/list_add(mob/M, list/L)
if(!istype(M))
return
var/mob_uid = M.UID()
if(mob_uid in L)
return
L += mob_uid
/area/syndicate_depot/core/proc/list_remove(mob/M, list/L)
if(!istype(M))
return
var/mob_uid = M.UID()
if(mob_uid in L)
L -= mob_uid
/area/syndicate_depot/core/proc/list_includes(mob/M, list/L)
if(!istype(M))
return FALSE
var/mob_uid = M.UID()
if(mob_uid in L)
return TRUE
return FALSE
/area/syndicate_depot/core/proc/list_show(list/L, show_ckeys = FALSE)
var/list/formatted = list()
for(var/uid in L)
var/mob/M = locateUID(uid)
if(!istype(M))
continue
if(show_ckeys)
formatted += "[M.ckey]([M])"
else
formatted += "[M]"
return formatted.Join(", ")
/area/syndicate_depot/core/proc/list_getmobs(list/L, show_ckeys = FALSE)
var/list/moblist = list()
for(var/uid in L)
var/mob/M = locateUID(uid)
if(!istype(M))
continue
moblist += M
return moblist
/area/syndicate_depot/core/proc/list_gethtmlmobs(list/L)
var/returntext = ""
var/list/moblist = list_getmobs(L)
if(moblist.len)
returntext += "<UL>"
for(var/mob/thismob in moblist)
returntext += "<LI>[thismob]</LI>"
returntext += "</UL>"
else
returntext += "<BR>NONE"
return returntext
/area/syndicate_depot/outer
name = "Suspicious Asteroid"
icon_state = "green"
/area/syndicate_depot/perimeter
name = "Suspicious Asteroid Perimeter"
icon_state = "yellow"
var/list/shield_list = list()
/area/syndicate_depot/perimeter/proc/perimeter_shields_up()
if(shield_list.len)
return
for(var/turf/T in src)
var/obj/machinery/shieldwall/syndicate/S = new /obj/machinery/shieldwall/syndicate(T)
S.alpha = 0
shield_list += S.UID()
/area/syndicate_depot/perimeter/proc/perimeter_shields_down()
for(var/shuid in shield_list)
var/obj/machinery/shieldwall/syndicate/S = locateUID(shuid)
if(S)
qdel(S)
shield_list = list()
+4
View File
@@ -429,3 +429,7 @@
// And animate the attack!
animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3)
/atom/movable/proc/portal_destroyed(obj/effect/portal/P)
return
+38 -14
View File
@@ -10,22 +10,31 @@
idle_power_usage = 0
var/syndicate = 0
var/obj/item/radio/beacon/Beacon
var/enabled = TRUE
/obj/machinery/bluespace_beacon/New()
..()
create_beacon()
/obj/machinery/bluespace_beacon/proc/create_beacon()
var/turf/T = loc
Beacon = new /obj/item/radio/beacon
Beacon.invisibility = INVISIBILITY_MAXIMUM
Beacon.loc = T
Beacon.syndicate = syndicate
hide(T.intact)
/obj/machinery/bluespace_beacon/Destroy()
/obj/machinery/bluespace_beacon/proc/destroy_beacon()
QDEL_NULL(Beacon)
/obj/machinery/bluespace_beacon/proc/toggle()
enabled = !enabled
return enabled
/obj/machinery/bluespace_beacon/Destroy()
destroy_beacon()
return ..()
// update the invisibility and icon
/obj/machinery/bluespace_beacon/hide(var/intact)
invisibility = intact ? 101 : 0
update_icon()
@@ -33,21 +42,36 @@
// update the icon_state
/obj/machinery/bluespace_beacon/update_icon()
var/state="floor_beacon"
if(invisibility)
icon_state = "[state]f"
else
icon_state = "[state]"
/obj/machinery/bluespace_beacon/process()
if(!Beacon)
var/turf/T = loc
Beacon = new /obj/item/radio/beacon
Beacon.invisibility = INVISIBILITY_MAXIMUM
Beacon.loc = T
if(Beacon)
if(Beacon.loc != loc)
Beacon.loc = loc
if(enabled)
if(Beacon)
if(Beacon.loc != loc)
Beacon.loc = loc
else
create_beacon()
update_icon()
else
if(Beacon)
destroy_beacon()
update_icon()
update_icon()
/obj/machinery/bluespace_beacon/syndicate
syndicate = TRUE
enabled = FALSE
var/obj/machinery/computer/syndicate_depot/teleporter/mycomputer
/obj/machinery/bluespace_beacon/syndicate/New()
..()
if(!GAMEMODE_IS_NUCLEAR && prob(50))
enabled = TRUE
/obj/machinery/bluespace_beacon/syndicate/Destroy()
if(mycomputer)
mycomputer.mybeacon = null
return ..()
+519
View File
@@ -0,0 +1,519 @@
#define DEPOT_VISITOR_START 1
#define DEPOT_VISITOR_END 2
#define DEPOT_VISITOR_ADD 3
// Generic parent depot computer type
/obj/machinery/computer/syndicate_depot
name = "depot computer"
icon = 'icons/obj/computer.dmi'
icon_keyboard = "syndie_key"
icon_screen = "tcboss"
light_color = LIGHT_COLOR_PURE_CYAN
req_access = list(access_syndicate)
var/security_lockout = FALSE
var/sound_yes = 'sound/machines/twobeep.ogg'
var/sound_no = 'sound/machines/buzz-sigh.ogg'
var/sound_click = 'sound/machines/click.ogg'
var/area/syndicate_depot/core/depotarea
var/alerts_when_broken = FALSE
var/has_alerted = FALSE
/obj/machinery/computer/syndicate_depot/New()
. = ..()
depotarea = areaMaster
/obj/machinery/computer/syndicate_depot/attack_ai(mob/user)
if(req_access.len && !("syndicate" in user.faction))
to_chat(user, "<span class='warning'>A firewall blocks your access.</span>")
return 1
return ..()
/obj/machinery/computer/syndicate_depot/emp_act(severity)
return
/obj/machinery/computer/syndicate_depot/emag_act(mob/user)
to_chat(user, "<span class='notice'>The electronic systems in this console are far too advanced for your primitive hacking peripherals.</span>")
return
/obj/machinery/computer/syndicate_depot/allowed(mob/user)
if(user.can_advanced_admin_interact())
return 1
if(!isliving(user))
return 0
if(has_security_lockout(user))
return 0
return ..()
/obj/machinery/computer/syndicate_depot/proc/has_security_lockout(mob/user)
if(security_lockout)
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
to_chat(user, "<span class='warning'>[src] is under security lockout.</span>")
return TRUE
return FALSE
/obj/machinery/computer/syndicate_depot/proc/activate_security_lockout()
security_lockout = TRUE
disable_special_functions()
/obj/machinery/computer/syndicate_depot/attack_hand(mob/user)
if(..())
return
if(stat & (NOPOWER|BROKEN))
return
if(!allowed(user))
to_chat(user, "<span class='warning'>Access Denied.</span>")
return
user.set_machine(src)
var/dat = get_menu(user)
user << browse(dat, "window=computer;size=575x450")
onclose(user, "computer")
/obj/machinery/computer/syndicate_depot/set_broken()
. = ..()
if(alerts_when_broken && !has_alerted)
has_alerted = TRUE
raise_alert("[src] was damaged.")
disable_special_functions()
/obj/machinery/computer/syndicate_depot/proc/disable_special_functions()
return
/obj/machinery/computer/syndicate_depot/Topic(href, href_list)
if(..())
return 1
if((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
if(href_list["primary"])
primary(usr)
if(href_list["secondary"])
secondary(usr, text2num(href_list["secondary"]))
add_fingerprint(usr)
updateUsrDialog()
/obj/machinery/computer/syndicate_depot/Destroy()
disable_special_functions()
if(alerts_when_broken && !has_alerted)
raise_alert("[src] destroyed.")
return ..()
/obj/machinery/computer/syndicate_depot/proc/get_menu(mob/user)
return ""
/obj/machinery/computer/syndicate_depot/proc/primary(mob/user)
if(!allowed(user))
return 1
return 0
/obj/machinery/computer/syndicate_depot/proc/secondary(mob/user, subcommand)
if(!allowed(user))
return 1
return 0
/obj/machinery/computer/syndicate_depot/proc/raise_alert(reason)
if(depotarea)
depotarea.increase_alert(reason)
// Door Control Computer
/obj/machinery/computer/syndicate_depot/doors
name = "depot door control computer"
/obj/machinery/computer/syndicate_depot/doors/get_menu(mob/user)
return {"<B>Syndicate Depot Door Control Computer</B><HR>
<BR><BR><a href='?src=[UID()];primary=1'>Toggle Airlock Emergency Access</a>
<BR><BR><a href='?src=[UID()];secondary=1'>Toggle Hidden Doors</a>
<BR>"}
/obj/machinery/computer/syndicate_depot/doors/primary(mob/user)
if(..())
return
if(depotarea)
depotarea.toggle_door_locks(src)
to_chat(user, "<span class='notice'>Door locks toggled.</span>")
/obj/machinery/computer/syndicate_depot/doors/secondary(mob/user, subcommand)
if(..())
return
if(depotarea)
depotarea.toggle_falsewalls(src)
to_chat(user, "<span class='notice'>False walls toggled.</span>")
// Engineering AKA self destruct computer, no useful functions, just a trap for the people who can't resist pushing dangerous-sounding buttons.
/obj/machinery/computer/syndicate_depot/selfdestruct
name = "reactor control computer"
icon_screen = "explosive"
req_access = list()
alerts_when_broken = TRUE
/obj/machinery/computer/syndicate_depot/selfdestruct/get_menu(mob/user)
var menutext = {"<B>Syndicate Depot Fusion Reactor Control</B><HR>
<BR><BR><a href='?src=[UID()];primary=1'>Disable Containment Field</a>
<BR>"}
return menutext
/obj/machinery/computer/syndicate_depot/selfdestruct/primary(mob/user)
if(..())
return
if(depotarea.used_self_destruct)
playsound(user, sound_no, 50, 0)
return
playsound(user, sound_click, 20, 1)
if(depotarea)
depotarea.activate_self_destruct("Fusion reactor containment field disengaged. All hands, evacuate. All hands, evacuate!", TRUE, user)
// Shield computer, used to manipulate base shield, and armory shield
/obj/machinery/computer/syndicate_depot/shieldcontrol
name = "shield control computer"
icon_screen = "accelerator"
req_access = list(access_syndicate_leader)
alerts_when_broken = TRUE
var/area/syndicate_depot/perimeter/perimeterarea
/obj/machinery/computer/syndicate_depot/shieldcontrol/New()
. = ..()
perimeterarea = locate(/area/syndicate_depot/perimeter)
if(istype(perimeterarea) && (GAMEMODE_IS_NUCLEAR || prob(20)))
spawn(200)
perimeterarea.perimeter_shields_up()
/obj/machinery/computer/syndicate_depot/shieldcontrol/Destroy()
if(istype(perimeterarea) && perimeterarea.shield_list.len)
perimeterarea.perimeter_shields_down()
return ..()
/obj/machinery/computer/syndicate_depot/shieldcontrol/get_menu(mob/user)
var menutext = {"<B>Syndicate Depot Shield Grid Control</B><HR>
<BR>"}
menutext += {"(SYNDI-LEADER) Whole-base Shield: [perimeterarea.shield_list.len ? "ON" : "OFF"] (<a href='?src=[UID()];primary=1'>[perimeterarea.shield_list.len ? "Disable" : "Enable"]</a>)<BR>"}
menutext += {"(SYNDI-LEADER) Armory Shield: [depotarea.shield_list.len ? "ON" : "OFF"] (<a href='?src=[UID()];secondary=1'>[depotarea.shield_list.len ? "Disable" : "Enable"]</a>)<BR>"}
return menutext
/obj/machinery/computer/syndicate_depot/shieldcontrol/primary(mob/user)
if(..())
return
if(depotarea.used_self_destruct)
playsound(user, sound_no, 50, 0)
return
if(!istype(perimeterarea))
return
if(perimeterarea.shield_list.len)
perimeterarea.perimeter_shields_down()
else
perimeterarea.perimeter_shields_up()
playsound(user, sound_yes, 50, 0)
/obj/machinery/computer/syndicate_depot/shieldcontrol/secondary(mob/user)
if(..())
return
if(!istype(depotarea))
return
if(depotarea.shield_list.len)
depotarea.shields_down()
else
depotarea.shields_up()
playsound(user, sound_yes, 50, 0)
// Syndicate comms computer, used to activate visitor mode, and message syndicate. Traitor-only use.
/obj/machinery/computer/syndicate_depot/syndiecomms
name = "syndicate communications computer"
icon_screen = "syndishuttle"
req_access = list()
alerts_when_broken = TRUE
var/message_sent = FALSE
/obj/machinery/computer/syndicate_depot/syndiecomms/New()
. = ..()
if(depotarea)
depotarea.comms_computer = src
/obj/machinery/computer/syndicate_depot/syndiecomms/Destroy()
if(depotarea)
depotarea.comms_computer = null
return ..()
/obj/machinery/computer/syndicate_depot/syndiecomms/get_menu(mob/user)
var/menu = "<B>Syndicate Communications Relay</B><HR>"
menu += "<BR><BR>One-Time Uplink to Syndicate HQ: [message_sent ? "ALREADY USED" : "AVAILABLE (<a href='?src=[UID()];primary=1'>Open Channel</a>)"]"
if(depotarea.on_peaceful)
menu += "<BR><BR>Visiting Agents: VISIT IN PROGRESS. "
if(depotarea.list_includes(user, depotarea.peaceful_list))
menu += "[user] IS RECOGNIZED AS VISITING AGENT"
else
menu += "[user] NOT RECOGNIZED. (<a href='?src=[UID()];secondary=[DEPOT_VISITOR_ADD]'>Sign-in as Agent</a>)"
if(check_rights(R_ADMIN, 0, user))
menu += "<BR><BR>ADMIN: (<a href='?src=[UID()];secondary=[DEPOT_VISITOR_END]'>End Visitor Mode</a>)"
else
menu += "<BR><BR>Visiting Agents: NONE (<a href='?src=[UID()];secondary=[DEPOT_VISITOR_START]'>Sign-in as Agent</a>)"
return menu
/obj/machinery/computer/syndicate_depot/syndiecomms/primary(mob/user)
if(..())
return
if(!isliving(user))
to_chat(user, "ERROR: No lifesigns detected at terminal, aborting.") // Safety to prevent aghosts accidentally pressing it and getting everyone killed.
return
if(message_sent)
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
to_chat(user, "<span class='warning'>[src] has already been used to transmit a message to the Syndicate.</span>")
return
message_sent = TRUE
if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
var/input = stripped_input(user, "Please choose a message to transmit to Syndicate HQ via quantum entanglement. Transmission does not guarantee a response. This function may only be used ONCE.", "To abort, send an empty message.", "") as text|null
if(!input)
message_sent = FALSE
return
Syndicate_announce(input, user)
to_chat(user, "Message transmitted.")
log_say("[key_name(user)] has sent a Syndicate comms message from the depot: [input]", user)
else
to_chat(user, "<span class='warning'>[src] requires authentication with syndicate codewords, which you do not know.</span>")
raise_alert("Detected unauthorized access by [user] to [src]!")
updateUsrDialog()
/obj/machinery/computer/syndicate_depot/syndiecomms/secondary(mob/user, subcommand)
if(..())
return
if(has_security_lockout(user))
return
if(depotarea)
if(depotarea.local_alarm || depotarea.called_backup || depotarea.used_self_destruct)
to_chat(user, "<span class='warning'>Visitor sign-in is not possible while the depot is on security alert.</span>")
else if(depotarea.on_peaceful)
if(subcommand == DEPOT_VISITOR_END)
if(check_rights(R_ADMIN, 0, user))
depotarea.peaceful_mode(FALSE, TRUE)
else if (subcommand == DEPOT_VISITOR_ADD)
if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
if(depotarea.list_includes(user, depotarea.peaceful_list))
to_chat(user, "<span class='warning'>[user] is already signed in as a visiting agent.</span>")
else
grant_syndie_faction(user)
else
to_chat(user, "<span class='warning'>Only verified agents of the Syndicate may sign in as visitors. Everyone else will be shot on sight.</span>")
else if(subcommand == DEPOT_VISITOR_START)
if(depotarea.something_looted)
to_chat(user, "<span class='warning'>Visitor sign-in is not possible after supplies have been taken from the depot.</span>")
else if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
grant_syndie_faction(user)
depotarea.peaceful_mode(TRUE, TRUE)
else
to_chat(user, "<span class='warning'>Only verified agents of the Syndicate may sign in as visitors. Everyone else will be shot on sight.</span>")
else
to_chat(user, "<span class='warning'>Unrecognized subcommand: [subcommand]</span>")
else
to_chat(user, "<span class='warning'>ERROR: [src] is unable to uplink to depot network.</span>")
updateUsrDialog()
/obj/machinery/computer/syndicate_depot/syndiecomms/proc/grant_syndie_faction(mob/user)
user.faction += "syndicate"
depotarea.list_add(user, depotarea.peaceful_list)
to_chat(user, {"<BR><span class='userdanger'>Welcome, Agent.</span>
<span class='warning'>You are now signed-in as a depot visitor.
Any other agents with you MUST sign in themselves.
You may explore all rooms here, except for bolted ones.
Your agent ID will give you access to most doors and computers.
Standard Syndicate regulations apply to your visit.
This means if ANY of you attack facility staff, break into anything, sabotage the facility, or bring non-agents here, then ALL of you will be summarily executed.
Enjoy your stay.</span>
"})
/obj/machinery/computer/syndicate_depot/syndiecomms/power_change()
. = ..()
if(!security_lockout && (stat & NOPOWER))
security_lockout = TRUE
raise_alert("[src] lost power.")
// Syndicate teleporter control, used to manage incoming/outgoing teleports
/obj/machinery/computer/syndicate_depot/teleporter
name = "syndicate teleporter console"
icon_screen = "telesci"
icon_keyboard = "teleport_key"
var/obj/machinery/bluespace_beacon/syndicate/mybeacon
var/obj/effect/portal/myportal
var/portal_enabled = FALSE
var/portaldir = WEST
/obj/machinery/computer/syndicate_depot/teleporter/New()
. = ..()
spawn(10)
findbeacon()
choosetarget()
update_portal()
/obj/machinery/computer/syndicate_depot/teleporter/Destroy()
if(mybeacon)
mybeacon.mycomputer = null
return ..()
/obj/machinery/computer/syndicate_depot/teleporter/portal_destroyed(obj/effect/portal/P)
myportal = null
/obj/machinery/computer/syndicate_depot/teleporter/disable_special_functions()
if(mybeacon)
if(mybeacon.enabled)
mybeacon.toggle()
if(portal_enabled)
portal_enabled = FALSE
update_portal()
/obj/machinery/computer/syndicate_depot/teleporter/proc/findbeacon()
if(mybeacon)
return TRUE
for(var/obj/machinery/bluespace_beacon/syndicate/B in myArea)
mybeacon = B
B.mycomputer = src
return TRUE
return FALSE
/obj/machinery/computer/syndicate_depot/teleporter/proc/choosetarget()
var/list/eligible_turfs = list()
for(var/obj/item/radio/beacon/R in beacons)
var/turf/T = get_turf(R)
if(!is_station_level(T.z))
continue
eligible_turfs += T
if(eligible_turfs.len)
return pick(eligible_turfs)
else
return FALSE
/obj/machinery/computer/syndicate_depot/teleporter/proc/update_portal()
if(portal_enabled && !myportal)
var/turf/tele_target = choosetarget()
if(!tele_target)
return
var/turf/portal_turf = get_step(src, portaldir)
var/obj/effect/portal/P = new(portal_turf, tele_target, src, 0)
myportal = P
P.failchance = 0
P.icon_state = "portal1"
var/area/A = get_area(tele_target)
P.name = "[A] portal"
else if(!portal_enabled && myportal)
qdel(myportal)
myportal = null
/obj/machinery/computer/syndicate_depot/teleporter/get_menu(mob/user)
var/menutext = "<B>Syndicate Teleporter Control</B><HR>"
findbeacon()
if(mybeacon)
menutext += {"<BR><BR>Incoming Teleport Beacon: [mybeacon.enabled ? "ON" : "OFF"] (<a href='?src=[UID()];primary=1'>[mybeacon.enabled ? "Disable" : "Enable"]</a>)<BR>"}
else
menutext += {"<BR><BR>Incoming Teleport Beacon: Reconnecting to beacon..."}
menutext += {"<BR><BR>Outgoing Teleport Portal: [portal_enabled ? "ON" : "OFF"]"}
if(check_rights(R_ADMIN, 0, user) || (depotarea.on_peaceful && !portal_enabled))
menutext += {" (<a href='?src=[UID()];secondary=1'>[portal_enabled ? "Disable" : "Enable"]</a>)<BR>"}
return menutext
/obj/machinery/computer/syndicate_depot/teleporter/primary(mob/user)
if(..())
return
if(!mybeacon && user)
to_chat(user, "<span class='notice'>Unable to connect to teleport beacon.</span>")
return
var/bresult = mybeacon.toggle()
to_chat(user, "<span class='notice'>Syndicate Teleporter Beacon: [bresult ? "<span class='green'>ON</span>" : "<span class='red'>OFF</span>"]</span>")
updateUsrDialog()
/obj/machinery/computer/syndicate_depot/teleporter/secondary(mob/user)
if(..())
return
if(!check_rights(R_ADMIN, 0, user) && !(depotarea.on_peaceful && !portal_enabled))
return
if(!portal_enabled && myportal)
to_chat(user, "<span class='notice'>Outgoing Teleport Portal: deactivating... please wait...</span>")
return
toggle_portal()
to_chat(user, "<span class='notice'>Outgoing Teleport Portal: [portal_enabled ? "<span class='green'>ON</span>" : "<span class='red'>OFF</span>"]</span>")
updateUsrDialog()
/obj/machinery/computer/syndicate_depot/teleporter/proc/toggle_portal()
portal_enabled = !portal_enabled
update_portal()
/obj/machinery/computer/syndicate_depot/aiterminal
name = "syndicate ai terminal"
icon_screen = "command"
req_access = list()
/obj/machinery/computer/syndicate_depot/aiterminal/get_menu(mob/user)
var/menutext = "<B>Syndicate AI Terminal</B><HR><BR>"
if(!istype(depotarea))
menutext += "<BR>ERROR: Unable to connect to AI network."
return menutext
if(depotarea.alert_log.len)
menutext += "Event Log:<UL>"
for(var/thisline in depotarea.alert_log)
menutext += "<LI>[thisline]</LI>"
menutext += "</UL>"
else
menutext += "Event Log: EMPTY"
menutext += "<BR><BR>"
menutext += "Terminated Intruders: "
menutext += depotarea.list_gethtmlmobs(depotarea.dead_list)
menutext += "<BR><BR>"
menutext += "Extra Security Forces: "
menutext += depotarea.list_gethtmlmobs(depotarea.guard_list)
menutext += "<BR><BR>"
menutext += "Visiting Agents: "
menutext += depotarea.list_gethtmlmobs(depotarea.peaceful_list)
menutext += "<BR><BR>"
var/has_bot = FALSE
for(var/mob/living/simple_animal/bot/ed209/syndicate/B in depotarea.list_getmobs(depotarea.guard_list))
has_bot = TRUE
if(has_bot)
menutext += "<BR><BR>Sentry Bot: (<a href='?src=[UID()];secondary=1'>issue recall order</a>)"
else
menutext += "<BR><BR>Sentry Bot: (none present)"
menutext += "<BR><BR>"
if(check_rights(R_ADMIN, 0, user))
if(depotarea.on_peaceful)
menutext += "<BR><BR>ADMIN: (To end visitor mode, use comms console.)"
else
menutext += "<BR><BR>ADMIN: (<a href='?src=[UID()];primary=1'>Reset Depot Alert Level</a>)"
return menutext
/obj/machinery/computer/syndicate_depot/aiterminal/primary(mob/user)
if(..())
return
if(!check_rights(R_ADMIN, 0, user))
return
if(depotarea)
depotarea.reset_alert()
to_chat(user, "Alert level reset.")
/obj/machinery/computer/syndicate_depot/aiterminal/secondary(mob/user)
if(..())
return
for(var/mob/living/simple_animal/bot/ed209/syndicate/B in depotarea.list_getmobs(depotarea.guard_list))
depotarea.list_remove(B, depotarea.guard_list)
new /obj/effect/portal(get_turf(B))
to_chat(user, "[B] has been recalled.")
qdel(B)
raise_alert("Sentry bot removed via emergency recall.")
@@ -329,6 +329,20 @@
note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_hatch
/obj/machinery/door/airlock/hatch/syndicate
name = "syndicate hatch"
req_access_txt = "150"
/obj/machinery/door/airlock/hatch/syndicate/vault
name = "syndicate vault hatch"
req_access_txt = "151"
icon = 'icons/obj/doors/airlocks/vault/vault.dmi'
overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_vault
security_level = 6
hackProof = TRUE
aiControlDisabled = TRUE
/obj/machinery/door/airlock/hatch/gamma
name = "gamma level hatch"
hackProof = 1
+9 -1
View File
@@ -72,7 +72,7 @@
// called when turf state changes
// hide the object if turf is intact
/obj/machinery/navbeacon/hide(intact)
invisibility = intact ? 101 : 0
invisibility = intact ? INVISIBILITY_MAXIMUM : SEE_INVISIBLE_MINIMUM
updateicon()
// update the icon_state
@@ -214,3 +214,11 @@ Transponder Codes:<UL>"}
codes[newkey] = newval
updateDialog()
/obj/machinery/navbeacon/invisible
invisibility = INVISIBILITY_MAXIMUM
/obj/machinery/navbeacon/invisible/hide(intact)
invisibility = INVISIBILITY_MAXIMUM
updateicon()
+20 -3
View File
@@ -982,6 +982,10 @@ var/list/turret_icons
/obj/machinery/porta_turret/syndicate
projectile = /obj/item/projectile/bullet
eprojectile = /obj/item/projectile/bullet
// Syndicate turrets *always* operate in lethal mode.
// So, nothing, not even emagging them, makes them switch bullet type.
// So, its best to always have their projectile and eprojectile settings be the same. That way, you know what they will shoot.
// Otherwise, you end up with situations where one of the two bullet types will never be used.
shot_sound = 'sound/weapons/Gunshot.ogg'
eshot_sound = 'sound/weapons/Gunshot.ogg'
@@ -1010,6 +1014,19 @@ var/list/turret_icons
check_synth = 1
ailock = 1
/obj/machinery/porta_turret/syndicate/die()
. = ..()
var/area/syndicate_depot/core/depotarea = areaMaster
if(istype(depotarea))
depotarea.turret_died()
/obj/machinery/porta_turret/syndicate/shootAt(mob/living/target)
var/area/syndicate_depot/core/depotarea = areaMaster
if(istype(depotarea))
depotarea.list_add(target, depotarea.hostile_list)
depotarea.declare_started()
return ..(target)
/obj/machinery/porta_turret/syndicate/New()
..()
if(req_one_access && req_one_access.len)
@@ -1046,17 +1063,17 @@ var/list/turret_icons
name = "machine gun turret (7.62)"
desc = "Syndicate exterior defense turret chambered for 7.62 rounds. Designed to down intruders with heavy calliber bullets."
projectile = /obj/item/projectile/bullet
eprojectile = /obj/item/projectile/bullet/midbullet
eprojectile = /obj/item/projectile/bullet
/obj/machinery/porta_turret/syndicate/grenade
name = "mounted grenade launcher (40mm)"
desc = "Syndicate 40mm grenade launcher defense turret. If you've had this much time to look at it, you're probably already dead."
projectile = /obj/item/projectile/bullet/a40mm
eprojectile = /obj/item/projectile/bullet/midbullet
eprojectile = /obj/item/projectile/bullet/a40mm
/obj/machinery/porta_turret/syndicate/assault_pod
name = "machine gun turret (4.6x30mm)"
desc = "Syndicate exterior defense turret chambered for 4.6x30mm rounds. Designed to be fitted to assault pods, it uses low calliber bullets to save space."
health = 100
projectile = /obj/item/projectile/bullet/weakbullet3
eprojectile = /obj/item/projectile/bullet/midbullet
eprojectile = /obj/item/projectile/bullet/weakbullet3
+58
View File
@@ -607,3 +607,61 @@
return prob(10)
else
return !src.density
/obj/machinery/shieldwall/syndicate
name = "energy shield"
desc = "A strange energy shield."
icon_state = "shield-red"
/obj/machinery/shieldwall/syndicate/CanPass(atom/movable/mover, turf/target, height=0)
if(isliving(mover))
var/mob/living/M = mover
if("syndicate" in M.faction)
return 1
if(istype(mover, /obj/item/projectile))
return 0
return ..(mover, target, height)
/obj/machinery/shieldwall/syndicate/CanAStarPass(ID, to_dir, caller)
if(isliving(caller))
var/mob/living/M = caller
if("syndicate" in M.faction)
return 1
return ..(ID, to_dir, caller)
/obj/machinery/shieldwall/syndicate/proc/phaseout()
// If you're bumping into an invisible shield, make it fully visible, then fade out over a couple of seconds.
if(alpha == 0)
alpha = 255
animate(src, alpha = 10, time = 20, easing = EASE_OUT)
spawn(20)
alpha = 0
/obj/machinery/shieldwall/syndicate/Bumped(atom/user)
phaseout()
return ..()
/obj/machinery/shieldwall/syndicate/attackby(obj/item/W, mob/user, params)
phaseout()
return ..()
/obj/machinery/shieldwall/syndicate/bullet_act(obj/item/projectile/Proj)
phaseout()
return ..()
/obj/machinery/shieldwall/syndicate/ex_act(severity)
phaseout()
return ..()
/obj/machinery/shieldwall/syndicate/emp_act(severity)
phaseout()
return ..()
/obj/machinery/shieldwall/syndicate/attack_hand(mob/user)
phaseout()
return ..()
/obj/machinery/shieldwall/syndicate/hitby(AM as mob|obj)
phaseout()
return ..()
+1
View File
@@ -56,6 +56,7 @@
syndicate = 1
faction = "syndicate"
req_access = list(access_syndicate_leader)
/obj/machinery/turretid/Destroy()
if(control_area)
+3 -6
View File
@@ -26,12 +26,9 @@
/obj/effect/portal/Destroy()
portals -= src
if(istype(creator, /obj/item/hand_tele))
var/obj/item/hand_tele/O = creator
O.active_portals--
else if(istype(creator, /obj/item/gun/energy/wormhole_projector))
var/obj/item/gun/energy/wormhole_projector/P = creator
P.portal_destroyed(src)
if(istype(creator, /obj))
var/obj/O = creator
O.portal_destroyed(src)
creator = null
target = null
return ..()
@@ -2,27 +2,36 @@
name = "random spawners"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
color = "#00FF00"
var/list/result = list(
/turf/simulated/floor/plasteel = 1,
/turf/simulated/floor/plating = 1,
/obj/effect/decal/cleanable/blood/splatter = 1,
/obj/effect/decal/cleanable/blood/oil = 1,
/obj/effect/decal/cleanable/fungus = 1)
var/spawn_inside = null
// This needs to come before the initialization wave because
// the thing it creates might need to be initialized too
/obj/effect/spawner/random_spawners/Initialize()
// This needs to use New() instead of Initialize() because the thing it creates might need to be initialized too
/obj/effect/spawner/random_spawners/New()
. = ..()
var/turf/T = get_turf(src)
if(!T)
log_runtime(EXCEPTION("Spawner placed in nullspace!"), src)
return
randspawn(T)
/obj/effect/spawner/random_spawners/proc/randspawn(turf/T)
var/thing_to_place = pickweight(result)
if(ispath(thing_to_place, /turf))
if(ispath(thing_to_place, /datum/nothing))
// Nothing.
else if(ispath(thing_to_place, /turf))
T.ChangeTurf(thing_to_place)
else
new thing_to_place(T)
if(ispath(spawn_inside, /obj))
var/obj/O = new thing_to_place(T)
var/obj/E = new spawn_inside(T)
O.forceMove(E)
else
new thing_to_place(T)
qdel(src)
/obj/effect/spawner/random_spawners/blood_maybe
@@ -108,3 +117,195 @@
result = list(
/turf/simulated/wall = 1,
/obj/effect/decal/cleanable/fungus = 7)
// z6 DEPOT SPAWNERS
/obj/effect/spawner/random_spawners/syndicate
// Turrets
/obj/effect/spawner/random_spawners/syndicate/turret
name = "50pc int turret"
icon_state = "x"
result = list(/datum/nothing = 1,
/obj/machinery/porta_turret/syndicate/interior = 1)
/obj/effect/spawner/random_spawners/syndicate/turret/external
name = "50pc ext turret"
result = list(/datum/nothing = 1,
/obj/machinery/porta_turret/syndicate/exterior = 1)
// Mobs
/obj/effect/spawner/random_spawners/syndicate/mob
name = "50pc melee syndimob"
icon_state = "x"
color = "#333333"
result = list(/datum/nothing = 1,
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot = 1)
// Traps
/obj/effect/spawner/random_spawners/syndicate/trap
icon_state = "x"
color = "#000000"
/obj/effect/spawner/random_spawners/syndicate/trap/pizzabomb
name = "50pc trap pizza"
result = list(/obj/item/pizzabox/meat = 1,
/obj/item/pizza_bomb/autoarm = 1)
/obj/effect/spawner/random_spawners/syndicate/trap/medbot
name = "50pc trap medibot"
result = list(/datum/nothing = 1,
/mob/living/simple_animal/bot/medbot/syndicate/emagged = 1)
/obj/effect/spawner/random_spawners/syndicate/trap/mine
name = "50pc trap landmine"
result = list(/datum/nothing = 1,
/obj/effect/mine/explosive = 1)
/obj/effect/spawner/random_spawners/syndicate/trap/documents
name = "66pc trapped documents"
result = list(/obj/item/documents/syndicate/yellow = 1,
/obj/item/documents/syndicate/yellow/trapped = 1)
// Loot
/obj/effect/spawner/random_spawners/syndicate/loot
name = "common loot"
icon_state = "x3"
spawn_inside = /obj/structure/closet/secure_closet/syndicate/depot
// Loot schema: costumes, toys, useless gimmick items, trapped items
result = list(/datum/nothing = 13,
/obj/item/storage/toolbox/syndicate = 1,
/obj/item/storage/toolbox/syndicate/trapped = 1,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1,
/obj/item/toy/cards/deck/syndicate = 1,
/obj/item/storage/secure/briefcase/syndie = 1,
/obj/item/toy/syndicateballoon = 1,
/obj/item/soap/syndie = 1,
/obj/item/clothing/under/syndicate = 1,
/obj/item/clothing/under/syndicate/tacticool = 1,
/obj/item/clothing/mask/gas/syndicate = 1,
/obj/item/suppressor = 1,
/obj/item/coin/antagtoken/syndicate = 1,
/obj/item/storage/box/syndie_kit/cutouts = 1)
/obj/effect/spawner/random_spawners/syndicate/loot/level2
name = "rare loot"
// Loot schema: space gear, basic armor, basic ammo (10mm, rcd), drugs, more dangerous/useful gimmick items, lower-value minerals
result = list(/datum/nothing = 27,
/obj/item/storage/box/syndie_kit/space = 1,
/obj/item/storage/box/syndie_kit/hardsuit = 1,
/obj/item/clothing/shoes/magboots/syndie = 1,
/obj/item/clothing/suit/armor/vest/combat = 1,
/obj/item/ammo_box/magazine/m10mm = 1,
/obj/item/storage/pill_bottle/happy = 1,
/obj/item/storage/pill_bottle/zoom = 1,
/obj/item/storage/pill_bottle/random_drug_bottle = 2,
/obj/item/storage/backpack/duffel/syndie/surgery = 1,
/obj/item/clothing/shoes/syndigaloshes = 1,
/obj/item/storage/belt/military = 1,
/obj/item/clothing/under/chameleon = 1,
/obj/item/storage/backpack/satchel_flat = 1,
/obj/item/rcd = 1,
/obj/item/rcd_ammo = 1,
/obj/item/stamp/chameleon = 1,
/obj/item/flag/chameleon = 1,
/obj/item/lighter/zippo/gonzofist = 1,
/obj/item/clothing/gloves/fingerless/rapid = 1,
/obj/item/grenade/spawnergrenade/manhacks = 1,
/obj/item/grenade/syndieminibomb = 1,
/obj/item/storage/box/syndie_kit/throwing_weapons = 1,
/obj/item/pen/edagger = 1,
/obj/item/stack/sheet/mineral/plasma{amount = 20} = 1,
/obj/item/stack/sheet/mineral/silver{amount = 20} = 1,
/obj/item/stack/sheet/mineral/gold{amount = 20} = 1)
/obj/effect/spawner/random_spawners/syndicate/loot/level3
name = "officer loot"
// Loot schema: medkits, very useful devices (jammer, illegal upgrade, RCD), better quality ammo (AP, fire), basic weapons (pistol, empgrenade), high value ores (diamond, uranium)
result = list(/datum/nothing = 25,
/obj/item/jammer = 1,
/obj/item/storage/firstaid = 1,
/obj/item/storage/box/syndie_kit/bonerepair = 1,
/obj/item/gun/projectile/automatic/pistol = 1,
/obj/item/stock_parts/cell/bluespace = 1,
/obj/item/card/emag = 1,
/obj/item/encryptionkey/binary = 1,
/obj/item/pinpointer/advpinpointer = 1,
/obj/item/borg/upgrade/vtec = 1,
/obj/item/borg/upgrade/syndicate = 1,
/obj/item/borg/upgrade/selfrepair = 1,
/obj/item/stack/sheet/mineral/diamond{amount = 10} = 1,
/obj/item/stack/sheet/mineral/uranium{amount = 10} = 1,
/obj/item/clothing/shoes/magboots/syndie/advance = 1,
/obj/item/grenade/empgrenade = 1,
/obj/item/grenade/clown_grenade = 1,
/obj/item/grenade/spawnergrenade/feral_cats = 1,
/obj/item/ammo_box/magazine/m10mm/ap = 1,
/obj/item/ammo_box/magazine/m10mm/fire = 1,
/obj/item/ammo_box/magazine/m10mm/hp = 1,
/obj/item/rad_laser = 1,
/obj/item/storage/box/syndie_kit/emp = 1,
/obj/item/batterer = 1,
/obj/item/toy/carpplushie/dehy_carp = 1,
/obj/item/clothing/glasses/hud/security/chameleon = 1)
/obj/effect/spawner/random_spawners/syndicate/loot/level4
name = "armory loot"
// Loot schema: high-power weapons (m90, esword, ebow, revolver), devices that negate depot challenges (thermal glasses, chameleon device), explosives
result = list(/obj/item/gun/projectile/automatic/c20r = 1,
/obj/item/gun/projectile/automatic/m90 = 1,
/obj/item/gun/projectile/automatic/sniper_rifle/syndicate = 1,
/obj/item/melee/energy/sword/saber = 1,
/obj/item/gun/energy/kinetic_accelerator/crossbow = 1,
/obj/item/gun/projectile/revolver = 1,
/obj/item/clothing/gloves/color/yellow/power = 1,
/obj/item/twohanded/chainsaw = 1,
/obj/item/bee_briefcase = 1,
/obj/item/twohanded/energizedfireaxe = 1,
/obj/item/clothing/glasses/thermal = 1,
/obj/item/chameleon = 1,
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
/obj/item/storage/box/syndie_kit/atmosgasgrenades = 1,
/obj/item/grenade/plastic/x4 = 1)
// Layout-affecting spawns
/obj/effect/spawner/random_spawners/syndicate/layout
icon_state = "x2"
/obj/effect/spawner/random_spawners/syndicate/layout/door
name = "50pc door 25pc falsewall 25pc wall"
result = list(/obj/machinery/door/airlock/hatch/syndicate = 6,
/turf/simulated/wall/r_wall = 2,
/obj/structure/falsewall/reinforced = 2)
/obj/effect/spawner/random_spawners/syndicate/layout/door/secret
name = "50pc falsewall 50pc wall"
result = list(/turf/simulated/wall/r_wall = 1,
/obj/structure/falsewall/reinforced = 1)
/obj/effect/spawner/random_spawners/syndicate/layout/door/vault
name = "60pc vaultdoor 20pc falsewall 20pc wall"
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 6,
/turf/simulated/wall/r_wall = 2,
/obj/structure/falsewall/reinforced = 2)
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod
name = "50pc loot spacepod"
result = list(/obj/spacepod/syndi = 1,
/obj/spacepod/syndi/unlocked = 1)
@@ -98,4 +98,8 @@
/obj/item/pizza_bomb/New()
..()
correct_wire = pick(wires)
correct_wire = pick(wires)
/obj/item/pizza_bomb/autoarm
timer_set = 1
timer = 10
@@ -54,9 +54,15 @@
name = "suspicious beacon"
desc = "A label on it reads: <i>Activate to have a singularity beacon teleported to your location</i>."
origin_tech = "bluespace=6;syndicate=5"
syndicate = 1
syndicate = TRUE
var/obj/machinery/computer/syndicate_depot/teleporter/mycomputer
/obj/item/radio/beacon/syndicate/attack_self(mob/user as mob)
/obj/item/radio/beacon/syndicate/Destroy()
if(mycomputer)
mycomputer.mybeacon = null
return ..()
/obj/item/radio/beacon/syndicate/attack_self(mob/user)
if(user)
to_chat(user, "<span class='notice'>Locked In</span>")
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
@@ -69,7 +75,7 @@
desc = "A label on it reads: <i>Warning: Activating this device will send a high-ordinance explosive to your location</i>."
origin_tech = "bluespace=5;syndicate=5"
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user as mob)
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user)
if(user)
to_chat(user, "<span class='notice'>Locked In</span>")
new /obj/machinery/syndicatebomb( user.loc )
+21
View File
@@ -27,3 +27,24 @@
name = "'Blue' secret documents"
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Blue\"."
icon_state = "docs_blue"
/obj/item/documents/syndicate/yellow
name = "'Yellow' secret documents"
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Yellow\"."
icon_state = "docs_yellow"
/obj/item/documents/syndicate/yellow/trapped
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Yellow\", and have a thin film of clear material covering their surface."
var/poison_type = "amanitin"
var/poison_dose = 20
var/poison_total = 60
/obj/item/documents/syndicate/yellow/trapped/pickup(user)
if(ishuman(user) && poison_total > 0)
var/mob/living/carbon/human/H = user
var/obj/item/clothing/gloves/G = H.gloves
if(!istype(G) || G.transfer_prints)
H.reagents.add_reagent(poison_type, poison_dose)
poison_total -= poison_dose
add_attack_logs(src, user, "Picked up [src], the trapped syndicate documents")
..()
@@ -159,6 +159,10 @@
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
/obj/item/grenade/chem_grenade/explosion/mine_armed/New()
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap/armed)
// Water + Potassium = Boom
@@ -198,6 +202,7 @@
// Basic EMP grenade
/obj/item/grenade/chem_grenade/emp
payload_name = "EMP"
@@ -86,6 +86,16 @@
new /obj/item/multitool(src)
new /obj/item/clothing/gloves/combat(src)
/obj/item/storage/toolbox/syndicate/trapped
name = "suspicious looking toolbox"
desc = "Danger. Very robust. Has a small red marker by the handle."
/obj/item/storage/toolbox/syndicate/trapped/New()
..()
new /obj/item/grenade/chem_grenade/explosion/mine_armed(src)
/obj/item/storage/toolbox/drone
name = "mechanical toolbox"
icon_state = "blue"
@@ -141,3 +141,6 @@ Frequency:
active_portals++
add_fingerprint(user)
return
/obj/item/hand_tele/portal_destroyed(obj/effect/portal/P)
active_portals--
@@ -121,26 +121,25 @@
if(!(opened ? close() : open()))
to_chat(user, "<span class='notice'>It won't budge!</span>")
// this should probably use dump_contents()
/obj/structure/closet/ex_act(severity)
switch(severity)
if(1)
for(var/atom/movable/A in src)//pulls everything out of the locker and hits it with an explosion
A.forceMove(loc)
A.ex_act(severity++)
dump_contents()
qdel(src)
if(2)
if(prob(50))
for(var/atom/movable/A in src)
A.forceMove(loc)
A.ex_act(severity++)
dump_contents()
new /obj/item/stack/sheet/metal(loc)
qdel(src)
if(3)
if(prob(5))
for(var/atom/movable/A in src)
A.forceMove(loc)
A.ex_act(severity++)
dump_contents()
new /obj/item/stack/sheet/metal(loc)
qdel(src)
@@ -149,23 +148,20 @@
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
if(health <= 0)
for(var/atom/movable/A in src)
A.forceMove(loc)
dump_contents()
qdel(src)
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
user.do_attack_animation(src)
visible_message("<span class='warning'>[user] destroys the [src].</span>")
for(var/atom/movable/A in src)
A.forceMove(loc)
dump_contents()
qdel(src)
// this should probably use dump_contents()
/obj/structure/closet/blob_act()
if(prob(75))
for(var/atom/movable/A in src)
A.forceMove(loc)
dump_contents()
qdel(src)
/obj/structure/closet/attackby(obj/item/W, mob/user, params)
@@ -0,0 +1,45 @@
/obj/structure/closet/secure_closet/syndicate/depot
name = "depot supply closet"
desc = ""
locked = 0
anchored = 1
health = 200
req_access = list()
/obj/structure/closet/secure_closet/syndicate/depot/New()
. = ..()
update_icon()
/obj/structure/closet/secure_closet/syndicate/depot/emag_act()
. = ..()
loot_pickup()
/obj/structure/closet/secure_closet/syndicate/depot/open()
. = ..()
if(opened)
loot_pickup()
/obj/structure/closet/secure_closet/syndicate/depot/dump_contents()
loot_pickup()
. = ..()
/obj/structure/closet/secure_closet/syndicate/depot/proc/loot_pickup()
var/area/syndicate_depot/core/depotarea = areaMaster
if(depotarea)
depotarea.locker_looted()
/obj/structure/closet/secure_closet/syndicate/depot/attack_animal(mob/M)
if(isanimal(M) && "syndicate" in M.faction)
to_chat(M, "<span class='warning'>The [src] resists your attack!</span>")
return
return ..(M)
/obj/structure/closet/secure_closet/syndicate/depot/emp_act(severity)
return
/obj/structure/closet/secure_closet/syndicate/depot/togglelock(mob/user)
. = ..()
if(!locked)
loot_pickup()
+106
View File
@@ -0,0 +1,106 @@
/obj/structure/fusionreactor
name = "syndicate fusion reactor"
desc = ""
icon = 'icons/obj/device.dmi'
icon_state = "powersink1"
anchored = 1
max_integrity = 50
var/area/syndicate_depot/core/depotarea
/obj/structure/fusionreactor/Initialize()
. = ..()
depotarea = areaMaster
if(depotarea)
depotarea.reactor = src
/obj/structure/fusionreactor/Destroy()
if(depotarea)
depotarea.reactor = null
..()
/obj/structure/fusionreactor/ex_act(severity)
if(severity < 3)
obj_integrity = 0
healthcheck()
/obj/structure/fusionreactor/bullet_act(obj/item/projectile/Proj)
obj_integrity -= Proj.damage
..()
healthcheck()
/obj/structure/fusionreactor/proc/healthcheck()
if(obj_integrity <= 0)
overload(TRUE)
/obj/structure/fusionreactor/attackby(obj/item/I, mob/user, params)
if(iswrench(I))
playsound(loc, I.usesound, 50, 1)
to_chat(user, "<span class='notice'>The [src] is too well secured to the floor.</span>")
else if(isscrewdriver(I))
to_chat(user, "<span class='notice'>You try to screwdriver open [src], but accidentally release some radiation!</span>")
if(prob(50))
empulse(src, 4, 10)
else
for(var/mob/living/M in range(10, loc))
M.apply_effect(rand(5, 25), IRRADIATE)
else
return ..()
/obj/structure/fusionreactor/proc/overload(containment_failure)
var/obj/effect/overload/O = new /obj/effect/overload(get_turf(src))
if(containment_failure)
playsound(loc, 'sound/machines/Alarm.ogg', 100, 0, 0)
O.deliberate = TRUE
O.max_cycles = 6
qdel(src)
/obj/effect/overload
icon = 'icons/obj/tesla_engine/energy_ball.dmi'
icon_state = "energy_ball"
pixel_x = -32
pixel_y = -32
anchored = 1
var/cycles = 0
var/beepsound = 'sound/items/timer.ogg'
var/deliberate = FALSE
var/max_cycles = 10
var/max_fire_range = 9
var/area/syndicate_depot/core/depotarea
/obj/effect/overload/Initialize()
. = ..()
processing_objects.Add(src)
depotarea = areaMaster
if(istype(depotarea))
if(!depotarea.used_self_destruct)
depotarea.used_self_destruct = TRUE // Silences all further alerts from this point onwards.
depotarea.updateicon()
depotarea.shields_down()
/obj/effect/overload/process()
var/turf/T = get_turf(src)
if(cycles < max_cycles)
if(!deliberate)
playsound(loc, beepsound, 50, 0)
cycles++
var/fire_range = min(cycles, max_fire_range)
for(var/turf/simulated/turf in range(fire_range, T))
new /obj/effect/hotspot(turf)
return
if(!istype(depotarea))
depotarea = areaMaster
if(istype(depotarea))
depotarea.destroyed = TRUE
depotarea.updateicon()
for(var/obj/structure/closet/L in range(30, T))
L.open()
for(var/mob/living/M in range(30, T))
M.gib()
explosion(get_turf(src), 25, 35, 45, 55, 1, 1, 60, 0, 0)
processing_objects.Remove(src)
qdel(src)
+4 -4
View File
@@ -17,8 +17,8 @@
if(announce)
event_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
var/list/skipped_areas = list(/area/turret_protected/ai)
var/list/skipped_areas_apc = list(/area/engine/engineering)
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
for(var/obj/machinery/power/smes/S in machines)
var/area/current_area = get_area(S)
@@ -41,8 +41,8 @@
C.cell.charge = 0
/proc/power_restore(var/announce = 1)
var/list/skipped_areas = list(/area/turret_protected/ai)
var/list/skipped_areas_apc = list(/area/engine/engineering)
var/list/skipped_areas = list(/area/turret_protected/ai, /area/syndicate_depot)
var/list/skipped_areas_apc = list(/area/engine/engineering, /area/syndicate_depot)
if(announce)
event_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
+3 -2
View File
@@ -95,8 +95,9 @@
sideslist = list("valid", "salad")
credits = 20
/obj/item/coin/antagtoken/New()
return
/obj/item/coin/antagtoken/syndicate
name = "syndicate coin"
credits = 160
/obj/item/coin/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/stack/cable_coil))
@@ -1,10 +1,10 @@
/mob/living/silicon/decoy/death(gibbed)
if(stat == DEAD) return
if(stat == DEAD)
return
stat = DEAD
icon_state = "ai-crash"
spawn(10)
explosion(loc, 3, 6, 12, 15)
for(var/obj/machinery/ai_status_display/O in world) //change status
O.mode = 2
return ..(gibbed)
if(atoms_share_level(O, src))
O.mode = 2
..(0)
gib()
+46 -1
View File
@@ -4,9 +4,54 @@
icon_state = "ai"
anchored = 1 // -- TLE
canmove = 0
a_intent = INTENT_HARM // This is apparently the only thing that stops other mobs walking through them as if they were thin air.
/mob/living/silicon/decoy/New()
src.icon = 'icons/mob/AI.dmi'
src.icon_state = "ai"
src.anchored = 1
src.canmove = 0
src.canmove = 0
/mob/living/silicon/decoy/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/aicard))
to_chat(user, "<span class='warning'>You cannot find an intellicard slot on [src].</span>")
return TRUE
else
return ..()
/mob/living/silicon/decoy/syndicate
faction = list("syndicate")
name = "R.O.D.G.E.R"
desc = "Red Operations, Depot General Emission Regulator"
icon_state = "ai-magma"
/mob/living/silicon/decoy/syndicate/New()
. = ..()
icon_state = "ai-magma"
/mob/living/silicon/decoy/syndicate/depot
var/raised_alert = FALSE
/mob/living/silicon/decoy/syndicate/depot/proc/raise_alert()
raised_alert = TRUE
var/area/syndicate_depot/core/depotarea = get_area(src) // Cannot use myArea or areaMaster as neither will be defined for this mob type
if(istype(depotarea))
depotarea.increase_alert("AI Unit Offline")
else
say("Connection failure!")
/mob/living/silicon/decoy/syndicate/depot/death(pass)
if(!raised_alert)
raise_alert()
. = ..(pass)
/mob/living/silicon/decoy/syndicate/depot/adjustBruteLoss(dmg)
. = ..(dmg)
updatehealth()
/mob/living/silicon/decoy/syndicate/depot/adjustFireLoss(dmg)
. = ..(dmg)
updatehealth()
/mob/living/silicon/decoy/syndicate/depot/ex_act(severity)
adjustBruteLoss(250)
@@ -1,10 +1,5 @@
/mob/living/silicon/decoy/Life(seconds, times_fired)
if(src.stat == 2)
return
else
if(src.health <= config.health_threshold_dead && src.stat != 2)
death()
return
return
/mob/living/silicon/decoy/updatehealth()
@@ -13,3 +8,11 @@
stat = CONSCIOUS
else
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
update_stat()
/mob/living/silicon/decoy/update_stat()
if(stat == DEAD)
return
if(health <= 0)
death()
@@ -204,6 +204,10 @@
if(disabled)
return
ed209_ai()
/mob/living/simple_animal/bot/ed209/proc/ed209_ai()
var/list/targets = list()
for(var/mob/living/carbon/C in view(7, src)) //Let's find us a target
var/threatlevel = 0
@@ -45,6 +45,7 @@
var/treat_virus = 1 //If on, the bot will attempt to treat viral infections, curing them if possible.
var/shut_up = 0 //self explanatory :)
var/syndicate_aligned = FALSE // Will it only treat operatives?
var/drops_parts = TRUE
/mob/living/simple_animal/bot/medbot/tox
skin = "tox"
@@ -77,6 +78,7 @@
name = "Suspicious Medibot"
desc = "You'd better have insurance!"
skin = "bezerk"
faction = list("syndicate")
treatment_oxy = "perfluorodecalin"
treatment_brute = "bicaridine"
treatment_fire = "kelotane"
@@ -91,6 +93,11 @@
..()
Radio.syndie = 1
/mob/living/simple_animal/bot/medbot/syndicate/emagged
emagged = 2
declare_crit = 0
drops_parts = FALSE
/mob/living/simple_animal/bot/medbot/update_icon()
overlays.Cut()
if(skin)
@@ -554,36 +561,37 @@
visible_message("<span class='userdanger'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
switch(skin)
if("ointment")
new /obj/item/storage/firstaid/fire/empty(Tsec)
if("tox")
new /obj/item/storage/firstaid/toxin/empty(Tsec)
if("o2")
new /obj/item/storage/firstaid/o2/empty(Tsec)
if("brute")
new /obj/item/storage/firstaid/brute/empty(Tsec)
if("adv")
new /obj/item/storage/firstaid/adv/empty(Tsec)
if("bezerk")
var/obj/item/storage/firstaid/tactical/empty/T = new(Tsec)
T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up.
if("fish")
new /obj/item/storage/firstaid/aquatic_kit(Tsec)
else
new /obj/item/storage/firstaid(Tsec)
if(drops_parts)
switch(skin)
if("ointment")
new /obj/item/storage/firstaid/fire/empty(Tsec)
if("tox")
new /obj/item/storage/firstaid/toxin/empty(Tsec)
if("o2")
new /obj/item/storage/firstaid/o2/empty(Tsec)
if("brute")
new /obj/item/storage/firstaid/brute/empty(Tsec)
if("adv")
new /obj/item/storage/firstaid/adv/empty(Tsec)
if("bezerk")
var/obj/item/storage/firstaid/tactical/empty/T = new(Tsec)
T.syndicate_aligned = syndicate_aligned //This is a special case since Syndicate medibots and the mysterious medibot look the same; we also dont' want crew building Syndicate medibots if the mysterious medibot blows up.
if("fish")
new /obj/item/storage/firstaid/aquatic_kit(Tsec)
else
new /obj/item/storage/firstaid(Tsec)
new /obj/item/assembly/prox_sensor(Tsec)
new /obj/item/assembly/prox_sensor(Tsec)
new /obj/item/healthanalyzer(Tsec)
new /obj/item/healthanalyzer(Tsec)
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
if(reagent_glass)
reagent_glass.forceMove(Tsec)
reagent_glass = null
if(prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
if(emagged && prob(25))
playsound(loc, 'sound/voice/minsult.ogg', 50, 0)
@@ -0,0 +1,216 @@
/mob/living/simple_animal/bot/ed209/syndicate
name = "Syndicate Sentry Bot"
desc = "A syndicate security bot."
model = "Guardian"
icon = 'icons/mecha/mecha.dmi'
icon_state = "darkgygax"
radio_channel = "Syndicate"
health = 300
maxHealth = 300
declare_arrests = 0
idcheck = 1
arrest_type = 1
auto_patrol = 1
emagged = 2
faction = list("syndicate")
shoot_sound = 'sound/weapons/wave.ogg'
anchored = 1
pressure_resistance = 100 //100 kPa difference required to push
throw_pressure_limit = 120
window_id = "syndiebot"
window_name = "Syndicate Bot Interface"
var/turf/saved_turf
var/stepsound = 'sound/mecha/mechstep.ogg'
var/area/syndicate_depot/core/depotarea
var/raised_alert = FALSE
var/pathing_failed = FALSE
var/turf/spawn_turf
/mob/living/simple_animal/bot/ed209/syndicate/New()
..()
if(access_card)
access_card.access = list(access_syndicate, access_syndicate_leader)
set_weapon()
update_icon()
spawn_turf = get_turf(src)
/mob/living/simple_animal/bot/ed209/syndicate/update_icon()
icon_state = initial(icon_state)
/mob/living/simple_animal/bot/ed209/syndicate/turn_on()
. = ..()
update_icon()
/mob/living/simple_animal/bot/ed209/syndicate/turn_off()
..()
update_icon()
/mob/living/simple_animal/bot/ed209/syndicate/get_controls(mob/user)
to_chat(user, "<span class='warning'>[src] has no accessible control panel!</span>")
return
/mob/living/simple_animal/bot/ed209/syndicate/show_controls(mob/M)
return
/mob/living/simple_animal/bot/ed209/syndicate/Topic(href, href_list)
return
/mob/living/simple_animal/bot/ed209/syndicate/retaliate(mob/living/carbon/human/H)
if(!H)
return
target = H
mode = BOT_HUNT
/mob/living/simple_animal/bot/ed209/syndicate/emag_act(mob/user)
to_chat(user, "<span class='warning'>[src] has no card reader slot!</span>")
/mob/living/simple_animal/bot/ed209/syndicate/ed209_ai()
var/turf/current_turf = get_turf(src)
if(saved_turf && current_turf != saved_turf)
playsound(loc, stepsound, 40, 1)
if(spawn_turf && !atoms_share_level(src, spawn_turf))
raise_alert("[src] lost in space.")
raised_alert = FALSE
raise_alert("[src] activated self-destruct.")
qdel(src)
saved_turf = current_turf
switch(mode)
if(BOT_IDLE)
walk_to(src,0)
look_for_perp()
if(!mode && auto_patrol)
mode = BOT_START_PATROL
if(BOT_HUNT)
if(frustration >= 8)
walk_to(src,0)
back_to_idle()
if(target)
if(isliving(target))
if(target.stat == DEAD)
back_to_idle()
return
shootAt(target)
var/turf/olddist = get_dist(src, target)
walk_to(src, target,1,4)
if((get_dist(src, target)) >= (olddist))
frustration++
else
frustration = 0
else
back_to_idle()
if(BOT_START_PATROL)
look_for_perp()
start_patrol()
if(BOT_PATROL)
look_for_perp()
bot_patrol()
else
back_to_idle()
return
/mob/living/simple_animal/bot/ed209/syndicate/look_for_perp()
if(disabled)
return
for(var/mob/M in view(7, src))
if(M.invisibility > see_invisible)
continue
if("syndicate" in M.faction)
continue
if(M.stat == DEAD)
continue
if((M.name == oldtarget_name) && (world.time < last_found + 100))
continue
target = M
oldtarget_name = M.name
mode = BOT_HUNT
spawn(0)
handle_automated_action()
break
for(var/obj/spacepod/P in view(7, src))
if((P.name == oldtarget_name) && (world.time < last_found + 100))
continue
if(!P.pilot)
continue
if("syndicate" in P.pilot.faction)
continue
if(P.pilot.stat == DEAD)
continue
target = P
oldtarget_name = P.name
mode = BOT_HUNT
spawn(0)
handle_automated_action()
break
/mob/living/simple_animal/bot/ed209/syndicate/shootAt(atom/target)
if(lastfired && world.time - lastfired < shot_delay)
return
lastfired = world.time
var/obj/item/projectile/P = new projectile(loc)
playsound(loc, shoot_sound, 100, 1)
P.current = loc
P.starting = loc
P.firer = src
P.yo = target.y - loc.y
P.xo = target.x - loc.x
P.original = target
P.fire()
/mob/living/simple_animal/bot/ed209/syndicate/explode()
if (!QDELETED(src))
if(depotarea)
depotarea.list_remove(src, depotarea.guard_list)
walk_to(src,0)
visible_message("<span class='userdanger'>[src] blows apart!</span>")
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
new /obj/effect/decal/cleanable/blood/oil(loc)
var/obj/effect/decal/mecha_wreckage/gygax/dark/wreck = new /obj/effect/decal/mecha_wreckage/gygax/dark(loc)
wreck.name = "sentry bot wreckage"
raise_alert("[src] destroyed.")
qdel(src)
/mob/living/simple_animal/bot/ed209/syndicate/set_weapon()
projectile = /obj/item/projectile/bullet/a40mm
/mob/living/simple_animal/bot/ed209/syndicate/emp_act(severity)
return
/mob/living/simple_animal/bot/ed209/UnarmedAttack(atom/A)
if(!on)
return
shootAt(A)
/mob/living/simple_animal/bot/ed209/syndicate/cuff(mob/living/carbon/C)
shootAt(C)
/mob/living/simple_animal/bot/ed209/syndicate/stun_attack(mob/living/carbon/C)
shootAt(C)
/mob/living/simple_animal/bot/ed209/syndicate/speak()
return
/mob/living/simple_animal/bot/ed209/syndicate/Process_Spacemove(movement_dir = 0)
return 1
/mob/living/simple_animal/bot/ed209/syndicate/start_patrol()
if(tries >= BOT_STEP_MAX_RETRIES)
if(!pathing_failed)
pathing_failed = TRUE
var/failmsg = "Depot: [src] at [loc.x],[loc.y],[loc.z] lacks patrol target."
if(istype(patrol_target))
failmsg = "Depot: [src] at [loc.x],[loc.y],[loc.z] cannot reach [patrol_target.x],[patrol_target.y]"
log_debug(failmsg)
return ..()
/mob/living/simple_animal/bot/ed209/syndicate/proc/raise_alert(reason)
if(raised_alert)
return
raised_alert = TRUE
if(depotarea)
depotarea.increase_alert(reason)
@@ -115,6 +115,11 @@
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
/obj/effect/landmark/mobcorpse/syndicateautogib/createCorpse()
var/mob/living/carbon/human/M = new /mob/living/carbon/human(loc)
M.real_name = src.name
M.gib()
qdel(src)
/obj/effect/landmark/mobcorpse/clown
@@ -39,17 +39,20 @@
armour_penetration = 28
status_flags = 0
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
var/melee_block_chance = 20
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if(O.force)
if(prob(80))
if(prob(melee_block_chance))
visible_message("<span class='boldwarning'>[src] blocks the [O] with its shield! </span>")
else
var/damage = O.force
if(O.damtype == STAMINA)
damage = 0
health -= damage
visible_message("<span class='boldwarning'>[src] has been attacked with the [O] by [user]. </span>")
else
visible_message("<span class='boldwarning'>[src] blocks the [O] with its shield! </span>")
playsound(loc, O.hitsound, 25, 1, -1)
else
to_chat(usr, "<span class='warning'>This weapon is ineffective, it does no damage.</span>")
@@ -65,19 +68,182 @@
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
return 0
/mob/living/simple_animal/hostile/syndicate/melee/autogib
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
/mob/living/simple_animal/hostile/syndicate/melee/space
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot
name = "Syndicate Operative"
force_threshold = 6 // Prevents people using punches to bypass eshield
robust_searching = 1 // Together with stat_attack, ensures dionae/etc that regen are killed properly
stat_attack = 1
universal_speak = 1
melee_block_chance = 40
var/area/syndicate_depot/core/depotarea
var/raised_alert = FALSE
var/alert_on_death = FALSE
var/alert_on_timeout = FALSE
var/alert_on_spacing = TRUE
var/alert_on_shield_breach = FALSE
var/seen_enemy = FALSE
var/seen_enemy_name = null
var/seen_revived_enemy = FALSE
var/aggro_cycles = 0
var/scan_cycles = 0
var/shield_key = FALSE
var/turf/spawn_turf
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/New()
..()
name = "[name] [pick(last_names)]"
depotarea = areaMaster
spawn_turf = get_turf(src)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/Aggro()
. = ..()
if(target && istype(depotarea))
if(!seen_enemy)
seen_enemy = TRUE
playsound(loc, 'sound/weapons/saberon.ogg', 35, 1)
if(alert_on_shield_breach)
if(depotarea.shield_list.len)
raise_alert("[name] reports that an intruder is trying to breach the armory shield!")
alert_on_shield_breach = FALSE
raised_alert = FALSE
alert_on_death = TRUE
if(isliving(target))
var/mob/living/M = target
depotarea.list_add(M, depotarea.hostile_list)
if(M.mind && M.mind.special_role == SPECIAL_ROLE_TRAITOR)
depotarea.saw_double_agent(M)
depotarea.declare_started()
seen_enemy_name = target.name
if(istype(target, /obj/mecha))
depotarea.saw_mech(target)
if(istype(target, /obj/spacepod))
depotarea.saw_pod(target)
if(depotarea.list_includes(target, depotarea.dead_list))
seen_revived_enemy = TRUE
raise_alert("[name] reports intruder [target] has returned from death!")
depotarea.list_remove(target, depotarea.dead_list)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/handle_automated_action()
if(seen_enemy)
aggro_cycles++
if(alert_on_timeout && !raised_alert && aggro_cycles >= 60)
raise_alert("[name] has reported contact with hostile entity: [seen_enemy_name]")
if(scan_cycles >= 15 && istype(depotarea))
scan_cycles = 0
if(!atoms_share_level(src, spawn_turf))
if(alert_on_spacing)
raise_alert("[src] lost in space.")
death()
return
for(var/mob/living/body in hearers(vision_range, targets_from))
if(body.stat != DEAD)
continue
if(depotarea.list_includes(body, depotarea.dead_list))
continue
if(faction_check(body))
continue
say("Target [body]... terminated.")
depotarea.list_add(body, depotarea.dead_list)
pointed(body)
else
scan_cycles++
..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/proc/raise_alert(var/reason)
if(istype(depotarea) && (!raised_alert || seen_revived_enemy) && !depotarea.used_self_destruct)
raised_alert = TRUE
say("Intruder!")
depotarea.increase_alert(reason)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/death()
if(alert_on_death)
if(seen_enemy_name)
raise_alert("[name] has died in combat with [seen_enemy_name].")
else
raise_alert("[name] has died.")
if(shield_key && depotarea)
depotarea.shields_key_check()
if(depotarea)
depotarea.list_remove(src, depotarea.guard_list)
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/CanPass(atom/movable/mover, turf/target, height=0)
if(isliving(mover))
var/mob/living/blocker = mover
if(faction_check(blocker))
return 1
return ..(mover, target, height)
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer
name = "Syndicate Officer"
alert_on_death = TRUE
alert_on_timeout = TRUE
melee_block_chance = 60
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory
name = "Syndicate Quartermaster"
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxHealth = 250
health = 250
melee_block_chance = 80
alert_on_timeout = TRUE
alert_on_shield_breach = TRUE
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/death()
if(depotarea)
depotarea.declare_finished()
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize()
. = ..()
if(istype(depotarea))
var/list/key_candidates = list()
for(var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O in living_mob_list)
if(O == src)
continue
key_candidates += O
if(key_candidates.len)
var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O = pick(key_candidates)
O.shield_key = TRUE
depotarea.shields_up()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space
name = "Syndicate Backup"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
speed = 1
wander = 0
alert_on_spacing = FALSE
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/melee/space
name = "Syndicate Commando"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/ranged
ranged = 1
rapid = 1
@@ -97,10 +263,11 @@
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/gun/projectile/automatic/c20r)
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/ranged/space/autogib
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
/mob/living/simple_animal/hostile/viscerator
+9
View File
@@ -121,3 +121,12 @@
..()
new /obj/item/documents/syndicate/blue(src)
update_icon()
/obj/item/folder/syndicate/yellow
icon_state = "folder_syellow"
/obj/item/folder/syndicate/yellow/full/New()
..()
new /obj/item/documents/syndicate/yellow(src)
update_icon()
@@ -198,7 +198,7 @@
..()
select_fire(usr)
/obj/item/gun/energy/wormhole_projector/proc/portal_destroyed(obj/effect/portal/P)
/obj/item/gun/energy/wormhole_projector/portal_destroyed(obj/effect/portal/P)
if(P.icon_state == "portal")
blue = null
if(orange)
+4 -1
View File
@@ -557,11 +557,14 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/spacepod_equipment/SPE, v
/obj/spacepod/syndi
name = "syndicate spacepod"
desc = "An armed spacepod painted in syndicate colors."
desc = "A spacepod painted in syndicate colors."
icon_state = "pod_synd"
health = 400
unlocked = FALSE
/obj/spacepod/syndi/unlocked
unlocked = TRUE
/obj/spacepod/sec/New()
..()
var/obj/item/spacepod_equipment/weaponry/burst_taser/T = new /obj/item/spacepod_equipment/weaponry/taser
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

+5
View File
@@ -395,6 +395,7 @@
#include "code\game\world.dm"
#include "code\game\area\ai_monitored.dm"
#include "code\game\area\areas.dm"
#include "code\game\area\depot-areas.dm"
#include "code\game\area\Dynamic areas.dm"
#include "code\game\area\Space Station 13 areas.dm"
#include "code\game\dna\dna2.dm"
@@ -635,6 +636,7 @@
#include "code\game\machinery\computer\communications.dm"
#include "code\game\machinery\computer\computer.dm"
#include "code\game\machinery\computer\crew.dm"
#include "code\game\machinery\computer\depot.dm"
#include "code\game\machinery\computer\HolodeckControl.dm"
#include "code\game\machinery\computer\honkputer.dm"
#include "code\game\machinery\computer\law.dm"
@@ -955,6 +957,7 @@
#include "code\game\objects\structures\bedsheet_bin.dm"
#include "code\game\objects\structures\coathanger.dm"
#include "code\game\objects\structures\curtains.dm"
#include "code\game\objects\structures\depot.dm"
#include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\door_assembly_types.dm"
@@ -1015,6 +1018,7 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\chaplain.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\depot.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm"
@@ -1776,6 +1780,7 @@
#include "code\modules\mob\living\simple_animal\bot\medbot.dm"
#include "code\modules\mob\living\simple_animal\bot\mulebot.dm"
#include "code\modules\mob\living\simple_animal\bot\secbot.dm"
#include "code\modules\mob\living\simple_animal\bot\syndicate.dm"
#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\cockroach.dm"