diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml
index 72c029c770..6fe53f700c 100644
--- a/.github/workflows/update_tgs_dmapi.yml
+++ b/.github/workflows/update_tgs_dmapi.yml
@@ -29,7 +29,7 @@ jobs:
run: |
git config user.name tgstation-server
git config user.email tgstation-server@users.noreply.github.com
- git add *
+ git add .
git commit -m 'Update TGS DMAPI'
git push -f -u origin tgs-dmapi-update
diff --git a/_maps/RandomZLevels/away_mission/jungleresort.dmm b/_maps/RandomZLevels/away_mission/jungleresort.dmm
new file mode 100644
index 0000000000..d4698fec9a
--- /dev/null
+++ b/_maps/RandomZLevels/away_mission/jungleresort.dmm
@@ -0,0 +1,26564 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ab" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"af" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/toy/plush/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"ai" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/structure/closet/crate/secure/loot,
+/obj/item/clothing/head/collectable/paper,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"ak" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ dir = 8
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"an" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ap" = (
+/obj/structure/stone_tile/surrounding/burnt,
+/obj/structure/stone_tile/center/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ar" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/mob/living/carbon/monkey,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"as" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"at" = (
+/obj/machinery/jukebox,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"aA" = (
+/obj/machinery/light,
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"aB" = (
+/obj/structure/flora/junglebush/large,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"aG" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/rock,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"aI" = (
+/obj/structure/flora/tree/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"aL" = (
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"aP" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"aY" = (
+/obj/machinery/vending/autodrobe,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"bf" = (
+/obj/structure/sign/barsign,
+/turf/closed/wall/mineral/wood,
+/area/awaymission/jungleresort)
+"bg" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"bn" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"bp" = (
+/obj/structure/flora/tree/jungle,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"br" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/rock/pile/largejungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"bv" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"bw" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"by" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"bG" = (
+/turf/closed/indestructible/riveted,
+/area/awaymission/jungleresort)
+"bW" = (
+/obj/structure/table/wood,
+/obj/machinery/button/door{
+ id = "ResortCabin2";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/obj/item/poster/random_official,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"bZ" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/donkpockets,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"cg" = (
+/obj/structure/table/wood,
+/obj/machinery/reagentgrinder,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/item/kitchen/knife,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"cn" = (
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"cw" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"cA" = (
+/obj/structure/flora/junglebush/b,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"cD" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"cH" = (
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"cJ" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"cK" = (
+/obj/structure/closet/crate,
+/obj/item/clothing/head/collectable/tophat,
+/turf/open/floor/plating/rust,
+/area/awaymission/jungleresort)
+"cT" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"cV" = (
+/obj/structure/flora/junglebush/c,
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"cX" = (
+/obj/structure/flora/rock,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"dm" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/item/clothing/head/hardhat/cakehat,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"dn" = (
+/obj/structure/chair/comfy/brown,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"dt" = (
+/obj/structure/table/wood,
+/mob/living/carbon/monkey/punpun/curiousgorge,
+/obj/item/reagent_containers/food/drinks/drinkingglass,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"du" = (
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"dC" = (
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"dF" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"dW" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"dY" = (
+/obj/structure/flora/junglebush/large,
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ef" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/circuit,
+/area/awaymission/jungleresort)
+"ez" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/center/cracked,
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"eB" = (
+/obj/structure/chair/comfy/black,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"eC" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"eD" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green,
+/obj/machinery/button/door{
+ id = "AbandonedCabinDorm";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"eI" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/awaymission/jungleresort)
+"eJ" = (
+/obj/structure/flora/junglebush,
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"eK" = (
+/obj/machinery/washing_machine,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"eN" = (
+/obj/item/clothing/suit/hooded/wintercoat/bar,
+/obj/structure/table/wood,
+/obj/item/clothing/head/that,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"eR" = (
+/obj/structure/bed,
+/obj/item/bedsheet/captain,
+/obj/machinery/button/door{
+ id = "ResortManagerDorm";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"eT" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"fh" = (
+/obj/structure/table/wood,
+/obj/machinery/button/door{
+ id = "ResortCabin3";
+ normaldoorcontrol = 1;
+ pixel_y = 25;
+ specialfunctions = 4
+ },
+/obj/item/storage/wallet/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"fm" = (
+/obj/structure/reagent_dispensers/keg/mead,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"fy" = (
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"fz" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"fH" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"fW" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"fX" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"gj" = (
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"go" = (
+/obj/structure/flora/rock,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"gv" = (
+/obj/structure/table/wood,
+/obj/item/book/manual/chef_recipes,
+/obj/item/toy/figure/chef,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"gK" = (
+/obj/structure/table/wood,
+/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot,
+/obj/item/ammo_box/magazine/toy/m762/riot,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"gL" = (
+/obj/structure/table/wood,
+/obj/item/export/bottle/minikeg,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"gN" = (
+/obj/structure/table/wood/fancy,
+/obj/item/candle/infinite,
+/obj/item/toy/figure/chaplain,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"gU" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"gV" = (
+/obj/structure/table/wood,
+/obj/machinery/button/door{
+ id = "ResortCabin1";
+ normaldoorcontrol = 1;
+ pixel_y = -25;
+ specialfunctions = 4
+ },
+/obj/item/lipstick/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"gZ" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/under/color/jumpskirt/random,
+/obj/item/clothing/under/color/random,
+/obj/item/clothing/under/color/random,
+/obj/item/clothing/under/color/jumpskirt/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"hj" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"hk" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hl" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hp" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ht" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hv" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/ausbushes/fullgrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hw" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hy" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"hC" = (
+/obj/structure/flora/rock,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hH" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"hN" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"hU" = (
+/obj/structure/curtain,
+/obj/machinery/shower,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"hX" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ia" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ie" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ih" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ii" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/carneburrito,
+/obj/item/reagent_containers/food/drinks/soda_cans/starkist,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"im" = (
+/obj/machinery/computer/security/wooden_tv,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"io" = (
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"is" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/structure/flora/rock/pile,
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"iv" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"iE" = (
+/obj/structure/closet/secure_closet/bar,
+/obj/item/clothing/glasses/sunglasses/reagent,
+/obj/item/clothing/under/rank/civilian/bartender/skirt,
+/obj/item/clothing/accessory/waistcoat,
+/obj/item/clothing/under/rank/civilian/bartender,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"iG" = (
+/obj/structure/flora/junglebush/large,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"iH" = (
+/obj/machinery/gibber,
+/obj/machinery/light/small,
+/turf/open/floor/plasteel/freezer,
+/area/awaymission/jungleresort)
+"iL" = (
+/obj/structure/bed,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/item/bedsheet/syndie,
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"iR" = (
+/obj/structure/chair/comfy/brown{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"iU" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"iZ" = (
+/obj/item/storage/toolbox/artistic,
+/obj/structure/table/wood/fancy,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"jb" = (
+/obj/structure/flora/rock/pile,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jh" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jj" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"js" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jy" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jB" = (
+/obj/structure/flora/junglebush/large,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jF" = (
+/obj/structure/flora/tree/jungle,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jH" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jJ" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jL" = (
+/obj/structure/flora/ausbushes/brflowers,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"jO" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"jQ" = (
+/obj/structure/flora/junglebush/c,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"kf" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"kn" = (
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"kq" = (
+/obj/structure/table/wood/poker,
+/obj/item/toy/cards/deck/syndicate,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"kr" = (
+/obj/structure/flora/junglebush/large,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"kw" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"kz" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/shaker,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"kB" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/fullupgrade,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"kI" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"kJ" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"kQ" = (
+/obj/machinery/processor,
+/turf/open/floor/plasteel/freezer,
+/area/awaymission/jungleresort)
+"kW" = (
+/turf/closed/wall/rust,
+/area/awaymission/jungleresort)
+"le" = (
+/obj/structure/chair/sofa/corner,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"lf" = (
+/obj/structure/flora/rock/pile,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ll" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ dir = 4
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"lr" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"lB" = (
+/obj/structure/chair/sofa/right{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"lJ" = (
+/obj/structure/flora/junglebush/c,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"lS" = (
+/obj/structure/toilet/secret/low_loot{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"lV" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ResortManagerDorm";
+ name = "Resort Manager's Dorm"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"mg" = (
+/obj/machinery/door/airlock/engineering{
+ name = "Resort Power"
+ },
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"mh" = (
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"mk" = (
+/obj/structure/flora/junglebush/c,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ml" = (
+/obj/structure/table/wood,
+/obj/item/toy/figure/captain,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"mt" = (
+/obj/structure/flora/junglebush,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"mu" = (
+/obj/machinery/door/window{
+ dir = 1
+ },
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"my" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/lightreplacer,
+/obj/item/storage/box/lights/mixed,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"mE" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"mY" = (
+/obj/structure/flora/rock,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"mZ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ne" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nm" = (
+/obj/structure/flora/junglebush/c,
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"no" = (
+/obj/item/chair,
+/obj/item/reagent_containers/food/drinks/beer,
+/obj/machinery/light/floor,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"np" = (
+/obj/structure/flora/junglebush/c,
+/obj/structure/flora/junglebush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nq" = (
+/turf/open/floor/mineral/titanium/yellow,
+/area/awaymission/jungleresort)
+"nt" = (
+/obj/structure/flora/rock/jungle,
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nv" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nw" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nD" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nJ" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"nU" = (
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"od" = (
+/obj/effect/decal/cleanable/blood/tracks,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"og" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"oj" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"op" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"ot" = (
+/obj/structure/table/wood,
+/obj/item/canvas/nineteenXnineteen,
+/obj/item/canvas/nineteenXnineteen,
+/obj/item/canvas/nineteenXnineteen,
+/obj/item/canvas/nineteenXnineteen,
+/obj/item/toy/crayon/spraycan,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ow" = (
+/obj/structure/flora/tree/jungle,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"oW" = (
+/obj/effect/decal/remains/human,
+/obj/item/clothing/head/collectable/petehat/gang,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"oX" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"oZ" = (
+/turf/closed/indestructible/riveted/boss,
+/area/awaymission/jungleresort)
+"pm" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"pn" = (
+/obj/structure/toilet/secret/low_loot,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"po" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"px" = (
+/obj/machinery/light,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"pC" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/rock/pile,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"pK" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/rock,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"pN" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"pP" = (
+/obj/structure/sign/warning,
+/turf/closed/mineral/random/labormineral/jungle,
+/area/awaymission/jungleresort)
+"pQ" = (
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"pT" = (
+/obj/structure/table,
+/turf/open/floor/mineral/titanium/white,
+/area/awaymission/jungleresort)
+"pU" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"qa" = (
+/turf/open/floor/plating/rust,
+/area/awaymission/jungleresort)
+"qg" = (
+/turf/closed/wall/mineral/titanium,
+/area/awaymission/jungleresort)
+"qi" = (
+/obj/effect/turf_decal/sand/plating,
+/obj/structure/closet/crate/secure/loot,
+/obj/item/clothing/head/collectable/beret,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"qr" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"qs" = (
+/obj/item/storage/toolbox/syndicate,
+/obj/structure/table/wood/fancy,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"qz" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"qC" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"qG" = (
+/obj/item/storage/toolbox/emergency,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/table/wood/fancy,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"rd" = (
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"rg" = (
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"rm" = (
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"ro" = (
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"rt" = (
+/obj/structure/chair/sofa/corner{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"rv" = (
+/obj/item/statuebust,
+/obj/structure/table/wood/fancy,
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"rx" = (
+/obj/structure/flora/junglebush,
+/obj/structure/flora/junglebush/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"rF" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"rH" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"rP" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"rQ" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"rS" = (
+/obj/structure/table/wood,
+/obj/item/toy/plush/beeplushie,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"rT" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"se" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"sh" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"sn" = (
+/obj/structure/closet/secure_closet/freezer/fridge,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"so" = (
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"sq" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"st" = (
+/obj/structure/barricade/wooden,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"sD" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/baguette,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"sQ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"sR" = (
+/obj/structure/table/wood,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/flashlight/lamp,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"sS" = (
+/obj/structure/table/wood,
+/obj/item/storage/fancy/cigarettes/cigpack_robustgold,
+/obj/item/clothing/mask/cigarette/robustgold,
+/obj/item/lighter,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"td" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ti" = (
+/obj/effect/turf_decal/sand/plating,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"tn" = (
+/obj/structure/flora/rock/pile,
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"tu" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/junglebush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"tx" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Bar Backroom"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"tC" = (
+/obj/structure/table/wood,
+/obj/item/storage/firstaid/regular,
+/obj/item/storage/firstaid/o2,
+/obj/item/storage/firstaid/fire,
+/obj/item/storage/firstaid/brute,
+/obj/item/storage/firstaid/toxin,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"tH" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"tK" = (
+/obj/structure/chair/wood{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"tS" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ResortCabin1";
+ name = "Resort Cabin 1"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"tT" = (
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"tZ" = (
+/obj/structure/flora/rock/pile,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uc" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ue" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uh" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"uj" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ResortCabin3";
+ name = "Resort Cabin 3"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"ur" = (
+/obj/structure/flora/tree/jungle,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"us" = (
+/obj/structure/flora/rock,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uu" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uv" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"ux" = (
+/obj/item/stack/sheet/animalhide/monkey,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"uy" = (
+/obj/structure/chair/stool,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"uC" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uG" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"uO" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uS" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uT" = (
+/obj/structure/table/wood,
+/obj/item/folder/blue,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"uW" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uX" = (
+/obj/structure/flora/junglebush/large,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"uZ" = (
+/obj/machinery/vending/boozeomat,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"vc" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"vl" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"vq" = (
+/obj/structure/barricade/wooden,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"vs" = (
+/obj/structure/table/wood,
+/obj/machinery/button/door{
+ id = "ResortCabin4";
+ normaldoorcontrol = 1;
+ pixel_y = 25;
+ specialfunctions = 4
+ },
+/obj/effect/spawner/lootdrop/glowstick,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"vw" = (
+/obj/machinery/door/airlock/wood{
+ name = "Abandoned Cabin"
+ },
+/obj/structure/barricade/wooden,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"vx" = (
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"vy" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"vK" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"vN" = (
+/obj/structure/chair/wood{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"vZ" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Bar"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"wj" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wm" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wo" = (
+/obj/structure/table/wood/fancy,
+/obj/item/storage/toolbox/gold_fake,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"wq" = (
+/obj/structure/table/wood,
+/obj/item/paper_bin,
+/obj/item/pen/fountain,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"ws" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wv" = (
+/obj/structure/bed,
+/obj/effect/spawner/lootdrop/bedsheet,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"ww" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/clothing/suit/hooded/wintercoat/captain,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"wF" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wG" = (
+/obj/structure/flora/rock/jungle,
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wH" = (
+/obj/structure/flora/junglebush/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wJ" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"wS" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center/cracked,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"wV" = (
+/obj/structure/chair/wood,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"wZ" = (
+/obj/structure/chair/comfy/brown{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"xr" = (
+/obj/structure/table/wood,
+/obj/structure/bedsheetbin/color,
+/obj/item/toy/figure/assistant,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"xD" = (
+/obj/structure/flora/rock/pile,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"xH" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"xL" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"xQ" = (
+/obj/machinery/door/airlock/wood,
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"xS" = (
+/obj/structure/chair/wood,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"xU" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"xV" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"yb" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"yi" = (
+/obj/item/grown/log/tree,
+/obj/item/lighter,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"yr" = (
+/obj/structure/statue/sandstone/venus,
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"yu" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"yx" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"yy" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"yz" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Manager's Office"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"yC" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"yF" = (
+/obj/machinery/vending/cola/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"yJ" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"yK" = (
+/obj/effect/spawner/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"yL" = (
+/obj/machinery/vending/snack/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"yM" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/light,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"yQ" = (
+/obj/effect/spawner/lootdrop/cig_packs,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"yS" = (
+/obj/machinery/door/window,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"yW" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/machinery/light,
+/turf/open/floor/mineral/titanium/blue,
+/area/awaymission/jungleresort)
+"yX" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/salad/validsalad,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"yY" = (
+/obj/machinery/door/airlock/shuttle,
+/turf/open/floor/mineral/titanium,
+/area/awaymission/jungleresort)
+"zl" = (
+/obj/structure/shuttle/engine/heater,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"zr" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"zx" = (
+/obj/structure/flora/junglebush/b,
+/obj/structure/flora/rock,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"zA" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"zC" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"zH" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/awaymission/jungleresort)
+"zI" = (
+/obj/structure/dresser,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"zK" = (
+/obj/structure/flora/rock/jungle,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"zP" = (
+/obj/structure/flora/tree/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"zV" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"zY" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Aa" = (
+/obj/structure/flora/junglebush/c,
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ag" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Office"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ah" = (
+/obj/structure/table/wood/poker,
+/obj/item/dice/d6,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ak" = (
+/obj/structure/flora/junglebush/large,
+/obj/structure/flora/rock/jungle,
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"An" = (
+/obj/effect/spawner/lootdrop/bedsheet,
+/obj/structure/bed,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ar" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Az" = (
+/obj/structure/flora/junglebush/b,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"AC" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"AF" = (
+/obj/structure/flora/junglebush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"AR" = (
+/turf/closed/mineral/random/labormineral/jungle,
+/area/awaymission/jungleresort)
+"AS" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"AT" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"AU" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/structure/flora/rock,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"AV" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"Bh" = (
+/obj/machinery/light/floor,
+/obj/structure/easel,
+/obj/item/canvas/nineteenXnineteen,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Bn" = (
+/obj/structure/chair/comfy/brown{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Bp" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Bq" = (
+/obj/machinery/vending/cigarette,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Br" = (
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"BB" = (
+/obj/machinery/door/window,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"BM" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/oil/streak,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"BP" = (
+/obj/structure/dresser,
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"BQ" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"BY" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"BZ" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Cc" = (
+/obj/item/mop,
+/obj/structure/mopbucket,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Co" = (
+/obj/structure/chair/wood/wings,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ct" = (
+/obj/item/kirbyplants/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Cu" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Cv" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/port_gen/pacman/super,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"CA" = (
+/obj/structure/reagent_dispensers/watertank/high,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"CC" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"CH" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"CK" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"CN" = (
+/obj/structure/flora/tree/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"CR" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"CT" = (
+/obj/item/storage/toolbox/greyscale,
+/obj/structure/table/wood/fancy,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"CV" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"CY" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Db" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Di" = (
+/obj/item/storage/toolbox/drone,
+/obj/structure/table/wood/fancy,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"Dj" = (
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"Dr" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Du" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ResortCabin4";
+ name = "Resort Cabin 4"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Dz" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/junglebush/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"DF" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"DL" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"DO" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"DS" = (
+/obj/structure/flora/junglebush/large,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"DU" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/burger/plain,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ei" = (
+/obj/structure/table/wood,
+/obj/machinery/door/window{
+ dir = 8
+ },
+/obj/item/paper/crumpled/awaymissions/jungleresort/notice,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"El" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Eq" = (
+/obj/structure/frame/computer,
+/obj/effect/decal/cleanable/glass,
+/obj/item/shard,
+/turf/open/floor/mineral/titanium/yellow,
+/area/awaymission/jungleresort)
+"Et" = (
+/obj/structure/toilet/secret/low_loot{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Eu" = (
+/obj/structure/table/wood,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/item/toy/plush/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ex" = (
+/obj/structure/table/wood/fancy,
+/obj/item/candle/infinite,
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"Ey" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"EA" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"EL" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/donkpockets,
+/obj/item/storage/box/donkpockets,
+/obj/item/camera,
+/obj/item/camera_film,
+/obj/item/storage/toolbox/mechanical,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"EO" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"EP" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Cafe"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"EQ" = (
+/obj/structure/flora/tree/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"EV" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/junglebush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Fd" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Fl" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Fq" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Fr" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Fz" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"FL" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"FN" = (
+/obj/structure/flora/tree/jungle,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"FO" = (
+/obj/machinery/door/airlock/wood,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"FP" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"FQ" = (
+/obj/structure/flora/ausbushes/reedbush,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"FR" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"FT" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"FV" = (
+/obj/machinery/door/airlock/freezer{
+ name = "Freezer"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"FX" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Gd" = (
+/obj/structure/chair/pew{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"Gk" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Gl" = (
+/obj/structure/sign/poster/random,
+/turf/closed/wall/mineral/wood,
+/area/awaymission/jungleresort)
+"Gn" = (
+/obj/machinery/light,
+/obj/structure/closet/crate/bin,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Gu" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Gv" = (
+/obj/structure/table/wood,
+/obj/item/toy/figure/bartender,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Gz" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"GA" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"GD" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"GN" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"GU" = (
+/obj/item/reagent_containers/food/snacks/sausage,
+/obj/item/reagent_containers/food/snacks/sausage,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ha" = (
+/obj/structure/table/wood,
+/obj/item/dualsaber/toy,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Hg" = (
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"Hk" = (
+/obj/structure/flora/grass/jungle,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Hm" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Hs" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Hw" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Arrivals"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Hy" = (
+/obj/structure/flora/rock/pile,
+/mob/living/carbon/monkey,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"HC" = (
+/obj/structure/bonfire/dense,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"HD" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"HI" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ResortCabin2";
+ name = "Resort Cabin 2"
+ },
+/obj/structure/barricade/wooden,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"HQ" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ih" = (
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Ii" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ij" = (
+/obj/structure/chair/pew/left{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"Ir" = (
+/obj/effect/decal/cleanable/blood/gibs/human/down,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Iw" = (
+/obj/structure/table/wood,
+/obj/effect/spawner/lootdrop/space_cash,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"IC" = (
+/obj/structure/flora/rock/pile,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"IF" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"IK" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/barricade/wooden,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"IO" = (
+/obj/structure/barricade/wooden,
+/obj/machinery/door/airlock/wood{
+ id_tag = "ResortCabin5";
+ name = "Resort Cabin 5"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"IR" = (
+/obj/structure/flora/junglebush/large,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"IW" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Jb" = (
+/obj/structure/flora/tree/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Jc" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Jd" = (
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Jf" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Jh" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Jj" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Jo" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Jq" = (
+/obj/structure/table/wood,
+/obj/machinery/microwave,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Jt" = (
+/obj/structure/chair/wood/wings{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Jv" = (
+/obj/structure/filingcabinet,
+/obj/structure/window/reinforced,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"Jz" = (
+/obj/effect/decal/cleanable/blood/splats,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"JF" = (
+/turf/open/floor/plasteel/dark,
+/area/awaymission/jungleresort)
+"JG" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/gibs/human/up,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"JK" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"JQ" = (
+/obj/item/toy/plush/carpplushie,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"JU" = (
+/obj/structure/stone_tile/slab/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"JZ" = (
+/obj/structure/flora/tree/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ka" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Kk" = (
+/obj/machinery/light/floor,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"Kl" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ko" = (
+/turf/closed/wall/r_wall,
+/area/awaymission/jungleresort)
+"Kr" = (
+/obj/structure/flora/junglebush/b,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Kw" = (
+/obj/structure/closet/secure_closet/freezer/kitchen,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"KC" = (
+/obj/machinery/telecomms/relay/preset/mining,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/open/floor/circuit,
+/area/awaymission/jungleresort)
+"KJ" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"KM" = (
+/mob/living/carbon/monkey,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"KO" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"KR" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"KX" = (
+/obj/structure/flora/rock,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"KY" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/kirbyplants/random,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"KZ" = (
+/obj/structure/flora/junglebush,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"La" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Ll" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Lp" = (
+/obj/structure/barricade/wooden,
+/turf/open/floor/plating/asteroid,
+/area/awaymission/jungleresort)
+"Lr" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/center/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Lt" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Lu" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Lv" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"Ly" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"LE" = (
+/obj/structure/reagent_dispensers/keg/gargle,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"LK" = (
+/obj/structure/chair/pew/right{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"LL" = (
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/obj/machinery/power/smes{
+ charge = 1.5e+006;
+ input_level = 30000;
+ inputting = 0;
+ output_level = 7000
+ },
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"LR" = (
+/mob/living/simple_animal/hostile/jungle/leaper/boss,
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"LU" = (
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"LW" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Mc" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"Mf" = (
+/obj/structure/flora/junglebush/large,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Mh" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/bottle/applejack/empty,
+/obj/item/reagent_containers/food/drinks/drinkingglass,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Mp" = (
+/turf/closed/wall/mineral/wood,
+/area/awaymission/jungleresort)
+"Mx" = (
+/obj/structure/chair/sofa/right,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"MD" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"MF" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"MJ" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"MP" = (
+/turf/open/floor/plasteel/freezer,
+/area/awaymission/jungleresort)
+"MS" = (
+/obj/structure/flora/rock/pile,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"MW" = (
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"MX" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"MY" = (
+/obj/structure/barricade/wooden,
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"Nd" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Nf" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Ni" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Nn" = (
+/obj/machinery/power/apc/auto_name/west,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Nx" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/butteredtoast,
+/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"NF" = (
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"NU" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"Oe" = (
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ol" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Or" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ou" = (
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"Oz" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"OA" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"OB" = (
+/obj/item/storage/book/bible,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"OU" = (
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Pb" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Pc" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Pd" = (
+/obj/structure/flora/ausbushes/fullgrass,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Pg" = (
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Pp" = (
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Pu" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Pv" = (
+/obj/structure/flora/junglebush/large,
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PB" = (
+/obj/structure/flora/junglebush,
+/obj/structure/flora/grass/jungle/b,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PD" = (
+/obj/structure/flora/rock/jungle,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PL" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PM" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PN" = (
+/turf/open/floor/mineral/titanium,
+/area/awaymission/jungleresort)
+"PP" = (
+/obj/structure/flora/rock,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PS" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PT" = (
+/obj/structure/flora/rock/pile,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"PW" = (
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"PY" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Qa" = (
+/obj/effect/decal/cleanable/blood/gibs/limb,
+/obj/effect/decal/cleanable/blood/gibs/torso,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Qc" = (
+/obj/structure/closet/secure_closet/freezer/meat,
+/turf/open/floor/plasteel/freezer,
+/area/awaymission/jungleresort)
+"Qp" = (
+/turf/open/floor/plating/asteroid,
+/area/awaymission/jungleresort)
+"Qr" = (
+/obj/structure/chair/sofa{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Qt" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"Qz" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding/cracked,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"QA" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"QB" = (
+/obj/effect/turf_decal/weather/dirt,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"QC" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"QE" = (
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"QI" = (
+/obj/machinery/nuclearbomb/beer,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"QO" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"QX" = (
+/obj/structure/flora/junglebush,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Rd" = (
+/obj/structure/closet/crate{
+ icon_state = "crateopen"
+ },
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/storage/toolbox/electrical,
+/obj/item/wrench,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/stack/sheet/mineral/uranium,
+/obj/item/clothing/glasses/meson/engine,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Rm" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Rn" = (
+/obj/structure/table/wood,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/item/folder,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"Ro" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Rp" = (
+/obj/structure/flora/ausbushes/reedbush,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"RD" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"RI" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/condiment/flour,
+/obj/item/kitchen/rollingpin,
+/obj/item/reagent_containers/food/condiment/saltshaker,
+/obj/item/reagent_containers/food/condiment/peppermill,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"RP" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/gibs/torso,
+/obj/item/clothing/suit/curator,
+/obj/item/clothing/under/rank/civilian/curator/treasure_hunter,
+/obj/item/clothing/head/fedora/curator,
+/obj/item/clothing/shoes/workboots/mining,
+/obj/item/melee/chainofcommand/jungle,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"RW" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"RX" = (
+/obj/structure/flora/junglebush/c,
+/obj/structure/flora/rock/pile,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Sc" = (
+/obj/structure/flora/rock,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Se" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/beer,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Sh" = (
+/obj/structure/flora/junglebush/large,
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Si" = (
+/obj/effect/decal/cleanable/blood/gibs/limb,
+/obj/structure/stone_tile/surrounding/burnt,
+/obj/effect/decal/remains/human,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Sk" = (
+/obj/machinery/door/airlock/wood{
+ name = "Resort Kitchen"
+ },
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Ss" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"St" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"SD" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"SF" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"SL" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"SO" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/old,
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/item/gun/ballistic/shotgun/sc_pump,
+/obj/item/clothing/suit/armor/vest,
+/obj/item/clothing/head/helmet,
+/obj/item/ammo_casing/shotgun/buckshot,
+/obj/item/ammo_casing/shotgun/buckshot,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"SV" = (
+/obj/machinery/vending/wardrobe/bar_wardrobe,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"SW" = (
+/obj/structure/flora/rock/jungle,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"SZ" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Ta" = (
+/obj/machinery/shower,
+/obj/structure/curtain,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Tm" = (
+/obj/structure/table/wood/poker,
+/obj/effect/spawner/lootdrop/space_cash,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Tv" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Tw" = (
+/obj/structure/flora/tree/jungle,
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Tx" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ty" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"TC" = (
+/obj/machinery/deepfryer,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"TD" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"TG" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"TI" = (
+/obj/structure/barricade/wooden,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"TM" = (
+/obj/structure/table/wood/fancy,
+/obj/item/candle/infinite,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"TR" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/donkpockets,
+/obj/item/storage/box/donkpockets,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"TT" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"TU" = (
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid,
+/area/awaymission/jungleresort)
+"TX" = (
+/obj/structure/table/wood,
+/obj/machinery/button/door{
+ id = "ResortCabin5";
+ normaldoorcontrol = 1;
+ pixel_y = 25;
+ specialfunctions = 4
+ },
+/obj/item/poster/random_contraband,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Uc" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ud" = (
+/obj/machinery/light/floor,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Ue" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Uo" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/innards,
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/item/fireaxe,
+/obj/item/clothing/head/hardhat/red,
+/obj/item/clothing/shoes/workboots,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Us" = (
+/obj/machinery/vending/clothing,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Uv" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"UB" = (
+/obj/structure/flora/junglebush,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"UH" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Vb" = (
+/obj/structure/chair/stool,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Ve" = (
+/obj/structure/table/wood,
+/obj/machinery/door/window{
+ dir = 8
+ },
+/obj/item/paper_bin,
+/obj/item/pen,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"Vg" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Vh" = (
+/obj/item/storage/toolbox/electrical,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/table/wood/fancy,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"Vm" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"VI" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "AbandonedCabinDorm";
+ name = "Abandoned Cabin Dorm"
+ },
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"VJ" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"VK" = (
+/obj/structure/table/wood,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/stamp,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"VL" = (
+/obj/structure/rack,
+/obj/item/storage/backpack/satchel/explorer,
+/obj/item/gps/mining,
+/obj/item/radio,
+/obj/item/flashlight,
+/obj/item/flashlight/flare,
+/obj/item/pickaxe,
+/obj/item/mining_scanner,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"VP" = (
+/obj/structure/flora/junglebush/b,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"VU" = (
+/obj/structure/flora/rock/pile/largejungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Wa" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 10
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Wd" = (
+/obj/structure/shuttle/engine/propulsion,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Wh" = (
+/obj/structure/flora/junglebush/large,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Wi" = (
+/obj/structure/chair/stool/bar,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Wj" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Wl" = (
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Wo" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/structure/flora/grass/jungle,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"WD" = (
+/obj/effect/decal/remains/human,
+/obj/item/clothing/head/collectable/slime,
+/turf/open/floor/plating/rust,
+/area/awaymission/jungleresort)
+"WE" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"WQ" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/gibs/torso,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"WU" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Xa" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Xd" = (
+/obj/structure/flora/grass/jungle,
+/obj/machinery/light,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Xh" = (
+/obj/structure/flora/rock/jungle,
+/obj/structure/flora/junglebush,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Xj" = (
+/turf/closed/wall,
+/area/awaymission/jungleresort)
+"Xm" = (
+/obj/structure/closet/crate/bin,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"Xo" = (
+/obj/structure/flora/junglebush/c,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"Xq" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/open/floor/circuit,
+/area/awaymission/jungleresort)
+"Xs" = (
+/obj/effect/decal/cleanable/blood/gibs/torso,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Xz" = (
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"XB" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"XC" = (
+/obj/item/grown/log/tree,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"XK" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"XM" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/salad/jungle,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"XR" = (
+/obj/structure/flora/tree/jungle/small,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"XV" = (
+/obj/machinery/shower{
+ dir = 1
+ },
+/obj/structure/curtain,
+/turf/open/floor/wood,
+/area/awaymission/jungleresort)
+"XY" = (
+/obj/structure/chair/office/dark{
+ dir = 8
+ },
+/obj/item/toy/figure/ian,
+/turf/open/floor/carpet/blue,
+/area/awaymission/jungleresort)
+"XZ" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/machinery/power/port_gen/pacman/super,
+/turf/open/floor/plating,
+/area/awaymission/jungleresort)
+"Yb" = (
+/obj/structure/bonfire/dense,
+/obj/item/melee/roastingstick,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Yd" = (
+/obj/item/storage/box/marshmallow,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Ye" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/toy/figure/syndie,
+/turf/open/floor/carpet/red,
+/area/awaymission/jungleresort)
+"Yf" = (
+/obj/structure/flora/junglebush/c,
+/obj/effect/turf_decal/weather/dirt,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Yg" = (
+/obj/effect/decal/cleanable/blood/gibs/limb,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Yh" = (
+/obj/item/clothing/under/color/grey/glorf,
+/obj/item/clothing/gloves/color/fyellow/old,
+/obj/item/clothing/shoes/sneakers/black,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/head/soft/grey,
+/obj/effect/decal/remains/human,
+/turf/open/floor/carpet,
+/area/awaymission/jungleresort)
+"Ym" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/structure/flora/rock/pile,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"Yp" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Yt" = (
+/obj/structure/kitchenspike,
+/turf/open/floor/plasteel/freezer,
+/area/awaymission/jungleresort)
+"YE" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"YF" = (
+/obj/machinery/gateway/away,
+/turf/open/floor/plating/dirt/dark/jungle,
+/area/awaymission/jungleresort)
+"YJ" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"YK" = (
+/obj/machinery/light/floor,
+/turf/open/water/jungle,
+/area/awaymission/jungleresort)
+"YM" = (
+/obj/structure/flora/tree/jungle/small,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"YP" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"YQ" = (
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"YU" = (
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+"YW" = (
+/obj/effect/decal/cleanable/blood/gibs/human/core,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"Zn" = (
+/obj/item/stack/sheet/mineral/wood,
+/obj/effect/decal/cleanable/blood/gibs/human/core,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ZE" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ZH" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/floor/plating/dirt/jungle,
+/area/awaymission/jungleresort)
+"ZV" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/grass,
+/area/awaymission/jungleresort)
+
+(1,1,1) = {"
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+"}
+(2,1,1) = {"
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+"}
+(3,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(4,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(5,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(6,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(7,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(8,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(9,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+oZ
+AR
+oZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(10,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+bv
+Ue
+tT
+oZ
+oZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(11,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+oZ
+oZ
+tT
+RP
+BQ
+aL
+tT
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(12,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+aL
+JU
+Gk
+DF
+SL
+po
+Jz
+JU
+oZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(13,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+tT
+Si
+rg
+uG
+dF
+an
+hX
+ih
+aL
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(14,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+aL
+tT
+po
+VJ
+LR
+FR
+Lt
+tT
+tT
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(15,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+Lr
+JU
+Yg
+jO
+Lv
+hj
+tT
+Nf
+aL
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+rd
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(16,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+oZ
+Uo
+ZE
+ZH
+Fl
+aL
+ez
+SO
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+YQ
+YQ
+ZV
+YQ
+wH
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+wH
+rd
+cn
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(17,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+oZ
+tT
+ap
+YW
+Db
+Ly
+oZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+rF
+Pg
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+kr
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(18,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+aL
+fy
+Dr
+JU
+oZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+vl
+YQ
+AF
+YQ
+vK
+YQ
+YQ
+rd
+aP
+mY
+YQ
+ZV
+Pg
+AF
+YQ
+YQ
+Pg
+rd
+ZV
+vK
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+AF
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(19,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AC
+GD
+oZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+CN
+rF
+aP
+YQ
+YQ
+CN
+YQ
+YQ
+aP
+CN
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+MW
+br
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(20,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+iv
+Qz
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+Pg
+ZV
+YQ
+cV
+Pg
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+MW
+aP
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+wH
+YQ
+rd
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+rd
+ZV
+YQ
+rd
+MW
+Pg
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(21,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+wS
+SZ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+AF
+YQ
+YQ
+YQ
+CN
+rd
+AF
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+cn
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+Pg
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+wH
+YQ
+AF
+ZV
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+aP
+ZV
+rF
+Pv
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+aP
+Wl
+YQ
+rd
+YQ
+AF
+YQ
+YQ
+YQ
+Pg
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(22,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+yJ
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+Wl
+Pg
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+aP
+YQ
+YQ
+Pg
+Wl
+YQ
+YQ
+ZV
+aP
+vK
+VU
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+vK
+wH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+rd
+MW
+aP
+YM
+YQ
+XK
+YQ
+rd
+MW
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+vK
+YQ
+mY
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+ZV
+cn
+YQ
+YQ
+vK
+AF
+ZV
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(23,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+Yp
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YM
+cn
+YQ
+YQ
+YM
+aG
+YQ
+YQ
+MW
+rF
+YQ
+YQ
+YQ
+aP
+rd
+cn
+YQ
+YQ
+wH
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+MW
+YQ
+YQ
+ZV
+ZV
+YQ
+YM
+AF
+YQ
+aP
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+Pg
+cn
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+Pg
+ZV
+rd
+kr
+YQ
+YQ
+rd
+Pg
+YQ
+YQ
+KJ
+Pg
+Xh
+YQ
+YQ
+CN
+AF
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+aP
+YQ
+Pg
+YQ
+YQ
+cn
+YQ
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(24,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+TD
+oZ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+aP
+Wl
+rd
+aP
+Pg
+YQ
+YQ
+Wl
+YQ
+rd
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+YM
+KM
+Pg
+ZV
+AF
+YQ
+YQ
+rd
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+CN
+Wl
+rd
+wH
+YQ
+MW
+YQ
+YQ
+YQ
+YM
+ZV
+cn
+rd
+aP
+YQ
+wH
+AF
+YQ
+YQ
+kr
+aP
+YQ
+YQ
+Wl
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+ar
+YQ
+cn
+wH
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+rd
+YQ
+YQ
+Dz
+ZV
+YQ
+rd
+YQ
+cn
+Wl
+Pg
+YQ
+kr
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+wH
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(25,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+aL
+Xs
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+YQ
+YQ
+YQ
+CN
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+KJ
+YQ
+YQ
+YQ
+CN
+Pg
+aP
+YQ
+YQ
+CN
+rd
+kr
+vK
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+rd
+aP
+YQ
+kr
+YQ
+cn
+aP
+YQ
+YQ
+YQ
+CN
+Pg
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+kr
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+MW
+YQ
+MW
+rd
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+vK
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+MW
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+Wl
+YQ
+rd
+Wl
+aP
+kr
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(26,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+oZ
+tH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+ZV
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+cn
+aP
+wH
+YQ
+YQ
+YQ
+wH
+YQ
+AF
+Pg
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+rd
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+YQ
+ZV
+Wl
+Pg
+VU
+YQ
+kr
+rd
+YQ
+wH
+YQ
+vK
+YQ
+YQ
+YQ
+MW
+YQ
+MW
+YQ
+rF
+Dz
+YQ
+YQ
+Wl
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+ZV
+YQ
+YQ
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(27,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+ak
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+MW
+YQ
+YQ
+YM
+cn
+rF
+YQ
+YQ
+YQ
+CN
+Wl
+kr
+rd
+YQ
+AF
+YQ
+Wl
+rd
+MW
+Pg
+aP
+YQ
+YQ
+YQ
+YQ
+kr
+mY
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+YQ
+Wl
+YQ
+CN
+YQ
+kr
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Fz
+Wl
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+YQ
+rd
+Wl
+YQ
+AF
+Pg
+Wl
+YQ
+YQ
+rd
+YQ
+aP
+YQ
+YQ
+pN
+YQ
+Wl
+aP
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+YQ
+YQ
+YM
+kr
+aP
+YQ
+YQ
+CN
+mY
+Pg
+aP
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(28,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+rd
+AF
+YQ
+YQ
+wH
+Wl
+YQ
+wH
+YQ
+ZV
+Pg
+vK
+YQ
+MW
+YQ
+CN
+YQ
+YQ
+YQ
+YM
+YQ
+AF
+YQ
+aP
+Pg
+YQ
+YQ
+YQ
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+rd
+YQ
+YQ
+YQ
+CN
+MW
+YQ
+kr
+YQ
+Wl
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+wH
+YQ
+YQ
+YQ
+YQ
+aP
+rd
+Wl
+YQ
+Wl
+rF
+Pg
+wH
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(29,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+io
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Wl
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+Pg
+PB
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+wH
+Pg
+cn
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+rd
+MW
+YQ
+YQ
+CN
+YQ
+Wl
+kr
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+YM
+YQ
+YQ
+wH
+Pg
+vK
+YQ
+YQ
+AF
+Wl
+rd
+YQ
+YQ
+YQ
+CN
+AF
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+ZV
+YQ
+YM
+Wl
+YQ
+YQ
+rd
+kr
+YQ
+YQ
+AF
+ZV
+YQ
+MW
+YQ
+MW
+cn
+rd
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YM
+rd
+AF
+YQ
+YQ
+mY
+YQ
+cn
+YQ
+AF
+YQ
+VU
+rd
+cn
+YQ
+YQ
+Wl
+CN
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(30,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+AT
+io
+JG
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+kr
+YQ
+YQ
+YQ
+aP
+YQ
+cn
+YQ
+aP
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+aP
+YQ
+rd
+YQ
+Wl
+YQ
+kr
+YQ
+YQ
+YQ
+Wl
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+AF
+YQ
+aP
+YQ
+YQ
+YQ
+rd
+Pg
+YQ
+YQ
+YQ
+AF
+YQ
+aP
+YQ
+YQ
+YQ
+CN
+ZV
+aP
+YQ
+YQ
+cn
+YQ
+YQ
+MW
+CN
+AF
+Wl
+YQ
+YQ
+CN
+YQ
+rd
+YQ
+YQ
+AF
+wH
+YQ
+aP
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+Pg
+np
+YQ
+wH
+rd
+kr
+YQ
+AF
+YQ
+vK
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(31,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+VJ
+FR
+io
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+cn
+YQ
+YQ
+YQ
+CN
+Pg
+rd
+YQ
+rd
+Wl
+YQ
+kr
+YQ
+Wl
+cn
+wH
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+rd
+YQ
+YQ
+YM
+Pg
+cn
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+AF
+YQ
+MW
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+Wl
+YQ
+rd
+AF
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+wH
+aP
+YQ
+YQ
+YQ
+CN
+vK
+rd
+YQ
+YM
+Pg
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+YQ
+CN
+rd
+cn
+wH
+YQ
+YQ
+wH
+rd
+aP
+YQ
+rd
+YQ
+ZV
+YQ
+YQ
+YQ
+aP
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(32,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+io
+Qa
+io
+FL
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rF
+YQ
+aP
+Wl
+rd
+YQ
+YQ
+YM
+AF
+YQ
+YQ
+rd
+YQ
+AF
+YQ
+mY
+mY
+YQ
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+aP
+YQ
+YQ
+YQ
+AF
+YQ
+kr
+ZV
+YQ
+Pg
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+wH
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+cn
+rd
+MW
+YQ
+YQ
+YQ
+YQ
+YM
+aP
+ZV
+YQ
+YQ
+YQ
+CN
+Pg
+AF
+rd
+mY
+YQ
+YQ
+YQ
+rd
+Wl
+ZV
+AF
+YQ
+rd
+rd
+YQ
+Wl
+Ka
+kr
+YQ
+YQ
+AF
+cn
+Wl
+YQ
+YQ
+YQ
+Pg
+YQ
+Wl
+YQ
+YQ
+Hy
+kr
+YQ
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(33,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+sq
+io
+io
+LU
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+np
+YQ
+ZV
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+CN
+MW
+aP
+YQ
+YQ
+CN
+rd
+AF
+YQ
+YQ
+ZV
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+rd
+YQ
+Wl
+rd
+YQ
+YQ
+KM
+YQ
+aP
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+wH
+rd
+Wl
+YQ
+YQ
+rd
+YQ
+kr
+YQ
+YQ
+Pg
+YQ
+YQ
+YM
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+Ey
+du
+uO
+YQ
+mY
+YQ
+rd
+YQ
+Pg
+cn
+MW
+YQ
+YQ
+aP
+CN
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+pU
+PT
+Fd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(34,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Zn
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+AF
+YQ
+MW
+YQ
+Wl
+ZV
+cn
+YQ
+Wl
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+mY
+YQ
+kr
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+CN
+Pg
+AF
+YQ
+YQ
+CN
+MW
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+MW
+YQ
+YQ
+Lu
+io
+du
+io
+jy
+YQ
+MW
+YQ
+CN
+AF
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+Pg
+Wl
+YQ
+YQ
+YQ
+rd
+IR
+FX
+du
+Ou
+cA
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(35,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+st
+st
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+VU
+aP
+Pg
+cn
+rd
+YQ
+rd
+Pg
+ZV
+kr
+aP
+Mp
+BP
+Xz
+eD
+Mp
+gK
+Eu
+Mp
+aP
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YM
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+Wl
+aP
+YQ
+AF
+Pg
+cn
+YQ
+AF
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+Wo
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+wH
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+hw
+du
+io
+JQ
+du
+du
+DL
+YQ
+YQ
+YQ
+rd
+YQ
+vK
+AF
+YQ
+kr
+ZV
+cn
+YQ
+AF
+YQ
+cn
+rd
+YQ
+mE
+du
+Xa
+La
+uG
+QA
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(36,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+st
+Ir
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+rd
+MW
+YQ
+Pg
+kr
+YQ
+YQ
+rd
+kr
+YQ
+YQ
+YQ
+Tw
+YQ
+AF
+YQ
+Mp
+iL
+Xz
+Xz
+VI
+Jd
+Jd
+Mp
+YQ
+kr
+YQ
+AF
+rd
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+wH
+vK
+Wl
+YQ
+Wl
+YQ
+CN
+YQ
+np
+AF
+rF
+MW
+YQ
+cn
+YQ
+YQ
+YQ
+YM
+cn
+Xj
+Xj
+Xj
+Xj
+Xj
+Xj
+Xj
+YQ
+CN
+js
+du
+Lv
+io
+KO
+cn
+wH
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+aP
+Wl
+YQ
+YQ
+aP
+CN
+vK
+MW
+Ka
+XB
+io
+FN
+uG
+QA
+pQ
+pQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(37,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+LU
+st
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+rd
+Mp
+Xz
+Xz
+Ye
+Mp
+Jd
+Jd
+Mp
+cJ
+Ka
+YQ
+Ka
+CN
+Wl
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+CN
+vK
+cn
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+Xj
+my
+Nn
+BM
+Ih
+CA
+Xj
+YQ
+FT
+du
+io
+du
+io
+se
+YQ
+YQ
+YQ
+Pg
+YQ
+YQ
+wH
+YQ
+wH
+cn
+YQ
+YQ
+YQ
+Pg
+wH
+XB
+du
+io
+du
+uG
+pQ
+pQ
+AV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(38,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+AT
+io
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+cn
+rd
+Wl
+YQ
+YQ
+vK
+YQ
+AF
+aP
+rd
+cn
+YQ
+YQ
+CN
+Mp
+xQ
+Gl
+Mp
+Mp
+Jd
+ux
+vw
+io
+io
+Fr
+io
+DL
+Ka
+AF
+YQ
+aP
+cn
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+rF
+cn
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+YQ
+YQ
+Wl
+rd
+Xj
+LL
+Pc
+Ih
+Ih
+Xq
+Xj
+YQ
+YQ
+uS
+du
+io
+jh
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+AF
+Pg
+rd
+YQ
+YQ
+YQ
+YM
+AF
+Ka
+XB
+io
+bp
+uG
+QA
+pQ
+pQ
+EA
+bp
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(39,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+uG
+pQ
+dF
+io
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+aP
+YQ
+YM
+Pg
+kr
+YQ
+YQ
+YM
+aP
+YQ
+YQ
+Pg
+Mp
+Et
+Mp
+Jq
+CH
+Jd
+Jd
+Mp
+zC
+sQ
+YQ
+LW
+Uv
+io
+DL
+YM
+Pg
+YQ
+Wl
+YQ
+rF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+kr
+YQ
+wH
+rd
+YQ
+YQ
+YQ
+YQ
+rF
+Wl
+YQ
+YQ
+YQ
+Pg
+YQ
+YM
+kr
+YQ
+Pg
+YQ
+rF
+Xj
+XZ
+yb
+Ih
+Ih
+KC
+Xj
+YQ
+YQ
+CN
+eC
+Uc
+rd
+YQ
+YQ
+YQ
+MW
+YQ
+aP
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+Pg
+mE
+du
+io
+Pp
+uG
+pQ
+pQ
+AV
+EA
+kJ
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(40,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+uG
+pQ
+pQ
+pQ
+dF
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+vK
+YQ
+Mp
+Mp
+Gl
+TR
+Dj
+Dj
+Jd
+Mp
+YQ
+YQ
+YQ
+CN
+Pg
+wm
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+MW
+YQ
+wH
+rd
+AF
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+CN
+ZV
+Xj
+Cv
+Ih
+Ih
+Ih
+ef
+Xj
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Fd
+TG
+io
+cX
+uG
+QA
+pQ
+pQ
+EA
+FQ
+go
+NF
+jH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(41,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+uh
+pQ
+pQ
+pQ
+Hg
+ll
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+AF
+wH
+YQ
+YQ
+Wl
+hv
+wH
+vl
+YQ
+YQ
+CN
+MW
+rd
+Mp
+Ct
+Jd
+Jd
+Dj
+Dj
+Jd
+IK
+YQ
+YQ
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+Wl
+YQ
+mY
+AF
+cn
+YQ
+ZV
+Wl
+YQ
+YQ
+rd
+Pg
+AF
+YQ
+VU
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+YQ
+rd
+Xj
+Rd
+Ih
+Ih
+Ih
+Cc
+Xj
+Pg
+YQ
+YQ
+YQ
+kr
+YQ
+wH
+Pg
+YQ
+YQ
+YQ
+CN
+cn
+wH
+Wl
+PT
+zY
+Xa
+Ou
+SW
+uG
+pQ
+pQ
+AV
+EA
+io
+io
+zP
+fX
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(42,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+uG
+pQ
+pQ
+pQ
+pQ
+Hg
+WQ
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+rd
+Pg
+YQ
+YQ
+KM
+YQ
+Pg
+YQ
+YQ
+YQ
+ZV
+cn
+YQ
+Mp
+rS
+Jd
+PW
+Dj
+Dj
+Jd
+IK
+wH
+YQ
+rd
+kr
+Wl
+YQ
+YQ
+Tw
+rd
+wH
+YQ
+YQ
+MW
+kr
+Pg
+YQ
+YQ
+wH
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+rd
+KM
+YQ
+YQ
+YQ
+YQ
+ZV
+YQ
+YQ
+YM
+YQ
+Xj
+Xj
+Xj
+mg
+Xj
+Xj
+Xj
+YQ
+wH
+Wl
+YQ
+YQ
+YQ
+YQ
+YM
+wH
+YQ
+YQ
+YQ
+YQ
+Ka
+FX
+iG
+du
+Rp
+uG
+QA
+pQ
+pQ
+EA
+kJ
+du
+io
+Jh
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(43,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+uh
+pQ
+pQ
+pQ
+pQ
+pQ
+dF
+ak
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Fz
+mY
+aP
+MW
+cn
+rd
+YQ
+YM
+rF
+AF
+YQ
+YQ
+wH
+Mp
+im
+Jd
+lB
+Dj
+Dj
+aA
+Mp
+YQ
+YQ
+YM
+rd
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+kr
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+is
+YQ
+cn
+YQ
+YM
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+Wl
+rF
+YQ
+Kr
+du
+bw
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+cn
+AF
+vK
+kr
+YQ
+Ka
+io
+bp
+NU
+uG
+QA
+pQ
+pQ
+AV
+EA
+io
+io
+zP
+Gz
+YQ
+kr
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(44,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+uh
+pQ
+pQ
+pQ
+pQ
+pQ
+Hg
+io
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+ZV
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+Mp
+Ct
+Jd
+Jd
+Jd
+Jd
+Ha
+Mp
+vK
+YQ
+YQ
+YQ
+vK
+rd
+YQ
+YM
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+Wl
+YQ
+AF
+YQ
+YQ
+YQ
+YM
+rd
+kr
+YQ
+YQ
+YQ
+CN
+Pg
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rQ
+du
+DL
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rF
+MW
+YQ
+Wl
+rT
+XB
+io
+du
+uG
+QA
+pQ
+pQ
+AV
+EA
+bp
+du
+io
+RD
+YQ
+YQ
+wH
+aP
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(45,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+VJ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+dF
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+aP
+YQ
+YQ
+YQ
+CN
+vK
+YQ
+aP
+Mp
+Mp
+Mp
+IK
+IK
+Mp
+Mp
+Mp
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+Pg
+rF
+kr
+YQ
+YQ
+YQ
+AF
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+rF
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+OU
+du
+DL
+YQ
+CN
+wH
+Wl
+YQ
+YM
+Pg
+Wl
+YQ
+YQ
+Ka
+EQ
+du
+cw
+Rp
+uG
+pQ
+pQ
+AV
+EA
+io
+du
+NF
+ie
+Pb
+vK
+rd
+YQ
+YQ
+CN
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(46,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+VJ
+pQ
+pQ
+pQ
+pQ
+AV
+AV
+AS
+dF
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rF
+rd
+YQ
+YQ
+YQ
+vK
+rd
+YQ
+YQ
+YQ
+Pg
+YQ
+cn
+YQ
+kr
+YQ
+rd
+YQ
+Pg
+ZV
+YQ
+kr
+aP
+cn
+YQ
+Wl
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YM
+Wl
+rd
+YQ
+YQ
+YQ
+Pg
+YQ
+Ka
+Ka
+Ka
+cJ
+Ka
+Ka
+YQ
+CN
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+rd
+YQ
+cn
+wH
+YQ
+YQ
+YQ
+CN
+Uv
+io
+DL
+YQ
+MW
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+Ka
+XB
+du
+du
+Az
+uG
+QA
+pQ
+AV
+EA
+du
+mh
+cH
+RD
+LW
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(47,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+uh
+pQ
+pQ
+EA
+io
+io
+io
+VJ
+dF
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Pg
+cn
+AF
+vK
+ZV
+YQ
+YQ
+rd
+AF
+YQ
+YM
+wH
+YQ
+YQ
+MW
+YQ
+YM
+AF
+YQ
+YQ
+YQ
+YQ
+AF
+kr
+Pg
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+vK
+kr
+YQ
+YQ
+YM
+zY
+iG
+io
+du
+io
+bp
+io
+xH
+Ka
+Rm
+Wl
+YQ
+YQ
+YQ
+Wl
+ZV
+Wl
+Pg
+YQ
+rd
+YQ
+YQ
+og
+OU
+du
+zA
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+Ka
+XB
+FN
+du
+mh
+uG
+QA
+pQ
+AV
+EA
+rm
+io
+io
+yu
+JZ
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+cn
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(48,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+VJ
+AV
+EA
+io
+io
+AR
+AR
+io
+VJ
+dF
+od
+io
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+CN
+rd
+Wl
+YQ
+YQ
+Fz
+wH
+YQ
+YQ
+YQ
+VU
+aP
+YQ
+YQ
+CN
+Pg
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YM
+wH
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+Ka
+XB
+Ss
+cH
+uG
+QA
+QA
+dF
+Rp
+du
+io
+kJ
+lf
+YJ
+Ka
+Ka
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+Xd
+Ko
+zK
+io
+io
+Mf
+YQ
+YQ
+YQ
+Ka
+XB
+io
+du
+go
+uG
+QA
+pQ
+pQ
+EA
+kJ
+io
+Xa
+jH
+sQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+wH
+Wl
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(49,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+io
+io
+io
+AR
+AR
+AR
+AR
+io
+JK
+GN
+QA
+dF
+io
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+wH
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+YQ
+rd
+vK
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+AF
+YQ
+rd
+wH
+YQ
+YQ
+wH
+mY
+YQ
+XB
+io
+FN
+so
+uG
+pQ
+pQ
+pQ
+pQ
+QA
+QA
+dF
+bp
+so
+mh
+io
+io
+xH
+Ka
+Ka
+Ka
+YQ
+YQ
+YQ
+CN
+WU
+zY
+io
+io
+DL
+CN
+Ka
+XB
+Br
+io
+SW
+uG
+QA
+pQ
+pQ
+AV
+EA
+io
+io
+zP
+fX
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+kr
+vK
+aP
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(50,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+VJ
+pQ
+QA
+dF
+io
+AR
+AR
+AR
+AR
+AR
+YQ
+YM
+aP
+Pv
+rd
+cn
+YQ
+YQ
+YQ
+rd
+kr
+vl
+rd
+YQ
+AF
+wH
+YQ
+YQ
+YM
+rd
+aP
+YQ
+AF
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+ZV
+cJ
+Ka
+rT
+XB
+io
+FQ
+uG
+QA
+pQ
+pQ
+AV
+AV
+AV
+pQ
+pQ
+pQ
+QA
+QA
+QA
+dF
+io
+FN
+cA
+go
+ro
+Jc
+Ka
+Ka
+Ka
+OU
+du
+io
+io
+DL
+mE
+Xo
+du
+Rp
+uG
+QA
+pQ
+pQ
+AV
+EA
+FQ
+du
+io
+yu
+kr
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+rd
+MW
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(51,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+uh
+pQ
+pQ
+QA
+dF
+io
+io
+AR
+AR
+YQ
+PT
+Fd
+Ka
+YQ
+YQ
+AF
+cn
+cn
+rd
+mY
+MW
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+ZV
+YQ
+rd
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+ZV
+YQ
+cn
+YQ
+Jf
+mE
+io
+io
+du
+FN
+du
+uG
+pQ
+pQ
+pQ
+EA
+ro
+Ou
+Az
+VJ
+AV
+AV
+AV
+AV
+pQ
+pQ
+QA
+QA
+QA
+dF
+FQ
+TT
+io
+io
+io
+Jb
+du
+du
+io
+GA
+cH
+TT
+uG
+QA
+pQ
+pQ
+pQ
+EA
+cw
+kJ
+cH
+Jh
+zC
+YQ
+YQ
+YQ
+Pg
+YQ
+YQ
+aP
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(52,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+pQ
+AV
+QA
+QA
+AR
+AR
+pP
+KZ
+io
+io
+xH
+aI
+YQ
+YQ
+Wo
+YQ
+qC
+YQ
+YQ
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+YQ
+YQ
+Tw
+kr
+rT
+Ka
+Ka
+YU
+Xa
+UB
+du
+uG
+QA
+QA
+QA
+pQ
+pQ
+EA
+io
+bp
+Pp
+sh
+ro
+io
+du
+FN
+TT
+Rp
+VJ
+AV
+pQ
+pQ
+pQ
+pQ
+QA
+QA
+QA
+dF
+du
+NF
+Jd
+Jd
+Jd
+Az
+NU
+uG
+pQ
+pQ
+pQ
+AV
+EA
+io
+io
+yu
+JZ
+MW
+YQ
+YQ
+YQ
+CN
+wH
+AF
+vK
+rd
+mY
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+wH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(53,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+VJ
+AV
+pQ
+pQ
+MY
+QA
+dF
+du
+Rp
+Xa
+xH
+Ka
+rT
+YQ
+YQ
+YQ
+CN
+rd
+Wl
+kr
+YQ
+YQ
+YQ
+Pg
+wH
+YQ
+YQ
+YQ
+Ka
+Ka
+XB
+du
+io
+du
+bp
+mh
+uG
+QA
+pQ
+pQ
+AV
+AV
+AV
+EA
+io
+io
+yu
+sQ
+CN
+sQ
+wm
+sQ
+sQ
+Jo
+io
+Br
+du
+VJ
+AV
+AV
+AV
+pQ
+pQ
+pQ
+pQ
+QA
+QA
+Jd
+Jd
+Jd
+QA
+QA
+pQ
+pQ
+AV
+EA
+io
+Br
+du
+yu
+YQ
+rF
+YQ
+YQ
+YQ
+YQ
+cn
+AF
+YQ
+YQ
+YQ
+cn
+MW
+YQ
+aP
+YQ
+Wl
+cn
+YQ
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(54,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+io
+uh
+MY
+pQ
+pQ
+pQ
+QA
+dF
+io
+du
+io
+FN
+YP
+uW
+Ka
+YQ
+cn
+YQ
+AF
+YQ
+wH
+cn
+rd
+MW
+YQ
+YM
+XB
+io
+du
+bp
+Rp
+uG
+QA
+QA
+QA
+pQ
+AV
+AV
+EA
+Rp
+Pp
+du
+Xo
+Az
+yu
+YQ
+YQ
+YQ
+kr
+AF
+YQ
+YQ
+YQ
+JZ
+nw
+io
+io
+du
+bp
+io
+VJ
+AV
+AV
+AV
+pQ
+pQ
+Jd
+Jd
+Jd
+pQ
+pQ
+pQ
+EA
+io
+io
+FN
+Jh
+Pb
+ZV
+cn
+YQ
+YQ
+YM
+rF
+Wl
+VU
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+rd
+AF
+ZV
+Pg
+kr
+rd
+rF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(55,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+pP
+pQ
+AV
+AV
+pQ
+QA
+hN
+dF
+du
+kJ
+KZ
+io
+xH
+Ka
+aI
+Ka
+Ka
+YQ
+CN
+YQ
+ab
+Ka
+mE
+du
+io
+uG
+QA
+QA
+pQ
+pQ
+pQ
+pQ
+EA
+KZ
+kJ
+Ou
+NU
+yu
+sQ
+sQ
+JZ
+Wl
+cn
+MW
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+AF
+wH
+sQ
+sQ
+sQ
+uS
+io
+io
+io
+FN
+FQ
+zV
+AV
+Jd
+Jd
+Jd
+AV
+AV
+EA
+kJ
+du
+yu
+fX
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+kr
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YM
+YQ
+aP
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(56,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+Xj
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+mh
+aB
+VJ
+pQ
+pQ
+pQ
+QA
+QA
+dF
+io
+du
+du
+Ss
+mh
+io
+xH
+Ka
+Cu
+io
+FN
+aB
+Az
+uG
+pQ
+pQ
+pQ
+AV
+AV
+EA
+du
+Br
+io
+yu
+YQ
+JZ
+YQ
+YQ
+Pg
+vK
+kr
+YQ
+YQ
+YQ
+YQ
+ZV
+Pg
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+ZV
+sQ
+sQ
+sQ
+DS
+px
+Ko
+yC
+Jd
+Jd
+Jd
+nU
+FQ
+cH
+Az
+PP
+cn
+rF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rd
+CN
+rF
+Wl
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+aP
+YQ
+YQ
+YQ
+cn
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(57,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+JF
+Ex
+JF
+Xj
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+io
+cw
+VJ
+AV
+pQ
+pQ
+pQ
+pQ
+QA
+QA
+QA
+QA
+dF
+NF
+Mc
+du
+io
+FQ
+uG
+QA
+QA
+pQ
+pQ
+pQ
+EA
+mh
+Ou
+io
+io
+PY
+wm
+RX
+YQ
+wH
+MW
+Wl
+AF
+ZV
+YQ
+YQ
+Vm
+CN
+MW
+Wl
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+Pg
+rF
+YQ
+YM
+cn
+Wl
+YQ
+Pb
+tn
+PS
+du
+io
+xH
+sQ
+JZ
+sQ
+sQ
+YQ
+CN
+YQ
+kr
+cn
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+vK
+rd
+cn
+Pg
+kr
+wH
+Wl
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(58,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+qG
+Di
+JF
+Ij
+JF
+Ex
+JF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Jo
+io
+bp
+mh
+VJ
+AV
+AV
+AV
+AV
+pQ
+pQ
+pQ
+pQ
+QA
+QA
+QA
+QA
+QA
+pQ
+pQ
+pQ
+AV
+EA
+io
+io
+FN
+yu
+sQ
+sQ
+CN
+YQ
+wJ
+Wl
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+Oe
+Ko
+wj
+YQ
+YQ
+YQ
+YQ
+rF
+MW
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+OU
+io
+io
+du
+BZ
+rF
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+rF
+MW
+YQ
+cn
+YQ
+YQ
+YM
+Pg
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(59,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+CT
+JF
+JF
+JF
+Gd
+Dj
+Ij
+JF
+Ex
+Xj
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+sQ
+nw
+ro
+UB
+Pp
+TT
+FQ
+io
+VJ
+AV
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+AV
+EA
+FQ
+Ss
+io
+PM
+sQ
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+wH
+YQ
+YM
+nJ
+YQ
+YQ
+YQ
+CN
+kr
+wH
+YQ
+YQ
+YQ
+Ii
+YQ
+YQ
+YQ
+YQ
+YQ
+rF
+YQ
+YQ
+Pg
+Jo
+du
+io
+kI
+rd
+YQ
+kr
+rF
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(60,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Ex
+JF
+JF
+Dj
+Dj
+LK
+Dj
+LK
+Dj
+Ij
+JF
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+wH
+sQ
+sQ
+Wh
+fX
+Ni
+io
+Br
+du
+VJ
+AV
+AV
+AV
+AV
+AV
+AV
+EA
+io
+io
+io
+zP
+lr
+MW
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+vK
+vK
+YQ
+YM
+rF
+AF
+Pg
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+og
+YQ
+vK
+AF
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+XB
+du
+yu
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+rd
+Wl
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+rd
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+AF
+YQ
+wH
+YQ
+rF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(61,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+cT
+JF
+Dj
+Dj
+Dj
+Dj
+TM
+Dj
+TM
+Dj
+LK
+JF
+op
+AR
+Xj
+AR
+AR
+AR
+AR
+Qp
+Qp
+TU
+Lp
+AR
+AR
+AR
+vq
+Ka
+Ka
+aI
+PT
+Gz
+Jo
+NF
+Pp
+du
+Az
+io
+SW
+io
+FN
+Ss
+cH
+yu
+us
+Pg
+kf
+vK
+rF
+YQ
+Wl
+YQ
+YQ
+YQ
+td
+Wl
+YQ
+YQ
+ZV
+MW
+YQ
+YQ
+YQ
+YQ
+AF
+rd
+YQ
+YQ
+vK
+YQ
+Xd
+Ko
+RW
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+OU
+du
+io
+DL
+CN
+YQ
+wH
+Pg
+AF
+YQ
+ZV
+vK
+YQ
+YQ
+pN
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+YQ
+YQ
+cn
+rd
+YQ
+Wl
+jL
+kr
+YQ
+YQ
+Wl
+ZV
+YQ
+MW
+KM
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(62,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+yr
+Dj
+Yh
+gN
+Dj
+Dj
+Dj
+Dj
+Dj
+Dj
+Dj
+Dj
+JF
+JF
+Qp
+JF
+Qp
+Qp
+Qp
+Qp
+Qp
+Lp
+AR
+AR
+TU
+Lp
+dC
+io
+io
+du
+io
+qz
+Ka
+CC
+CC
+fX
+Wh
+CC
+CC
+CC
+CC
+Wh
+sQ
+YQ
+Rm
+YQ
+YQ
+YQ
+CN
+wH
+rd
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+rd
+YQ
+Wl
+Jf
+YQ
+Ka
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+nJ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+rF
+wH
+OU
+du
+io
+DL
+YQ
+Wl
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+rF
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+CN
+oj
+YQ
+Pu
+YQ
+mY
+KJ
+YQ
+YQ
+YQ
+CN
+rd
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(63,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+rv
+Dj
+OB
+wo
+Dj
+Dj
+Dj
+Dj
+Dj
+Dj
+Dj
+Dj
+JF
+JF
+JF
+Qp
+JF
+Qp
+Qp
+AR
+AR
+AR
+AR
+AR
+Lp
+TU
+st
+du
+du
+io
+du
+du
+io
+CY
+io
+xH
+ow
+io
+du
+xL
+io
+xH
+CN
+XB
+du
+DL
+YQ
+Ka
+ZV
+AF
+YQ
+YQ
+YQ
+CN
+cn
+MW
+YQ
+Hk
+Pg
+YQ
+YQ
+XB
+du
+WE
+du
+lf
+YQ
+YQ
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+rF
+YQ
+MW
+YQ
+YQ
+YQ
+Ka
+Ka
+Ka
+Jo
+du
+SD
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+Pg
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+CN
+kr
+YQ
+YQ
+MW
+Pg
+wH
+YQ
+jL
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+aP
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(64,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+cT
+JF
+Dj
+Dj
+Dj
+Dj
+TM
+Dj
+TM
+Dj
+Ij
+JF
+EO
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+TI
+Gz
+zC
+sQ
+sQ
+sQ
+JZ
+hl
+du
+io
+MF
+du
+xV
+du
+du
+io
+rP
+du
+yu
+Wl
+rH
+io
+DL
+YM
+wJ
+YQ
+ZV
+wH
+YQ
+kr
+Hs
+Ko
+wj
+YQ
+XB
+du
+io
+io
+io
+io
+Jc
+Ka
+Ka
+Ka
+Ka
+YQ
+Pg
+Ka
+Ka
+AF
+Ka
+Ka
+Ka
+Ll
+io
+du
+du
+DL
+ue
+Ko
+wj
+YQ
+YQ
+kr
+YQ
+YQ
+YM
+Wl
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+AF
+YQ
+YQ
+XC
+YQ
+YQ
+CV
+YQ
+YQ
+rF
+AF
+cn
+kr
+mY
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(65,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+Xj
+Ex
+JF
+JF
+Dj
+Dj
+Ij
+Dj
+Ij
+Dj
+LK
+JF
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+YQ
+cn
+YQ
+aP
+YQ
+YQ
+YQ
+KM
+rd
+bg
+sQ
+YQ
+sQ
+CN
+sQ
+sQ
+XR
+Pg
+sQ
+wH
+rd
+AF
+sQ
+kr
+YQ
+rF
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+nJ
+rF
+OU
+io
+du
+io
+io
+du
+du
+io
+du
+io
+io
+io
+xH
+XB
+du
+io
+WE
+du
+io
+io
+io
+du
+io
+du
+DL
+YQ
+ur
+rF
+Wl
+MW
+YQ
+YQ
+YQ
+rF
+YQ
+rd
+MW
+vK
+Wl
+rd
+YQ
+YQ
+YQ
+Wl
+ZV
+rd
+YQ
+CN
+oj
+XC
+HC
+XC
+jL
+cn
+YQ
+YQ
+CN
+wH
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(66,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+iZ
+JF
+JF
+JF
+Gd
+Dj
+LK
+JF
+Ex
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+vK
+rd
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+wH
+kr
+Wl
+YQ
+aP
+YQ
+YQ
+Wl
+YQ
+YQ
+rd
+rd
+Wl
+YQ
+CN
+YQ
+Wj
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+OU
+du
+io
+du
+YF
+io
+io
+io
+io
+ia
+du
+du
+io
+io
+io
+io
+du
+Ty
+io
+du
+du
+io
+ie
+sQ
+YQ
+YQ
+YQ
+rd
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+kr
+YQ
+ZV
+Pg
+AF
+rF
+YQ
+YQ
+mY
+YQ
+vK
+YQ
+Yd
+XC
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(67,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+Vh
+qs
+JF
+LK
+JF
+Ex
+JF
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Wl
+YQ
+YQ
+vl
+ZV
+Pg
+pK
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+vK
+ZV
+MW
+YQ
+YQ
+CN
+YQ
+YQ
+MW
+Pg
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+IC
+du
+io
+io
+du
+io
+du
+yu
+YQ
+sQ
+Jo
+du
+yu
+nD
+sQ
+sQ
+YQ
+sQ
+sQ
+sQ
+sQ
+YQ
+Wl
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+kr
+cn
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+CV
+YQ
+aP
+YQ
+YQ
+YQ
+CN
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(68,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+Xj
+Xj
+JF
+Ex
+JF
+Xj
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+wH
+rd
+YQ
+Xh
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+ZV
+cn
+wH
+YQ
+YQ
+YQ
+MW
+YQ
+cn
+cn
+rd
+YQ
+Wl
+cn
+YQ
+kr
+rF
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+mY
+YQ
+YQ
+Jo
+io
+io
+io
+io
+yu
+YQ
+rF
+Wl
+YQ
+IF
+YQ
+cn
+Vm
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+YQ
+rF
+Wl
+rd
+vK
+YQ
+YQ
+YQ
+YM
+YQ
+YQ
+rF
+YQ
+rd
+YQ
+YQ
+Wl
+wH
+YQ
+YQ
+CN
+CV
+Pu
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(69,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+Wl
+YQ
+CN
+wH
+Wl
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+vK
+YQ
+Wl
+Wl
+YQ
+YQ
+CN
+Wl
+YQ
+rd
+YQ
+Pg
+rF
+OU
+du
+io
+du
+yu
+Pg
+YQ
+YQ
+YQ
+OU
+io
+xH
+Oe
+Ko
+wj
+YQ
+YQ
+cn
+Pg
+YQ
+YQ
+YQ
+YQ
+YM
+Wl
+vK
+YQ
+YM
+AF
+YQ
+YQ
+YQ
+CN
+vK
+rd
+Wl
+rd
+YQ
+YQ
+cn
+ZV
+MW
+YQ
+rd
+aP
+vK
+YQ
+ZV
+rd
+AF
+cn
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(70,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+aP
+vK
+Pg
+YQ
+YQ
+YQ
+cn
+Wl
+YQ
+AF
+YQ
+CN
+YQ
+AF
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+Wl
+AF
+rF
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+vK
+rF
+YQ
+AF
+vK
+YQ
+YQ
+Wl
+OU
+io
+io
+io
+DL
+YQ
+YQ
+CN
+YQ
+Kr
+io
+du
+bw
+nJ
+wH
+YQ
+YQ
+YQ
+Tw
+wH
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+wH
+cn
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rF
+Wl
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+vK
+YQ
+aP
+YQ
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(71,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+AF
+kr
+YQ
+rd
+AF
+rd
+wH
+kr
+YQ
+YQ
+aP
+YQ
+YQ
+YQ
+vK
+Pg
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+kr
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+wH
+YQ
+cn
+ZV
+Mp
+Mp
+Jj
+Jj
+Mp
+Mp
+YQ
+PS
+du
+io
+DL
+YQ
+YQ
+rd
+YQ
+YQ
+Jo
+io
+KX
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+VP
+Pg
+YQ
+YQ
+YQ
+YQ
+YQ
+ZV
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+AF
+YQ
+YQ
+Pg
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+wH
+ZV
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(72,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YM
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+Tw
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+Pg
+YQ
+YQ
+YQ
+CN
+Pg
+Wl
+YQ
+YQ
+YQ
+jF
+Mp
+gZ
+Jd
+Jd
+tC
+Mp
+wj
+XB
+du
+nv
+YQ
+rF
+YQ
+qg
+qg
+yK
+yY
+yY
+qg
+qg
+Wd
+ZV
+YQ
+YQ
+YQ
+YQ
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+YQ
+YQ
+CN
+rd
+KM
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YM
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+aP
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(73,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+rd
+YQ
+MW
+MW
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+Pg
+YQ
+vK
+Wl
+YQ
+Wl
+YQ
+Wl
+vK
+YQ
+YQ
+YQ
+wH
+Wl
+YQ
+YQ
+YQ
+wH
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+Mp
+gZ
+Jd
+Jd
+xr
+Mp
+XB
+io
+Ty
+io
+DL
+YM
+YQ
+qg
+pT
+nq
+PN
+zH
+qg
+zl
+Wd
+YQ
+Wl
+YQ
+wH
+Mp
+Gl
+TC
+cg
+RI
+Mp
+Qc
+Mp
+Mp
+wj
+YQ
+YQ
+YQ
+MW
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+rF
+rd
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+MW
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(74,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+aP
+YQ
+YQ
+CN
+AF
+Wl
+kr
+aP
+MW
+rd
+rd
+kr
+YQ
+YM
+rF
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+rd
+YQ
+mY
+YQ
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+Pg
+rd
+Mp
+gZ
+Jd
+Jd
+Jd
+Hw
+io
+du
+xH
+sQ
+YQ
+YQ
+vK
+yK
+Eq
+eI
+PN
+yW
+qg
+zl
+Wd
+YQ
+Oe
+Mp
+Mp
+Mp
+Jq
+Jd
+Jd
+Jd
+FV
+MP
+Yt
+Mp
+Wl
+YQ
+YQ
+YQ
+CN
+AF
+Wl
+YQ
+rd
+rd
+YQ
+YQ
+YQ
+YQ
+YM
+ZV
+rd
+VU
+YQ
+YQ
+MW
+YQ
+rF
+kr
+YQ
+cn
+YQ
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(75,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+AF
+YQ
+YQ
+YM
+YQ
+rd
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+rd
+rF
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+MW
+YQ
+Mp
+eK
+Jd
+Jd
+aY
+Mp
+ne
+du
+io
+DL
+YQ
+YQ
+YQ
+qg
+pT
+nq
+PN
+zH
+qg
+zl
+Wd
+YQ
+kr
+Mp
+Kl
+Mp
+gv
+Jd
+Jd
+Kw
+Mp
+MP
+iH
+Mp
+YQ
+YQ
+YQ
+Pg
+YQ
+kr
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+rd
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+rd
+AF
+rd
+YQ
+vK
+YQ
+Wl
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(76,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+rd
+YQ
+kr
+Wl
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+rF
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+wH
+Mp
+Gl
+hy
+Jd
+Us
+Mp
+Ka
+wF
+du
+DL
+MW
+YQ
+kr
+qg
+qg
+yK
+yY
+yY
+qg
+qg
+Wd
+wH
+YQ
+IK
+Jd
+Sk
+Jd
+Jd
+Jd
+sn
+Mp
+MP
+kQ
+Mp
+rF
+cn
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+Wl
+rF
+YQ
+YQ
+YQ
+YQ
+aP
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+AF
+rF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(77,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+aP
+YQ
+Wl
+YQ
+ZV
+Wl
+YQ
+YQ
+CN
+YQ
+VU
+YQ
+rd
+YQ
+ZV
+MW
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+Pg
+YQ
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+Mp
+VL
+Jd
+Jd
+Jd
+Hw
+io
+du
+io
+xH
+YQ
+YQ
+YQ
+YQ
+YQ
+hw
+du
+io
+zr
+AF
+YQ
+YQ
+Pg
+Jj
+Jd
+Gl
+Mp
+sD
+Nx
+Mp
+Gl
+Mp
+Mp
+Mp
+cn
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+kr
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+aP
+wH
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(78,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Tv
+YQ
+ZV
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+ZV
+vK
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+MW
+Pg
+AF
+Wl
+YQ
+YQ
+YQ
+Mp
+VL
+Jd
+Jd
+EL
+Mp
+Jo
+io
+du
+xH
+YM
+rF
+YQ
+YQ
+YQ
+ow
+io
+du
+DL
+YQ
+rd
+YQ
+rF
+Mp
+Jd
+Jd
+Jd
+Wi
+Wi
+CH
+Jd
+dn
+XM
+Mp
+YQ
+YM
+YQ
+YQ
+rd
+YQ
+YQ
+YM
+rd
+MW
+YQ
+YQ
+AF
+cn
+YQ
+YQ
+Wl
+YQ
+YQ
+AF
+rd
+cn
+Pg
+Wl
+YQ
+cn
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(79,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+AF
+kr
+rd
+YQ
+YQ
+YQ
+YQ
+MW
+AF
+YQ
+YQ
+rd
+Pg
+aP
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+KM
+Wl
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+mt
+Mp
+VL
+Jd
+Jd
+Jq
+Mp
+QX
+Jo
+io
+du
+DL
+YQ
+YQ
+YQ
+kr
+YQ
+uc
+io
+FP
+YQ
+YQ
+YQ
+cn
+Mp
+Jd
+Jd
+Bn
+Jd
+Jd
+Jd
+Bn
+Jd
+iR
+Mp
+YQ
+rF
+Wl
+wH
+mY
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+CN
+ZV
+rd
+vK
+AF
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+aP
+YQ
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(80,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Wl
+mY
+YQ
+YQ
+YQ
+cn
+ZV
+YQ
+YM
+rd
+aP
+YQ
+YQ
+CN
+mY
+AF
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+AF
+Wl
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Mp
+Mp
+Jj
+Jj
+Mp
+Mp
+YQ
+rF
+Jo
+io
+DL
+YQ
+Wl
+YQ
+Vm
+tZ
+io
+yu
+YQ
+YQ
+YQ
+CN
+YQ
+IK
+Jd
+dn
+DU
+fW
+Jd
+dn
+ii
+fW
+Jd
+IK
+AF
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rF
+Wl
+wH
+YQ
+aP
+YQ
+kr
+YQ
+cn
+YQ
+YQ
+wH
+vK
+MW
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(81,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+aP
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+MW
+rd
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+vK
+YQ
+wH
+YQ
+YQ
+ZV
+YQ
+YQ
+wH
+XB
+du
+DL
+Pg
+YQ
+gU
+Ko
+Ro
+du
+xH
+YQ
+aP
+Pg
+YQ
+AF
+IK
+Bn
+Jd
+iR
+Jd
+Jd
+Jd
+iR
+Jd
+Jd
+IK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rF
+YQ
+rd
+wH
+AF
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+ZV
+rd
+Wl
+YQ
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(82,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+rd
+aP
+YQ
+YQ
+wH
+Wl
+YQ
+Wo
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+Tw
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+rF
+YQ
+YQ
+Wl
+CN
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+YQ
+OU
+io
+UH
+jj
+Ka
+Ka
+Ka
+nJ
+YU
+du
+io
+xH
+ZV
+YQ
+YQ
+YQ
+Mp
+yX
+wZ
+Jd
+Jd
+Ct
+Xm
+Mx
+dW
+PW
+Jj
+vK
+YQ
+kr
+YQ
+Wl
+rd
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+bn
+aP
+YQ
+YQ
+YQ
+Wl
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(83,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+YQ
+YM
+aP
+rd
+YQ
+Wl
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rd
+vK
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+wH
+YQ
+YQ
+YM
+vK
+YQ
+rx
+YQ
+Wl
+YQ
+YQ
+wH
+rd
+Pg
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+rd
+Sc
+io
+du
+io
+io
+du
+io
+QB
+io
+io
+du
+du
+xH
+Wl
+YQ
+DO
+Mp
+IK
+Gl
+EP
+Mp
+Jj
+Gl
+le
+Qr
+rt
+Mp
+Pg
+rF
+YQ
+YQ
+cn
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+rF
+AF
+Pg
+YQ
+YQ
+AF
+YQ
+YQ
+rd
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(84,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YM
+kr
+YQ
+YQ
+YQ
+wH
+vK
+Pg
+YQ
+YQ
+YQ
+aP
+YQ
+YQ
+CN
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+CN
+cn
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+YQ
+Vm
+cn
+YQ
+YQ
+vK
+OU
+du
+io
+du
+du
+hk
+io
+DL
+Jo
+du
+io
+du
+du
+xH
+Ka
+Ka
+Ka
+ZV
+XB
+io
+St
+YQ
+Mp
+Mp
+IK
+Mp
+Mp
+vc
+YQ
+YQ
+Vm
+CN
+MW
+YQ
+cn
+kr
+YQ
+kr
+vK
+Pg
+YQ
+YQ
+YQ
+Tw
+wH
+YQ
+YQ
+YQ
+CN
+cn
+rF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(85,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+YQ
+ZV
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YM
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+kr
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+tu
+YQ
+YQ
+MW
+AF
+YQ
+YQ
+Wl
+CN
+rF
+ZV
+YQ
+IW
+Ko
+wj
+YQ
+kr
+YQ
+Fd
+uc
+io
+yu
+jb
+YQ
+sQ
+wH
+vK
+sQ
+Jo
+io
+io
+du
+du
+io
+io
+WE
+du
+io
+xH
+uW
+Ka
+Ka
+YQ
+kr
+YQ
+YQ
+wH
+Oe
+Ko
+Gu
+YQ
+YQ
+Tw
+MW
+MW
+YQ
+Wl
+rd
+MW
+YQ
+YQ
+rd
+YQ
+cn
+kr
+YQ
+AU
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(86,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Wl
+wH
+aP
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+MW
+kr
+Pg
+YQ
+aP
+YQ
+CN
+Wl
+YQ
+YQ
+cn
+rF
+AF
+Wl
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+nJ
+MW
+YQ
+YQ
+OU
+du
+io
+du
+DL
+YQ
+YQ
+Wl
+YQ
+YQ
+rF
+rd
+CR
+du
+du
+mZ
+Wa
+du
+io
+io
+du
+io
+du
+du
+io
+Nd
+YJ
+Ka
+uW
+YQ
+YQ
+lJ
+YQ
+YQ
+YQ
+wH
+YQ
+rd
+YQ
+CN
+wH
+cn
+ZV
+YQ
+YQ
+aP
+Wl
+YQ
+rd
+YQ
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(87,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+Wl
+aP
+KM
+Ym
+cn
+YQ
+YQ
+YM
+rF
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+wH
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+OU
+du
+io
+yu
+Vm
+aP
+YQ
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+sQ
+sQ
+YQ
+YQ
+sQ
+sQ
+Jo
+io
+du
+hk
+io
+du
+io
+du
+du
+io
+lf
+YQ
+YQ
+YQ
+kr
+aP
+fz
+YQ
+YQ
+YQ
+YQ
+YQ
+rF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+Wl
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(88,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+cn
+kr
+YQ
+YQ
+Wl
+YQ
+YM
+wH
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+rF
+YQ
+YQ
+ZV
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+mY
+AF
+YQ
+YQ
+YM
+YQ
+YQ
+OU
+io
+UH
+Oe
+Ko
+wj
+kr
+YQ
+YQ
+CV
+YQ
+YQ
+YM
+MW
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+sQ
+LW
+wH
+Jo
+io
+io
+io
+du
+io
+io
+DL
+YM
+rd
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(89,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+PB
+YQ
+YQ
+Pg
+YQ
+Wl
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+mY
+AF
+Wl
+YQ
+YQ
+CN
+YQ
+ZV
+wH
+Pg
+YQ
+YQ
+YQ
+ZV
+Wl
+YQ
+kr
+YQ
+wH
+Wl
+vK
+Hk
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Vm
+vK
+Wl
+YQ
+YQ
+kw
+du
+DL
+hp
+YQ
+YQ
+YQ
+YQ
+YQ
+Ka
+SF
+Ka
+Ar
+YQ
+vK
+YQ
+Vm
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+sQ
+sQ
+sQ
+Jo
+du
+QC
+Ka
+Ka
+Ka
+Mp
+Ct
+MJ
+zI
+Mp
+cn
+YQ
+YQ
+wH
+YQ
+kr
+AF
+YQ
+YQ
+YQ
+CN
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(90,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+MW
+aP
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+cn
+ZV
+pN
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+Aa
+YQ
+YQ
+YQ
+YQ
+CN
+MW
+YQ
+YQ
+YQ
+CN
+rF
+Mp
+Mp
+Mp
+Mp
+Mp
+IK
+Gl
+IK
+Mp
+bf
+YQ
+YQ
+YQ
+xU
+io
+du
+DL
+ZV
+AF
+cn
+Ka
+Ka
+EQ
+du
+du
+Ud
+io
+as
+YQ
+Oe
+Ko
+wj
+YQ
+YQ
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+YM
+Jo
+du
+du
+io
+du
+uj
+Jd
+Jd
+An
+Mp
+YQ
+rd
+aP
+Wl
+YQ
+YQ
+vK
+Wl
+YQ
+YQ
+wH
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(91,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+YQ
+kr
+Pg
+YQ
+YQ
+YQ
+Wl
+MW
+wH
+aP
+Wl
+YQ
+kr
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+vK
+Pg
+YQ
+YQ
+YQ
+YQ
+ZV
+Mp
+uZ
+Jd
+Iw
+Wi
+Jd
+vx
+Jd
+yM
+Mp
+AF
+YQ
+Ol
+io
+du
+io
+DL
+YQ
+cD
+ws
+io
+Kk
+io
+du
+uG
+dF
+du
+io
+yy
+rd
+nJ
+YQ
+YQ
+MW
+YQ
+YQ
+Pg
+ZV
+YQ
+YQ
+YQ
+OU
+io
+io
+yu
+JZ
+Mp
+fh
+Jd
+af
+Mp
+mk
+vK
+rd
+YQ
+YQ
+YQ
+td
+YQ
+Pg
+Bp
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(92,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+rd
+AF
+YQ
+YQ
+YQ
+cn
+rd
+YQ
+aP
+YQ
+cn
+YQ
+YQ
+YM
+YQ
+nm
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+zx
+cn
+YQ
+YQ
+YQ
+YM
+cn
+Pg
+Mp
+BY
+Jd
+sS
+Wi
+Co
+dm
+tK
+Jd
+Jj
+YQ
+YQ
+OU
+du
+io
+yu
+rd
+OU
+du
+io
+du
+uG
+QA
+QA
+pQ
+pQ
+dF
+io
+du
+xH
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Vm
+cn
+YQ
+wH
+YQ
+pm
+io
+DL
+Oe
+Mp
+Mp
+FO
+Mp
+Mp
+YQ
+YM
+YQ
+YQ
+YQ
+MW
+YQ
+YQ
+YM
+rF
+Wl
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+kW
+Xj
+Xj
+AR
+kW
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(93,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+Wl
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+aP
+YQ
+YQ
+vK
+MW
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+rd
+Mp
+kB
+Jd
+kz
+Wi
+Jd
+Jt
+Jd
+Jd
+Gl
+Ka
+Ka
+mE
+io
+io
+DL
+YQ
+hH
+du
+Ud
+uG
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+dF
+io
+io
+DL
+YQ
+YQ
+YQ
+Wl
+Mp
+Mp
+Mp
+Mp
+Mp
+rd
+OU
+io
+du
+DL
+YQ
+Mp
+pn
+Jd
+XV
+Mp
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+rd
+ZV
+cn
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+qa
+Ih
+ti
+qi
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(94,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+YQ
+CN
+AF
+YQ
+YQ
+YQ
+rd
+YQ
+Wl
+YQ
+CN
+Mp
+fm
+Jd
+dt
+Wi
+Jd
+Jd
+Jd
+Jd
+vZ
+du
+io
+du
+du
+io
+Mf
+YQ
+KR
+io
+uG
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+Hg
+Kk
+io
+xH
+YQ
+YM
+YQ
+YQ
+Mp
+zI
+MJ
+Ct
+Mp
+Ka
+OU
+io
+io
+DL
+AF
+Mp
+Mp
+Mp
+Mp
+Mp
+Pg
+YQ
+YQ
+YQ
+wH
+Wl
+YQ
+aP
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+ti
+Ih
+oW
+qa
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(95,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+vK
+cn
+YQ
+Wl
+kr
+YQ
+YQ
+YM
+YQ
+dY
+YQ
+YQ
+Wl
+wH
+YQ
+Pg
+vK
+YQ
+YQ
+rF
+Pg
+cn
+YQ
+YQ
+YQ
+cn
+YQ
+wH
+YQ
+MW
+Wl
+YQ
+YQ
+Oe
+Mp
+Ct
+Jd
+Mh
+Wi
+Jd
+Jd
+Jd
+Jd
+Gl
+oX
+sQ
+CR
+du
+io
+DL
+Kr
+du
+io
+uh
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+dF
+io
+du
+qr
+YQ
+rd
+vK
+Mp
+wv
+Jd
+Jd
+tS
+io
+QB
+du
+UH
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+MW
+YQ
+rd
+AF
+YQ
+rF
+rd
+YQ
+YQ
+YQ
+YQ
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+qa
+qa
+Ih
+Ih
+kW
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(96,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+mY
+YQ
+YM
+YQ
+aP
+AF
+YQ
+rd
+Pg
+YQ
+YQ
+YQ
+CN
+vK
+aP
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+kr
+Wl
+YQ
+YQ
+CN
+YQ
+ZV
+Pg
+YQ
+YM
+Mp
+Jd
+Jd
+BB
+Jd
+Jd
+Jd
+vx
+Jd
+IK
+wH
+YQ
+OU
+io
+io
+DL
+OU
+io
+uG
+pQ
+pQ
+pQ
+pQ
+pQ
+YK
+pQ
+pQ
+pQ
+pQ
+dF
+du
+xH
+CV
+YQ
+jQ
+Mp
+af
+Jd
+gV
+Mp
+sQ
+OU
+du
+du
+YQ
+YM
+wH
+YQ
+YQ
+YQ
+rd
+YQ
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+Wl
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+ti
+ai
+qa
+ti
+kW
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(97,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+YQ
+YQ
+Wl
+YQ
+YQ
+cn
+YQ
+Wl
+YQ
+YQ
+rd
+YQ
+AF
+Wl
+YQ
+rd
+CN
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+Mp
+Jd
+Jd
+Se
+Wi
+Jd
+Co
+bZ
+tK
+Jj
+YQ
+MW
+YQ
+uC
+du
+DL
+jJ
+du
+VJ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+Hg
+ot
+io
+DL
+YQ
+ZV
+Mp
+Gl
+FO
+Mp
+Mp
+wj
+OU
+du
+UH
+YQ
+YQ
+cn
+rd
+ZV
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+cn
+YQ
+YQ
+YQ
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Ih
+WD
+Ih
+Ih
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(98,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+wH
+YQ
+kr
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+CN
+wH
+rd
+cn
+YQ
+YQ
+YQ
+YQ
+CN
+wH
+Mp
+Jd
+Jd
+Gv
+at
+Jd
+Jd
+gj
+Gn
+Mp
+YQ
+YQ
+OU
+du
+io
+MS
+Sc
+io
+Kk
+uh
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+Hg
+Bh
+Vb
+DL
+kr
+YQ
+Mp
+Ta
+Jd
+lS
+Mp
+vK
+YQ
+uc
+du
+zr
+YQ
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+YQ
+CN
+vK
+kr
+Wl
+YQ
+MW
+YQ
+hv
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+kW
+ti
+Ih
+cK
+ti
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(99,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+YM
+Wl
+YQ
+YQ
+aP
+CN
+ZV
+YQ
+YM
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+PD
+Mp
+tx
+Gl
+Mp
+Gl
+Mp
+Jd
+Jd
+Gl
+Mp
+wj
+aP
+OU
+du
+io
+DL
+MD
+io
+io
+uh
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+dF
+du
+HD
+YQ
+YQ
+Mp
+Mp
+Mp
+Mp
+Mp
+Wl
+OU
+io
+io
+xH
+rT
+Mp
+Ct
+MJ
+zI
+Mp
+YQ
+YQ
+wH
+YQ
+aP
+YQ
+rd
+YQ
+YQ
+VU
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Xj
+Xj
+kW
+AR
+Xj
+Xj
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(100,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AF
+rd
+kr
+cn
+YQ
+YQ
+YM
+kr
+cn
+YQ
+rF
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+rF
+YQ
+YQ
+XC
+YQ
+YQ
+rF
+ZV
+YQ
+YQ
+YQ
+YQ
+kr
+Wl
+AF
+YQ
+Mp
+Jd
+Jd
+eN
+Mp
+by
+Jd
+Jd
+by
+Mp
+AF
+YQ
+OU
+io
+UH
+YQ
+ow
+du
+uG
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+EA
+io
+DL
+YQ
+YQ
+YQ
+YQ
+aP
+YQ
+rd
+wH
+OU
+du
+io
+io
+du
+Du
+Jd
+Jd
+An
+Mp
+YQ
+cn
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+rd
+wH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(101,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+aP
+YQ
+Wl
+YQ
+Wl
+YQ
+YQ
+AF
+YQ
+YQ
+YM
+rd
+AF
+YQ
+YQ
+YQ
+CN
+rd
+yi
+HC
+XC
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+pC
+Mp
+QI
+Jd
+LE
+Mp
+Jd
+vx
+vx
+Jd
+Jj
+YQ
+cn
+OU
+io
+du
+DL
+OU
+du
+VJ
+pQ
+pQ
+pQ
+pQ
+pQ
+YK
+pQ
+pQ
+pQ
+pQ
+Hg
+du
+io
+bw
+YQ
+YQ
+YQ
+CN
+YQ
+MW
+YQ
+YQ
+OU
+io
+io
+yu
+sQ
+Mp
+vs
+Jd
+af
+Mp
+Pd
+YQ
+YQ
+YQ
+YQ
+YQ
+KM
+YQ
+YQ
+YQ
+CN
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(102,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+Fz
+rd
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+cn
+aP
+YQ
+YQ
+AF
+Pg
+YQ
+yQ
+XC
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+mY
+MW
+YQ
+YQ
+YQ
+Mp
+SV
+Jd
+kn
+Gl
+xS
+kq
+Tm
+tK
+IK
+ZV
+YQ
+OU
+du
+io
+DL
+hw
+io
+Ud
+VJ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+EA
+io
+Hm
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+YQ
+YQ
+kr
+OU
+io
+sQ
+CN
+Oe
+Mp
+Gl
+FO
+Mp
+Mp
+YQ
+YQ
+YQ
+YQ
+CN
+ZV
+kr
+rF
+YQ
+YQ
+YQ
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(103,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+YQ
+YQ
+YQ
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+Pg
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+CV
+Ka
+Ka
+Ka
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+Wl
+AF
+rF
+Mp
+iE
+eT
+gL
+Mp
+wV
+Ah
+Tm
+vN
+Mp
+YQ
+YQ
+Kr
+io
+io
+DL
+YQ
+QO
+du
+io
+uh
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+Hg
+Kk
+io
+DL
+rd
+YQ
+vK
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+OU
+io
+zA
+YQ
+YQ
+Mp
+pn
+Jd
+XV
+Mp
+Pg
+YQ
+YQ
+MW
+mY
+YQ
+rd
+YQ
+AF
+YQ
+cn
+YQ
+wH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(104,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Wl
+YQ
+kr
+ZV
+rd
+wH
+Wl
+YQ
+YQ
+rd
+MW
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+mE
+io
+du
+io
+PL
+YQ
+Pg
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+Jj
+IK
+Mp
+Mp
+YQ
+YM
+YQ
+uc
+du
+DL
+VU
+OU
+io
+du
+VJ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+pQ
+Hg
+du
+io
+DL
+mY
+Wl
+YQ
+Mp
+zI
+MJ
+Ct
+Mp
+Ka
+XB
+io
+du
+DL
+MW
+Mp
+Mp
+Mp
+Mp
+Mp
+rd
+YQ
+rF
+cn
+aP
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+aP
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(105,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+AF
+YQ
+YQ
+YQ
+rd
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+mY
+kr
+rd
+oj
+YQ
+ws
+du
+du
+AT
+du
+du
+yy
+YQ
+Wl
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+YQ
+nJ
+vK
+YQ
+Wl
+YQ
+YQ
+YQ
+rd
+YQ
+nJ
+YQ
+YQ
+OU
+io
+Vg
+YQ
+YQ
+YQ
+iU
+du
+Kk
+uh
+pQ
+EA
+no
+VJ
+pQ
+pQ
+EA
+io
+YE
+AF
+YQ
+YQ
+YQ
+Mp
+wv
+Jd
+Jd
+HI
+du
+io
+du
+io
+DL
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+rd
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+vK
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(106,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+CN
+aP
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+Wl
+vK
+YQ
+YQ
+YQ
+OU
+io
+io
+uG
+pQ
+dF
+io
+io
+HQ
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+OU
+io
+du
+DL
+Pg
+vK
+MD
+io
+io
+VJ
+EA
+du
+io
+du
+VJ
+EA
+Ud
+du
+DL
+YQ
+YQ
+YQ
+El
+Mp
+af
+Jd
+bW
+Mp
+sQ
+Jo
+io
+du
+DL
+YQ
+aP
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rd
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(107,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+ZV
+cn
+rd
+YQ
+YQ
+rd
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+vy
+du
+uG
+pQ
+pQ
+Hg
+du
+io
+DL
+rF
+wH
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+aP
+OU
+du
+io
+xH
+YQ
+YQ
+jB
+Fq
+io
+du
+io
+io
+io
+io
+du
+du
+io
+Hm
+CV
+YQ
+YQ
+wH
+YQ
+Mp
+Mp
+FO
+Mp
+Mp
+wj
+Pg
+uc
+io
+MS
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+Pg
+wH
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(108,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+wH
+YQ
+YQ
+YM
+Pg
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+OU
+io
+uh
+pQ
+pQ
+pQ
+dF
+du
+uv
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+kr
+YQ
+YQ
+rF
+YQ
+AF
+YQ
+ZV
+YQ
+OU
+du
+io
+du
+DL
+gU
+Ko
+wj
+lr
+sQ
+nw
+du
+io
+io
+KO
+sQ
+sQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+Mp
+hU
+Jd
+lS
+Mp
+YQ
+Yf
+du
+UH
+YQ
+rd
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+cn
+YQ
+YQ
+ZV
+YQ
+cn
+YQ
+YM
+YQ
+YQ
+YQ
+YQ
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(109,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+hv
+YQ
+vK
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+cn
+aP
+OU
+du
+VJ
+pQ
+pQ
+pQ
+EA
+io
+DL
+YQ
+YQ
+YQ
+CN
+rd
+ZV
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+vK
+YQ
+Pg
+YQ
+Wl
+YQ
+Jo
+io
+yu
+Ka
+Ka
+nJ
+cn
+YQ
+CV
+YQ
+IC
+io
+yu
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+YQ
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+OU
+io
+io
+xH
+wH
+Mp
+Ct
+MJ
+zI
+Mp
+wH
+YQ
+rF
+YQ
+rd
+YQ
+YQ
+AF
+ZV
+kr
+MW
+YQ
+Pg
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(110,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Wl
+MW
+YQ
+cn
+rd
+YQ
+VU
+YQ
+Pg
+YQ
+YQ
+Dz
+YQ
+YQ
+OU
+du
+io
+VJ
+pQ
+Hg
+io
+du
+DL
+YQ
+YQ
+YQ
+AF
+Wl
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+Tw
+YQ
+YQ
+MW
+Vm
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+sQ
+hw
+io
+du
+xH
+YQ
+CN
+YQ
+MW
+XB
+io
+yx
+YQ
+vK
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+nJ
+rd
+ZV
+YQ
+OU
+du
+io
+du
+DL
+IO
+Jd
+Jd
+An
+Mp
+YQ
+AF
+YQ
+YQ
+YQ
+Tw
+cn
+aP
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(111,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+wH
+YQ
+rd
+kr
+Wl
+YQ
+YQ
+CN
+YQ
+Wl
+iU
+du
+io
+VJ
+EA
+du
+io
+CK
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+wH
+ZV
+YQ
+Oe
+Ko
+wj
+YQ
+YQ
+YQ
+kr
+YQ
+YQ
+OU
+du
+io
+du
+DL
+Ka
+Ka
+XB
+du
+io
+io
+xH
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+rQ
+du
+io
+yu
+YQ
+Mp
+TX
+Jd
+af
+Mp
+wj
+YQ
+YQ
+YQ
+YQ
+MW
+YQ
+YQ
+YM
+rd
+YQ
+YQ
+YQ
+Wl
+mY
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(112,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+MW
+YQ
+YQ
+ZV
+YQ
+YQ
+YQ
+YQ
+QO
+du
+du
+io
+io
+Hm
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+MW
+rd
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+nJ
+YQ
+YQ
+CN
+YQ
+YQ
+Pg
+rd
+wH
+Jo
+io
+du
+WE
+du
+du
+io
+io
+du
+io
+du
+Nd
+rd
+wH
+YQ
+ZV
+YQ
+MW
+YQ
+aP
+YQ
+Ka
+Ka
+Ka
+YQ
+XB
+io
+io
+DL
+mt
+Mp
+Mp
+FO
+Mp
+Mp
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+YQ
+vK
+kr
+Wl
+YQ
+YQ
+YQ
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(113,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+ZV
+AF
+YQ
+rd
+YQ
+YQ
+ZV
+AF
+YQ
+YQ
+vK
+YQ
+rd
+kr
+YQ
+YM
+wH
+YQ
+sQ
+sQ
+uu
+sQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+AF
+vK
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+MW
+YQ
+Jo
+io
+io
+hk
+io
+du
+io
+yu
+CR
+io
+io
+xH
+Ka
+cn
+Ka
+Ka
+Ka
+YQ
+Ka
+hC
+du
+io
+io
+MX
+du
+io
+yu
+YQ
+YQ
+Mp
+pn
+Jd
+XV
+Mp
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+aP
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(114,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+aP
+YQ
+kr
+Pg
+mY
+YQ
+YQ
+YQ
+CN
+cn
+Pg
+YQ
+YQ
+YQ
+kr
+Pg
+rd
+rF
+YQ
+YQ
+YQ
+YQ
+CN
+MW
+YQ
+kr
+Wl
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+YQ
+Wl
+YQ
+mY
+rF
+Mp
+Mp
+Mp
+Mp
+Mp
+YQ
+Wl
+Jo
+du
+ht
+Jo
+io
+yu
+YQ
+OU
+du
+du
+io
+du
+WE
+io
+io
+du
+WE
+io
+io
+io
+du
+io
+du
+hk
+io
+DL
+YQ
+Wl
+Mp
+Mp
+Mp
+Mp
+Mp
+wH
+AF
+YQ
+MW
+kf
+YQ
+YQ
+YQ
+Pg
+cn
+YQ
+Wl
+YQ
+YQ
+ZV
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(115,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+CN
+YQ
+YQ
+YQ
+Wl
+YQ
+rd
+aP
+YQ
+Wl
+rd
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+ZV
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+ZV
+AF
+YQ
+YQ
+wH
+YQ
+YQ
+cn
+El
+Mp
+ml
+Qt
+ww
+Mp
+ZV
+YQ
+Tx
+io
+DL
+uX
+du
+eJ
+Wl
+YQ
+Jo
+io
+io
+io
+du
+hk
+du
+io
+io
+du
+du
+io
+yu
+sQ
+sQ
+YQ
+sQ
+YQ
+YQ
+YQ
+mY
+YQ
+nJ
+YQ
+vK
+rd
+YQ
+YQ
+YQ
+td
+YQ
+YQ
+cn
+rd
+YQ
+wH
+rd
+AF
+YQ
+cV
+Pg
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(116,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+cn
+ZV
+YQ
+YQ
+YM
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+Pg
+YQ
+YM
+cn
+YQ
+YQ
+YQ
+CN
+vK
+YQ
+Pg
+YQ
+Mp
+QE
+QE
+eR
+Mp
+Mp
+Jj
+Mp
+Ag
+IK
+Jj
+Ag
+Gl
+IK
+Mp
+wj
+sQ
+sQ
+JZ
+sQ
+YQ
+sQ
+sQ
+sQ
+sQ
+sQ
+sQ
+wH
+YQ
+rd
+YQ
+YQ
+ZV
+kr
+YQ
+wH
+YQ
+YQ
+YQ
+CN
+cn
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+MW
+CN
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(117,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AF
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+nt
+ZV
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+Pg
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rF
+MW
+YQ
+YQ
+Mp
+lV
+Mp
+Mp
+Gl
+Mp
+Xm
+CH
+Jd
+Jd
+Jd
+Jd
+CH
+Or
+Mp
+YQ
+rd
+YQ
+YQ
+YQ
+og
+YQ
+rd
+YQ
+YQ
+cn
+YQ
+Wl
+YQ
+YQ
+YQ
+Pg
+YQ
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+rF
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(118,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+vK
+YQ
+MW
+AF
+YQ
+YQ
+cn
+Wl
+YQ
+kr
+YQ
+aP
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+rd
+YQ
+YQ
+YM
+cn
+Wl
+YQ
+YQ
+CN
+MW
+YQ
+YQ
+YQ
+YQ
+Wl
+wH
+Mp
+Jd
+QE
+OA
+Ct
+Mp
+Jd
+Jd
+Jd
+Jd
+Jd
+Jd
+Jd
+yF
+Jj
+AF
+YQ
+YQ
+YM
+Oe
+Ko
+wj
+YQ
+XC
+aP
+YQ
+YQ
+YQ
+CN
+MW
+vK
+YQ
+rd
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+CN
+YQ
+kr
+rd
+YQ
+Wl
+YQ
+YQ
+YM
+wH
+YQ
+cn
+YQ
+ZV
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(119,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+hv
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+Pg
+YQ
+YQ
+YM
+rd
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+kr
+YQ
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+kr
+Mp
+hy
+eB
+uT
+uy
+yz
+Jd
+Jd
+sR
+Ei
+Ve
+Rn
+Jd
+yL
+IK
+YQ
+YQ
+YQ
+YQ
+Wl
+nJ
+YQ
+kr
+Yb
+GU
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Vm
+YQ
+YQ
+CN
+wH
+YQ
+AF
+YQ
+rd
+YQ
+YQ
+cn
+wH
+aP
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+aP
+YQ
+CN
+YQ
+kr
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(120,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Pg
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+AF
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YM
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+MW
+YQ
+rd
+kr
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+Mp
+Jd
+QE
+wq
+Jd
+Gl
+Jd
+Jd
+VK
+XY
+QE
+Jv
+Jd
+Bq
+IK
+aP
+YQ
+wH
+YQ
+YQ
+ZV
+YQ
+YQ
+XC
+YQ
+YQ
+YQ
+Pg
+YQ
+rd
+YQ
+mt
+Ko
+wj
+YQ
+YQ
+MW
+YQ
+YQ
+cn
+YQ
+ZV
+rd
+YQ
+YQ
+mY
+Wl
+ZV
+YQ
+YQ
+YQ
+rF
+kr
+YQ
+YQ
+YQ
+YQ
+vK
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(121,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+rd
+YQ
+YQ
+Wo
+rd
+MW
+YQ
+Wl
+Pg
+cn
+YQ
+YQ
+YQ
+CN
+cn
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Pg
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+cn
+YQ
+kr
+YQ
+jF
+Mp
+Mp
+Jd
+BB
+Jd
+Mp
+KY
+Jd
+mu
+QE
+QE
+yS
+Jd
+KY
+Mp
+YQ
+Pg
+mY
+YQ
+cn
+YQ
+rd
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+nJ
+rd
+YQ
+YQ
+Wl
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+MW
+CN
+YQ
+Pg
+cn
+rd
+YQ
+YQ
+rd
+YQ
+YQ
+Wl
+rd
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(122,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+vK
+YQ
+YQ
+YQ
+YQ
+CN
+AF
+ZV
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+KM
+cn
+YQ
+YQ
+YQ
+CN
+VU
+YQ
+YQ
+YQ
+YQ
+fH
+rF
+YQ
+MW
+AF
+YQ
+Mp
+Mp
+Mp
+Mp
+Mp
+Mp
+IK
+IK
+Mp
+Mp
+IK
+Jj
+Mp
+Mp
+mk
+rd
+YQ
+YQ
+ZV
+YQ
+vK
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+YQ
+YM
+Wl
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+aP
+YM
+vK
+MW
+YQ
+YQ
+CN
+YQ
+MW
+YQ
+CN
+AF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(123,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+vK
+YQ
+YQ
+cn
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+cn
+vK
+YQ
+YQ
+YQ
+AF
+vK
+aP
+YQ
+VU
+YQ
+YQ
+YQ
+AF
+mY
+ZV
+YQ
+YQ
+YQ
+YQ
+AF
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+vK
+cn
+aP
+YQ
+nJ
+YQ
+CN
+YQ
+Pg
+YQ
+YQ
+xD
+YQ
+cn
+YQ
+nJ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+cn
+YQ
+YQ
+YM
+wH
+YQ
+Sh
+wH
+wH
+YQ
+kr
+YQ
+Wl
+YQ
+YQ
+YQ
+cn
+ZV
+YQ
+YQ
+YQ
+rF
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(124,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+Wl
+ZV
+YQ
+YQ
+AF
+YQ
+cn
+rd
+YQ
+aP
+YQ
+AF
+YQ
+kr
+MW
+rd
+Wl
+YQ
+YQ
+cn
+Wl
+YQ
+rd
+YQ
+YQ
+YQ
+cn
+vK
+YQ
+wH
+MW
+ZV
+YQ
+rd
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+Pg
+YQ
+YQ
+wH
+YQ
+AF
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+MW
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+MW
+YQ
+rd
+aP
+YQ
+YQ
+YQ
+YQ
+wH
+aP
+YQ
+YQ
+YQ
+wH
+YQ
+rd
+vK
+ZV
+Wl
+YQ
+aP
+vK
+VU
+rd
+YQ
+YM
+YQ
+YQ
+rd
+YQ
+CN
+YQ
+rF
+wH
+rd
+YQ
+Pg
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(125,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rF
+rd
+EV
+YQ
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+Tw
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+hv
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+kr
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+YM
+cn
+ZV
+rd
+cn
+YQ
+YQ
+YQ
+wH
+aP
+YQ
+rd
+AF
+YQ
+YQ
+cn
+vK
+wH
+rd
+YQ
+YQ
+Wl
+YQ
+rd
+YQ
+YQ
+Wl
+rd
+YQ
+ZV
+YQ
+rd
+Wl
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+KM
+Pg
+AF
+ZV
+YQ
+YQ
+cn
+YQ
+YQ
+YQ
+Pg
+Wl
+kr
+YQ
+YQ
+aP
+CN
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(126,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Wl
+YQ
+Pg
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+wH
+YQ
+YQ
+aP
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+wH
+MW
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+Pg
+YQ
+YQ
+YQ
+YQ
+cn
+YQ
+Pg
+ZV
+YQ
+mY
+wH
+YQ
+AF
+YQ
+kr
+YQ
+Wl
+MW
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+wH
+YQ
+Wl
+rF
+AF
+kr
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+CN
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+YM
+Pg
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Oz
+YQ
+YQ
+MW
+CN
+rd
+aP
+YQ
+YQ
+AF
+YQ
+YQ
+YM
+YQ
+YQ
+cn
+wH
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(127,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+CN
+rd
+KM
+kr
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+mY
+AF
+YQ
+YQ
+YQ
+ZV
+YQ
+kr
+cn
+YQ
+Pg
+Wl
+YQ
+kr
+ZV
+rd
+YQ
+AF
+Wl
+YQ
+kr
+YQ
+PB
+YQ
+Wl
+YQ
+YQ
+YQ
+CN
+aP
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+ZV
+AF
+YQ
+aP
+YQ
+CN
+Pg
+YQ
+rd
+YQ
+cn
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+cn
+ZV
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+Pg
+AF
+MW
+kr
+wH
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+wH
+rd
+YQ
+YQ
+YQ
+Wl
+vK
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(128,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+Wl
+YQ
+kr
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YQ
+YQ
+YQ
+hv
+YQ
+MW
+rF
+YQ
+vK
+Wl
+YQ
+YQ
+KM
+YQ
+YQ
+YQ
+CN
+rF
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+rd
+YQ
+wH
+kr
+YQ
+YQ
+mY
+vl
+Pg
+YQ
+YQ
+aP
+CN
+cn
+YQ
+YQ
+YQ
+CN
+AF
+YQ
+YQ
+YQ
+CN
+YQ
+Pg
+YQ
+wH
+YQ
+AF
+YQ
+YQ
+aP
+cn
+YQ
+YQ
+MW
+CN
+YQ
+rF
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(129,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+wH
+ZV
+mY
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+YQ
+YQ
+MW
+vK
+YQ
+YQ
+rd
+YQ
+wH
+kf
+rd
+YQ
+aP
+Wl
+YQ
+YQ
+YQ
+CN
+Wl
+YQ
+vK
+YQ
+YQ
+YM
+wH
+YQ
+YQ
+YQ
+AF
+YQ
+YQ
+rd
+YQ
+YQ
+Pg
+AF
+vK
+rd
+YQ
+wH
+Pg
+rd
+YQ
+YQ
+YM
+AF
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+CN
+Wl
+aP
+YQ
+YQ
+CN
+VU
+dY
+YQ
+YQ
+aP
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+MW
+YQ
+Wl
+YQ
+YQ
+YQ
+Oz
+YQ
+YQ
+vK
+YQ
+YQ
+YM
+Wl
+YQ
+YQ
+rd
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(130,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+kr
+MW
+rd
+YQ
+vK
+YQ
+YQ
+YM
+Pg
+kr
+YQ
+YQ
+YQ
+YQ
+CN
+Pg
+YQ
+YQ
+YQ
+CN
+Pg
+rd
+YQ
+YQ
+cn
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+MW
+YQ
+YQ
+YQ
+cn
+YQ
+YQ
+YM
+YQ
+YQ
+YQ
+CN
+YQ
+aP
+YQ
+aP
+cn
+YQ
+Wl
+YQ
+YQ
+vK
+YQ
+kr
+cn
+aP
+MW
+YQ
+YQ
+YQ
+rF
+ZV
+PB
+YQ
+YQ
+YQ
+vK
+YQ
+rd
+wH
+cn
+kr
+YQ
+aP
+YQ
+rd
+kf
+YQ
+Wl
+YQ
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+CN
+YQ
+YQ
+AF
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(131,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+YQ
+Xh
+Pg
+YQ
+aP
+YQ
+YQ
+YQ
+YQ
+ZV
+rd
+YQ
+YQ
+YQ
+rd
+YQ
+YQ
+YQ
+vK
+YQ
+kr
+YQ
+AF
+wH
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+rd
+aP
+YQ
+YQ
+CN
+YQ
+YQ
+Pg
+YQ
+YQ
+YQ
+ZV
+MW
+YQ
+YQ
+YM
+YQ
+kr
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+Wl
+YQ
+YQ
+YQ
+YM
+cn
+rd
+YQ
+vK
+YQ
+YQ
+YM
+aP
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+wH
+YQ
+Ak
+YQ
+cn
+YQ
+YQ
+wH
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(132,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+wH
+YQ
+YQ
+YQ
+CN
+wH
+YQ
+YQ
+aP
+YM
+YQ
+kr
+AF
+cn
+YQ
+YQ
+YQ
+YQ
+YQ
+CN
+YQ
+AF
+YQ
+YQ
+YQ
+YQ
+YQ
+kr
+YQ
+rd
+wH
+ZV
+aP
+vK
+kr
+wH
+YQ
+YQ
+YQ
+AF
+Pg
+YQ
+YQ
+YQ
+YQ
+rd
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+AF
+YQ
+YQ
+kr
+YQ
+YQ
+CN
+wH
+AF
+YQ
+YQ
+YQ
+YQ
+Wl
+wG
+YQ
+YQ
+YQ
+wH
+YQ
+YQ
+YQ
+YQ
+kr
+vK
+aP
+rd
+YQ
+YQ
+YQ
+rd
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(133,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+Pg
+vl
+YQ
+YQ
+YQ
+YQ
+YQ
+rd
+AF
+YQ
+YQ
+YQ
+YQ
+kr
+YQ
+Wl
+YQ
+cn
+MW
+ZV
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+MW
+YQ
+YQ
+aP
+YQ
+YQ
+YM
+YQ
+cn
+Pg
+YQ
+Wl
+YQ
+AF
+YQ
+cn
+YQ
+YQ
+YQ
+CN
+rd
+YQ
+YQ
+YQ
+CN
+rF
+wH
+MW
+Pg
+YQ
+YQ
+YQ
+YQ
+Wl
+mY
+aP
+YQ
+YQ
+YQ
+YQ
+YQ
+cn
+Pg
+YQ
+YQ
+YM
+YQ
+AF
+rd
+AR
+AR
+AR
+AR
+AR
+AR
+Pg
+YQ
+mY
+Wl
+YQ
+YQ
+CN
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(134,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+CN
+vK
+YQ
+YQ
+YQ
+CN
+YQ
+Pg
+YQ
+aP
+AF
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+YQ
+Pg
+YQ
+YQ
+EV
+cn
+YQ
+YQ
+YQ
+CN
+ZV
+YQ
+Wl
+YQ
+AF
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+rF
+YQ
+YQ
+YQ
+YQ
+Wl
+YQ
+YQ
+YQ
+YQ
+YQ
+YQ
+YM
+YQ
+aP
+rd
+YQ
+YQ
+YQ
+CN
+YQ
+YQ
+YM
+MW
+YQ
+YQ
+YQ
+CN
+wH
+rd
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(135,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+cn
+cn
+Pv
+YQ
+YQ
+Wl
+YM
+vK
+cn
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+vK
+YQ
+kr
+YQ
+YQ
+YQ
+YQ
+cn
+rd
+Pg
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+ZV
+rF
+wH
+cn
+mY
+Pv
+YQ
+YQ
+YQ
+YQ
+AF
+vK
+YQ
+YQ
+YQ
+KM
+AF
+YQ
+Pg
+rd
+YQ
+YQ
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(136,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+wH
+rd
+YQ
+AF
+ZV
+YQ
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+rd
+Wl
+YQ
+wH
+mY
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+YQ
+CN
+cn
+YQ
+kr
+YQ
+wH
+Wl
+YQ
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(137,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+YQ
+YQ
+YQ
+ZV
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(138,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(139,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(140,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(141,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(142,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(143,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(144,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(145,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(146,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(147,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(148,1,1) = {"
+bG
+bG
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+AR
+bG
+bG
+"}
+(149,1,1) = {"
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+"}
+(150,1,1) = {"
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+bG
+"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index d24a6fbae2..df4ab2bc72 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -1491,6 +1491,10 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/fore)
+"adu" = (
+/obj/effect/landmark/barthpot,
+/turf/open/floor/wood,
+/area/library)
"adw" = (
/obj/structure/cable,
/obj/structure/lattice/catwalk,
@@ -105452,7 +105456,7 @@ aIt
aPd
aIt
aPb
-aIt
+adu
aXu
aYW
bat
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index ffa75eb200..245f67833e 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -19127,7 +19127,7 @@
/area/maintenance/disposal/incinerator)
"aFL" = (
/obj/machinery/atmospherics/pipe/layer_manifold,
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"aFM" = (
/obj/structure/grille,
@@ -19140,7 +19140,7 @@
/area/maintenance/disposal/incinerator)
"aFO" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"aFP" = (
/obj/machinery/door/firedoor,
@@ -19196,7 +19196,7 @@
"aFU" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/machinery/meter,
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"aFV" = (
/obj/structure/cable{
@@ -20074,6 +20074,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
+/obj/effect/spawner/structure/window/reinforced,
/turf/closed/wall,
/area/engine/atmos)
"aHy" = (
@@ -20930,7 +20931,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"aIM" = (
/obj/effect/turf_decal/bot,
@@ -20949,13 +20950,14 @@
/turf/closed/wall,
/area/maintenance/central)
"aIO" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 8
},
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold,
/turf/closed/wall,
/area/engine/atmos)
"aIP" = (
@@ -21204,7 +21206,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"aJm" = (
/obj/effect/decal/cleanable/dirt,
@@ -21443,6 +21445,7 @@
/area/engine/atmos)
"aJI" = (
/obj/machinery/atmospherics/pipe/simple/green/visible,
+/obj/effect/spawner/structure/window/reinforced,
/turf/closed/wall,
/area/engine/atmos)
"aJJ" = (
@@ -21839,13 +21842,6 @@
dir = 1
},
/area/hallway/primary/fore)
-"aKm" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/closed/wall,
-/area/engine/atmos)
"aKn" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -52340,6 +52336,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/reinforced,
/turf/closed/wall,
/area/engine/atmos)
"bGp" = (
@@ -53442,6 +53439,7 @@
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
+/obj/effect/spawner/structure/window/reinforced,
/turf/closed/wall,
/area/engine/atmos)
"bIc" = (
@@ -53455,10 +53453,11 @@
},
/area/engine/atmos)
"bIe" = (
-/obj/machinery/atmospherics/pipe/simple/purple/visible,
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold,
/turf/closed/wall,
/area/engine/atmos)
"bIf" = (
@@ -61567,10 +61566,11 @@
/turf/open/space/basic,
/area/space/nearstation)
"bUM" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/engine/atmos)
"bUN" = (
@@ -63743,9 +63743,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/exit/departure_lounge)
-"bYf" = (
-/turf/closed/mineral/random/labormineral,
-/area/maintenance/starboard/aft)
"bYg" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass{
@@ -67199,7 +67196,6 @@
/area/maintenance/port/aft)
"cdS" = (
/obj/structure/sign/warning/securearea,
-/obj/item/multitool,
/turf/closed/wall/r_wall,
/area/security/nuke_storage)
"cdT" = (
@@ -75350,7 +75346,9 @@
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 4
},
-/obj/machinery/airalarm,
+/obj/machinery/airalarm{
+ pixel_y = 22
+ },
/obj/machinery/light/small,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating{
@@ -78583,6 +78581,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/structure/window/reinforced,
/turf/closed/wall,
/area/engine/atmos)
"cxU" = (
@@ -80395,7 +80394,7 @@
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/space,
-/area/engine/atmos)
+/area/space/nearstation)
"cCY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
@@ -84951,7 +84950,7 @@
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 9
},
-/turf/closed/wall,
+/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"jOz" = (
/obj/structure/sign/warning/electricshock,
@@ -112894,9 +112893,9 @@ cvg
aMP
aFL
aIL
-aFI
+aEh
aFW
-aFI
+aEh
cko
cko
aaa
@@ -113153,9 +113152,9 @@ aFO
cwc
aFO
cwA
-aFI
-aFI
-aFI
+aEh
+aEh
+aEh
aaa
aaa
aaa
@@ -113667,9 +113666,9 @@ aFU
cwd
jHJ
cwH
-aFI
-aFI
-aFI
+aEh
+aEh
+aEh
aaa
aaa
aaa
@@ -113922,9 +113921,9 @@ cFF
cFF
cFF
aJl
-aFI
-aFI
-aFI
+aEh
+aEh
+aEh
cko
cko
aaa
@@ -114177,7 +114176,7 @@ cBz
aHd
aMZ
aFc
-cFF
+aFM
acm
aaa
aaQ
@@ -114691,7 +114690,7 @@ cBB
aHf
bDR
aFc
-cFF
+aFM
acm
aaa
cow
@@ -115205,7 +115204,7 @@ cBz
aHg
aNa
aFd
-cFF
+aFM
acm
aaa
cow
@@ -115719,7 +115718,7 @@ cBB
aHi
bFG
aFd
-cFF
+aFM
acm
aaa
acm
@@ -116233,7 +116232,7 @@ cBz
aHj
aNb
aVG
-cFF
+aFM
acm
aaa
cow
@@ -116741,13 +116740,13 @@ cpK
cqL
cph
bwy
-aKm
+bIe
clu
cBB
aHl
bId
aFe
-cFF
+aFM
acm
aaa
aaQ
@@ -124436,7 +124435,7 @@ koc
dbY
dlg
bWx
-bYf
+bPJ
ceU
cgI
cDp
diff --git a/code/__DEFINES/dynamic.dm b/code/__DEFINES/dynamic.dm
index da8a76e71e..6a15834ed8 100644
--- a/code/__DEFINES/dynamic.dm
+++ b/code/__DEFINES/dynamic.dm
@@ -1,7 +1,7 @@
#define CURRENT_LIVING_PLAYERS 1
#define CURRENT_LIVING_ANTAGS 2
#define CURRENT_DEAD_PLAYERS 3
-#define CURRENT_OBSERVERS 4
+#define CURRENT_OBSERVERS 4
#define NO_ASSASSIN (1<<0)
#define WAROPS_ALWAYS_ALLOWED (1<<1)
@@ -9,9 +9,11 @@
#define FORCE_IF_WON (1<<3)
#define USE_PREV_ROUND_WEIGHTS (1<<4)
-#define ONLY_RULESET (1<<0)
-#define HIGHLANDER_RULESET (1<<1)
-#define TRAITOR_RULESET (1<<2)
-#define MINOR_RULESET (1<<3)
+#define ONLY_RULESET (1<<0)
+#define HIGHLANDER_RULESET (1<<1)
+#define TRAITOR_RULESET (1<<2)
+#define MINOR_RULESET (1<<3)
+#define FAKE_ANTAG_RULESET (1<<4)
+#define ALWAYS_MAX_WEIGHT_RULESET (1<<5)
#define RULESET_STOP_PROCESSING 1
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 3407b3342b..ffcb5ac231 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -125,7 +125,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isbot(A) (istype(A, /mob/living/simple_animal/bot))
-#define isshade(A) (istype(A, /mob/living/simple_animal/shade))
+#define isshade(A) (istype(A, /mob/living/simple_animal/hostile/construct/shade))
#define ismouse(A) (istype(A, /mob/living/simple_animal/mouse))
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index aef77e7b57..cd13510366 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -78,7 +78,9 @@
#define EXP_TYPE_ADMIN "Admin"
//Flags in the players table in the db
-#define DB_FLAG_EXEMPT 1
+#define DB_FLAG_EXEMPT (1<<0)
+#define DB_FLAG_AGE_CONFIRMATION_INCOMPLETE (1<<1)
+#define DB_FLAG_AGE_CONFIRMATION_COMPLETE (1<<2)
#define DEFAULT_CYBORG_NAME "Default Cyborg Name"
diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm
index 5775e128f8..57484ae85b 100644
--- a/code/__DEFINES/say.dm
+++ b/code/__DEFINES/say.dm
@@ -76,8 +76,14 @@
#define LINGHIVE_LINK 3
//whether the emote is visible or audible.
+// Requires sight
#define EMOTE_VISIBLE 1
+// Requires hearing
#define EMOTE_AUDIBLE 2
+// Requires sight or hearing
+#define EMOTE_BOTH 3
+// Always able to be seen
+#define EMOTE_OMNI 4
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
#define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen?
@@ -89,4 +95,4 @@
// Audio/Visual Flags. Used to determine what sense are required to notice a message.
#define MSG_VISUAL (1<<0)
-#define MSG_AUDIBLE (1<<1)
\ No newline at end of file
+#define MSG_AUDIBLE (1<<1)
diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm
index 3b4c674079..efd715b85a 100644
--- a/code/__DEFINES/species.dm
+++ b/code/__DEFINES/species.dm
@@ -34,6 +34,7 @@
#define SPECIES_SYNTH "synth"
#define SPECIES_SYNTH_MIL "military_synth"
#define SPECIES_VAMPIRE "vampire"
+ #define SPECIES_VAMPIRE_WEAK "vampire_roundstart"
#define SPECIES_XENOHYBRID "xeno"
#define SPECIES_ZOMBIE "zombie"
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index 7c0811ec59..a0a5df4290 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "5.2.1"
+#define TGS_DMAPI_VERSION "5.2.7"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -95,6 +95,8 @@
#define TGS_EVENT_WATCHDOG_SHUTDOWN 15
/// Before the watchdog detaches for a TGS update/restart. No parameters.
#define TGS_EVENT_WATCHDOG_DETACH 16
+// We don't actually implement this value as the DMAPI can never receive it
+// #define TGS_EVENT_WATCHDOG_LAUNCH 17
// OTHER ENUMS
@@ -127,6 +129,7 @@
* Call this when your initializations are complete and your game is ready to play before any player interactions happen.
*
* This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running.
+ * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184
* Before this point, note that any static files or directories may be in use by another server. Your code should account for this.
* This function should not be called before ..() in [/world/proc/New].
*/
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index dc3a7fae17..4d75e247a0 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -209,10 +209,9 @@
#define TRAIT_FAST_PUMP "fast_pump"
#define TRAIT_NO_PROCESS_FOOD "no-process-food" // You don't get benefits from nutriment, nor nutrition from reagent consumables
#define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good...
-/// Prevents stamina buffer regeneration
-#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen"
-/// Prevents stamina regeneration
-#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen"
+#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" /// Prevents stamina buffer regeneration
+#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" /// Prevents stamina regeneration
+#define TRAIT_ARMOR_BROKEN "armor_broken" //acts as if you are wearing no clothing when taking damage, does not affect non-clothing sources of protection
// mobility flag traits
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
@@ -326,3 +325,4 @@
/// This trait is added by the parry system.
#define ACTIVE_PARRY_TRAIT "active_parry"
#define STICKY_NODROP "sticky-nodrop" //sticky nodrop sounds like a bad soundcloud rapper's name
+#define TRAIT_SACRIFICED "sacrificed" //Makes sure that people cant be cult sacrificed twice.
diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm
index f981ec3595..510eeebdce 100644
--- a/code/_globalvars/traits.dm
+++ b/code/_globalvars/traits.dm
@@ -13,6 +13,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NEARSIGHT" = TRAIT_NEARSIGHT,
"TRAIT_FAT" = TRAIT_FAT,
"TRAIT_HUSK" = TRAIT_HUSK,
+ "TRAIT_SACRIFICED" = TRAIT_SACRIFICED,
"TRAIT_NOCLONE" = TRAIT_NOCLONE,
"TRAIT_CLUMSY" = TRAIT_CLUMSY,
"TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS,
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index fdf7ffd663..67e4a97894 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -509,21 +509,21 @@
//Body size configs, the feature will be disabled if both min and max have the same value.
/datum/config_entry/number/body_size_min
- config_entry_value = RESIZE_DEFAULT_SIZE
+ config_entry_value = 0.9
min_val = 0.1 //to avoid issues with zeros and negative values.
max_val = RESIZE_DEFAULT_SIZE
integer = FALSE
/datum/config_entry/number/body_size_max
- config_entry_value = RESIZE_DEFAULT_SIZE
+ config_entry_value = 1.25
min_val = RESIZE_DEFAULT_SIZE
integer = FALSE
-//Pun-Pun movement slowdown given to characters with a body size smaller than this value,
+//Penalties given to characters with a body size smaller than this value,
//to compensate for their smaller hitbox.
//To disable, just make sure the value is lower than 'body_size_min'
-/datum/config_entry/number/threshold_body_size_slowdown
- config_entry_value = RESIZE_DEFAULT_SIZE * 0.85
+/datum/config_entry/number/threshold_body_size_penalty
+ config_entry_value = RESIZE_DEFAULT_SIZE
min_val = 0
max_val = RESIZE_DEFAULT_SIZE
integer = FALSE
@@ -531,8 +531,8 @@
//multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation.
//doesn't apply to floating or crawling mobs
/datum/config_entry/number/body_size_slowdown_multiplier
- config_entry_value = 0.25
- min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead.
+ config_entry_value = 0
+ min_val = 0
integer = FALSE
//Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 48b159baa1..90ec3bc289 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -327,6 +327,9 @@
/datum/config_entry/number/notify_new_player_account_age // how long do we notify admins of a new byond account
min_val = 0
+/datum/config_entry/flag/age_verification //are we using the automated age verification which asks users if they're 18+?
+ config_entry_value = TRUE
+
/datum/config_entry/flag/irc_first_connection_alert // do we notify the irc channel when somebody is connecting for the first time?
/datum/config_entry/flag/check_randomizer
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 47b93928d4..9a0665e91f 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -52,7 +52,7 @@ SUBSYSTEM_DEF(traumas)
"doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)),
"the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct,
/mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab,
- /mob/living/simple_animal/revenant, /mob/living/simple_animal/shade)),
+ /mob/living/simple_animal/revenant, /mob/living/simple_animal/hostile/construct/shade)),
"aliens" = typecacheof(list(/mob/living/carbon/alien, /mob/living/simple_animal/slime)),
"conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209, /mob/living/simple_animal/drone,
/mob/living/simple_animal/pet/penguin)),
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index b8191a377b..0552a791ea 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -46,6 +46,21 @@
if(isnum(use_delay_override))
use_delay = use_delay_override
+/datum/component/squeak/UnregisterFromParent()
+ if(!isatom(parent))
+ return
+ UnregisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY))
+ if(ismovable(parent))
+ UnregisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT,
+ COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED, COMSIG_MOVABLE_CROSS,
+ COMSIG_CROSS_SQUEAKED, COMSIG_MOVABLE_DISPOSING))
+ if(isitem(parent))
+ UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF,
+ COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
+ if(istype(parent, /obj/item/clothing/shoes))
+ UnregisterSignal(parent, COMSIG_SHOES_STEP_ACTION)
+ return ..()
+
/datum/component/squeak/proc/play_squeak()
do_play_squeak()
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index cd90b554ac..fe041c41ff 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -5,7 +5,7 @@
var/uni_identity
var/blood_type
var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man)
- var/list/features = list("FFF") //first value is mutant color
+ var/list/features = list("FFF", "body_size" = RESIZE_DEFAULT_SIZE) //first value is mutant color
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
var/nameless = FALSE
var/custom_species //siiiiigh I guess this is important
@@ -696,11 +696,19 @@
/datum/dna/proc/update_body_size(old_size)
if(!holder || features["body_size"] == old_size)
return
+ //new size detected
holder.resize = features["body_size"] / old_size
holder.update_transform()
- var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
- if(features["body_size"] < danger)
- var/slowdown = (1 - round(features["body_size"] / danger, 0.1)) * CONFIG_GET(number/body_size_slowdown_multiplier)
- holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown)
- else if(old_size < danger)
- holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride)
+ if(iscarbon(holder))
+ var/mob/living/carbon/C = holder
+ var/penalty_threshold = CONFIG_GET(number/threshold_body_size_penalty)
+ if(features["body_size"] < penalty_threshold && old_size >= penalty_threshold)
+ C.maxHealth -= 10 //reduce the maxhealth
+ var/slowdown = (1 - round(features["body_size"] / penalty_threshold, 0.1)) * CONFIG_GET(number/body_size_slowdown_multiplier)
+ holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown)
+ else
+ if(old_size < penalty_threshold && features["body_size"] >= penalty_threshold)
+ C.maxHealth += 10 //give the maxhealth back
+ holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride) //remove the slowdown
+
+
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index e1147df225..14f3eae689 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -66,8 +66,12 @@
if(emote_type == EMOTE_AUDIBLE)
user.audible_message(msg)
- else
+ else if(emote_type == EMOTE_VISIBLE)
user.visible_message(msg)
+ else if(emote_type == EMOTE_BOTH)
+ user.visible_message(msg, blind_message = msg)
+ else if(emote_type == EMOTE_OMNI)
+ user.visible_message(msg, omni = TRUE)
/datum/emote/proc/replace_pronoun(mob/user, message)
if(findtext(message, "their"))
diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm
index 3bddfdaa63..b72874c329 100644
--- a/code/datums/mutations/_mutations.dm
+++ b/code/datums/mutations/_mutations.dm
@@ -150,7 +150,6 @@
overlays_standing[CM.layer_used] = mut_overlay
apply_overlay(CM.layer_used)
-
/datum/mutation/human/proc/modify() //called when a genome is applied so we can properly update some stats without having to remove and reapply the mutation from someone
if(modified || !power || !owner)
return
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index fbc433a8a0..836b00250f 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -72,6 +72,8 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
var/list/threat_log_verbose = list()
/// List of roundstart rules used for selecting the rules.
var/list/roundstart_rules = list()
+ /// List of minor roundstart rules used for selecting the rules.
+ var/list/minor_rules = list()
/// List of latejoin rules used for selecting the rules.
var/list/latejoin_rules = list()
/// List of midround rules used for selecting the rules.
@@ -121,10 +123,12 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
var/pop_last_updated = 0
/// How many percent of the rounds are more peaceful.
var/peaceful_percentage = 50
- /// If a highlander executed.
+ /// If a highlander executed. No other highlander rulesets will be run.
var/highlander_executed = FALSE
- /// If a only ruleset has been executed.
+ /// If a only ruleset has been executed. No other rulesets will be run.
var/only_ruleset_executed = FALSE
+ /// If the first picked ruleset was a minor ruleset. Minor antagonists will be weighted higher.
+ var/minor_ruleset_start = FALSE
/// Antags rolled by rules so far, to keep track of and discourage scaling past a certain ratio of crew/antags especially on lowpop.
var/antags_rolled = 0
// Arbitrary threat addition, for fudging purposes.
@@ -372,6 +376,8 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
if(ruleset.name == "")
continue
switch(ruleset.ruletype)
+ if("Minor")
+ minor_rules += ruleset
if("Roundstart")
roundstart_rules += ruleset
if ("Latejoin")
@@ -396,21 +402,47 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
rigged_roundstart()
else
roundstart()
-
- var/starting_rulesets = ""
- for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules)
- starting_rulesets += "[DR.name], "
- log_game("DYNAMIC: Picked the following roundstart rules: [starting_rulesets]")
+ if(minor_ruleset_start)
+ log_game("DYNAMIC: Starting a minor ruleset round.")
+ else
+ var/starting_rulesets = ""
+ for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules)
+ starting_rulesets += "[DR.name], "
+ log_game("DYNAMIC: Picked the following roundstart rules: [starting_rulesets]")
candidates.Cut()
return TRUE
/datum/game_mode/dynamic/post_setup(report)
update_playercounts()
-
- for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules)
- addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay)
+ if(minor_ruleset_start)
+ addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/minor_roundstart),rand(1 MINUTES,5 MINUTES))
+ else
+ for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules)
+ addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay)
..()
+/datum/game_mode/dynamic/proc/minor_roundstart()
+ message_admins("Dynamic beginning minor antag roundstart rolls.")
+ var/list/potential_minor_rulesets = storyteller.minor_rule_draft()
+ var/iterations = 0
+ var/num_rulesets_executed = 0
+ while(threat < threat_level && potential_minor_rulesets.len && (!CHECK_TICK || iterations < 100))
+ var/datum/dynamic_ruleset/minor/rule = pickweight(potential_minor_rulesets)
+ rule.candidates = current_players[CURRENT_LIVING_PLAYERS].Copy()
+ rule.trim_candidates()
+ if(!check_blocking(rule.blocking_rules, executed_rules) && rule.ready())
+ rule.execute()
+ executed_rules |= rule
+ log_threat("[rule.ruletype] - [rule.name] [rule.cost] threat", verbose = TRUE)
+ num_rulesets_executed++
+ else
+ potential_minor_rulesets -= rule
+ update_playercounts()
+ iterations++
+ message_admins("Minor antag roundstart rolls completed, with [num_rulesets_executed] antags or antag teams made.")
+ log_game("DYNAMIC: Minor antag roundstart made [num_rulesets_executed] antags or antag teams.")
+
+
/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it.
/datum/game_mode/dynamic/proc/rigged_roundstart()
message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
@@ -429,12 +461,17 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
if (GLOB.dynamic_forced_extended)
log_game("DYNAMIC: Starting a round of forced extended.")
return TRUE
+ if(prob(storyteller.minor_start_chance()))
+ minor_ruleset_start = TRUE
+ message_admins("Dynamic has initialized a minor antag start. Antags will be assigned in 1-5 minutes.")
+ log_game("DYNAMIC: Minor start initialized.")
+ return TRUE
var/list/drafted_rules = storyteller.roundstart_draft()
if(!drafted_rules.len)
- message_admins("Not enough threat level for roundstart antags!")
- log_game("DYNAMIC: Not enough threat level for roundstart antags!")
- midround_injection_cooldown = round((midround_injection_cooldown + world.time) / 2, 1)
- latejoin_injection_cooldown = round((latejoin_injection_cooldown + world.time) / 2, 1)
+ message_admins("No roundstart antags drafted! Falling back to minor ruleset start.")
+ log_game("DYNAMIC: No roundstart antags drafted! Falling back to minor ruleset start.")
+ minor_ruleset_start = TRUE
+ return FALSE
var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1)
extra_rulesets_amount = 0
if (GLOB.dynamic_classic_secret)
@@ -468,8 +505,9 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
else
if(threat_level >= 50)
- message_admins("DYNAMIC: Picking first roundstart ruleset failed. You should report this.")
+ message_admins("DYNAMIC: Picking first roundstart ruleset failed. You should report this. Falling back to minor antag start.")
log_game("DYNAMIC: Picking first roundstart ruleset failed. drafted_rules.len = [drafted_rules.len] and threat = [threat]/[threat_level]")
+ minor_ruleset_start = TRUE
return FALSE
return TRUE
@@ -513,7 +551,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null)
drafted_rules -= starting_rule
starting_rule.trim_candidates()
- starting_rule.scale_up(extra_rulesets_amount, threat_level-added_threat)
if (starting_rule.pre_execute())
log_threat("[starting_rule.ruletype] - [starting_rule.name] [starting_rule.cost + starting_rule.scaled_times * starting_rule.scaling_cost] threat", verbose = TRUE)
if(starting_rule.flags & HIGHLANDER_RULESET)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm
index eb7da2144f..3e7e504130 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm
@@ -50,8 +50,12 @@
/// Used for the roundend report
var/total_cost = 0
/// A flag that determines how the ruleset is handled
+ /// ONLY_RULESET are rulesets that prevent ALL other rulesets from rolling.
/// HIGHLANDER_RULESET are rulesets can end the round.
- /// TRAITOR_RULESET and MINOR_RULESET can't end the round and have no difference right now.
+ /// TRAITOR_RULESET are the "default" ruleset--they should always be addable to a round, if the round type allows antags and dynamic thinks there should be another.
+ /// MINOR_RULESET is for rulesets whose antags can have multiple instances without causing too much issue. As roundstarts, they have their weights reduced based on the storyteller's minor-antag-round chance.
+ /// FAKE_ANTAG_RULESET is for rulesets whose antags aren't actually antagonistic--essentially just flavor meant to spice the round up.
+ /// ALWAYS_MAX_WEIGHT_RULESET means that the ruleset doesn't have its weight reduced based on recency.
var/flags = 0
/// Pop range per requirement. If zero defaults to mode's pop_per_requirement.
var/pop_per_requirement = 0
@@ -82,9 +86,6 @@
var/delay = 0
/// List of tags for use in storytellers.
var/list/property_weights = list()
- /// Whether or not recent-round weight values are taken into account for this ruleset.
- /// Weight reduction uses the same values as secret's recent-round mode weight reduction.
- var/always_max_weight = FALSE
/// Weight reduction by recent-rounds. Saved on new.
var/weight_mult = 1
@@ -100,7 +101,7 @@
var/high_population_requirements = CONFIG_GET(keyed_list/dynamic_high_population_requirement)
var/list/repeated_mode_adjust = CONFIG_GET(number_list/repeated_mode_adjust)
if(config_tag in weights)
- if(!always_max_weight && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3)
+ if(!(flags & ALWAYS_MAX_WEIGHT_RULESET) && SSpersistence.saved_dynamic_rules.len == 3 && repeated_mode_adjust.len == 3)
var/saved_dynamic_rules = SSpersistence.saved_dynamic_rules
for(var/i in 1 to 3)
if(config_tag in saved_dynamic_rules[i])
@@ -119,6 +120,9 @@
/datum/dynamic_ruleset/roundstart // One or more of those drafted at roundstart
ruletype = "Roundstart"
+/datum/dynamic_ruleset/minor // drafted at roundstart in minor rounds, one antag at a time, for a "mixed" round
+ ruletype = "Minor"
+
// Can be drafted when a player joins the server
/datum/dynamic_ruleset/latejoin
ruletype = "Latejoin"
@@ -175,7 +179,7 @@
/// This is called if persistent variable is true everytime SSTicker ticks.
/datum/dynamic_ruleset/proc/rule_process()
return TRUE
-
+
/// Called on game mode pre_setup for roundstart rulesets.
/// Do everything you need to do before job is assigned here.
/// IMPORTANT: ASSIGN special_role HERE
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index d2fa8bcc70..7842c6e0f7 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -70,9 +70,8 @@
requirements = list(40,30,20,15,15,15,15,15,15,15)
high_population_requirement = 15
repeatable = TRUE
- flags = TRAITOR_RULESET
+ flags = TRAITOR_RULESET | MINOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET
property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1)
- always_max_weight = TRUE
//////////////////////////////////////////////
// //
@@ -207,6 +206,7 @@
weight = 4
cost = 25
requirements = list(60,60,60,55,50,50,50,50,50,50)
+ flags = MINOR_RULESET
high_population_requirement = 50
property_weights = list("story_potential" = 1, "trust" = -1, "chaos" = 2, "extended" = -1, "valid" = 2)
repeatable = TRUE
@@ -229,6 +229,7 @@
cost = 10
property_weights = list("story_potential" = 2, "extended" = 2, "trust" = -2, "valid" = 1)
requirements = list(70,65,60,55,50,45,40,35,30,30)
+ flags = MINOR_RULESET
high_population_requirement = 30
repeatable = TRUE
@@ -258,6 +259,7 @@
required_candidates = 1
weight = 3
cost = 15
+ flags = MINOR_RULESET
requirements = list(101,101,101,101,101,101,101,101,101,101)
property_weights = list("trust" = -2, "valid" = 2)
high_population_requirement = 101
@@ -281,5 +283,5 @@
requirements = list(10,10,10,10,10,10,10,10,10,10)
high_population_requirement = 10
repeatable = TRUE
- flags = TRAITOR_RULESET | MINOR_RULESET
- property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 2)
+ flags = TRAITOR_RULESET | MINOR_RULESET | FAKE_ANTAG_RULESET
+ property_weights = list("story_potential" = 1, "trust" = -1, "extended" = 2)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index b29584aa58..416721702b 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -207,9 +207,8 @@
requirements = list(30,25,20,15,15,15,15,15,15,15)
repeatable = TRUE
high_population_requirement = 15
- flags = TRAITOR_RULESET
+ flags = TRAITOR_RULESET | MINOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET
property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1)
- always_max_weight = TRUE
/datum/dynamic_ruleset/midround/autotraitor/acceptable(population = 0, threat = 0)
var/player_count = mode.current_players[CURRENT_LIVING_PLAYERS].len
@@ -494,6 +493,7 @@
required_candidates = 1
weight = 3
cost = 10
+ flags = MINOR_RULESET
requirements = list(101,101,101,70,50,40,20,15,15,15)
high_population_requirement = 50
repeatable_weight_decrease = 2
@@ -630,6 +630,7 @@
required_candidates = 1
weight = 4
cost = 15
+ flags = MINOR_RULESET
requirements = list(101,101,101,90,80,70,60,50,40,30)
high_population_requirement = 30
property_weights = list("story_potential" = 1, "extended" = -2, "valid" = 2)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm
new file mode 100644
index 0000000000..618befbaa7
--- /dev/null
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm
@@ -0,0 +1,212 @@
+
+//////////////////////////////////////////////
+// //
+// SYNDICATE TRAITORS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/minor/traitor
+ name = "Traitors"
+ config_tag = "traitor" // these having identical config tags to the roundstart modes is 100% intentional, so that config edits are simpler
+ persistent = TRUE
+ antag_flag = ROLE_TRAITOR
+ antag_datum = /datum/antagonist/traitor/
+ minimum_required_age = 0
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Cyborg")
+ restricted_roles = list("Cyborg", "AI")
+ required_candidates = 1
+ weight = 5
+ flags = TRAITOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET
+ cost = 10 // Avoid raising traitor threat above 10, as it is the default low cost ruleset.
+ requirements = list(50,50,50,50,50,50,50,50,50,50)
+ high_population_requirement = 40
+ property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1, "valid" = 1)
+
+/datum/dynamic_ruleset/minor/traitor/execute()
+ var/mob/M = pick_n_take(candidates)
+ assigned += M
+ var/datum/antagonist/traitor/newTraitor = new
+ M.mind.add_antag_datum(newTraitor)
+ log_admin("[M] was made into a traitor by dynamic.")
+ message_admins("[M] was made into a traitor by dynamic.")
+ return TRUE
+
+//////////////////////////////////////////
+// //
+// BLOOD BROTHERS //
+// //
+//////////////////////////////////////////
+
+/datum/dynamic_ruleset/minor/traitorbro
+ name = "Blood Brothers"
+ config_tag = "traitorbro"
+ antag_flag = ROLE_BROTHER
+ antag_datum = /datum/antagonist/brother
+ restricted_roles = list("AI", "Cyborg")
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ required_candidates = 2
+ weight = 4
+ cost = 10
+ requirements = list(101,101,101,101,101,101,101,101,101,101)
+ high_population_requirement = 101
+ antag_cap = list(2,2,2,2,2,2,2,2,2,2) // Can pick 3 per team, but rare enough it doesn't matter.
+ property_weights = list("story_potential" = 1, "trust" = -1, "extended" = 1, "valid" = 1)
+ var/list/datum/team/brother_team/pre_brother_teams = list()
+ var/const/min_team_size = 2
+
+/datum/dynamic_ruleset/minor/traitorbro/execute()
+ if(candidates.len < min_team_size || candidates.len < required_candidates)
+ return FALSE
+ var/datum/team/brother_team/team = new
+ var/team_size = prob(10) ? min(3, candidates.len) : 2
+ for(var/k = 1 to team_size)
+ var/mob/bro = pick_n_take(candidates)
+ assigned += bro.mind
+ team.add_member(bro.mind)
+ bro.mind.special_role = "brother"
+ bro.mind.restricted_roles = restricted_roles
+ team.pick_meeting_area()
+ team.forge_brother_objectives()
+ for(var/datum/mind/M in team.members)
+ M.add_antag_datum(/datum/antagonist/brother, team)
+ team.update_name()
+ mode.brother_teams += team
+
+//////////////////////////////////////////////
+// //
+// CHANGELINGS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/minor/changeling
+ name = "Changelings"
+ config_tag = "changeling"
+ antag_flag = ROLE_CHANGELING
+ antag_datum = /datum/antagonist/changeling
+ restricted_roles = list("AI", "Cyborg")
+ protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ required_candidates = 1
+ weight = 3
+ cost = 15
+ scaling_cost = 15
+ requirements = list(101,101,101,101,101,101,101,101,101,101)
+ property_weights = list("trust" = -2, "valid" = 2)
+ high_population_requirement = 10
+ antag_cap = list(1,1,1,1,1,2,2,2,2,3)
+ var/team_mode_probability = 30
+
+/datum/dynamic_ruleset/minor/changeling/execute()
+ var/mob/M = pick_n_take(candidates)
+ assigned += M.mind
+ M.mind.restricted_roles = restricted_roles
+ M.mind.special_role = ROLE_CHANGELING
+ var/datum/antagonist/changeling/new_antag = new antag_datum()
+ M.mind.add_antag_datum(new_antag)
+ return TRUE
+
+//////////////////////////////////////////////
+// //
+// ELDRITCH CULT //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/minor/heretics
+ name = "Heretic"
+ antag_flag = "heretic"
+ antag_datum = /datum/antagonist/heretic
+ protected_roles = list("Prisoner","Security Officer", "Warden", "Detective", "Head of Security", "Captain")
+ restricted_roles = list("AI", "Cyborg")
+ required_candidates = 1
+ weight = 3
+ cost = 25
+ scaling_cost = 15
+ requirements = list(60,60,60,55,50,50,50,50,50,50)
+ property_weights = list("story_potential" = 1, "trust" = -1, "chaos" = 2, "extended" = -1, "valid" = 2)
+ antag_cap = list(1,1,1,1,2,2,2,2,3,3)
+ high_population_requirement = 50
+
+
+/datum/dynamic_ruleset/minor/heretics/pre_execute()
+ var/mob/picked_candidate = pick_n_take(candidates)
+ assigned += picked_candidate.mind
+ picked_candidate.mind.restricted_roles = restricted_roles
+ picked_candidate.mind.special_role = ROLE_HERETIC
+ var/datum/antagonist/heretic/new_antag = new antag_datum()
+ picked_candidate.mind.add_antag_datum(new_antag)
+ return TRUE
+
+//////////////////////////////////////////////
+// //
+// DEVIL //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/minor/devil
+ name = "Devil"
+ config_tag = "devil"
+ antag_flag = ROLE_DEVIL
+ antag_datum = /datum/antagonist/devil
+ restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI")
+ required_candidates = 1
+ weight = 3
+ cost = 0
+ requirements = list(101,101,101,101,101,101,101,101,101,101)
+ high_population_requirement = 101
+ antag_cap = list(1,1,1,2,2,2,3,3,3,4)
+ property_weights = list("extended" = 1)
+
+/datum/dynamic_ruleset/minor/devil/pre_execute()
+ var/mob/devil = pick_n_take(candidates)
+ assigned += devil.mind
+ devil.mind.special_role = ROLE_DEVIL
+ devil.mind.restricted_roles = restricted_roles
+
+ log_game("[key_name(devil)] has been selected as a devil")
+ add_devil(devil, ascendable = TRUE)
+ add_devil_objectives(devil.mind,2)
+ return TRUE
+
+/datum/dynamic_ruleset/minor/devil/proc/add_devil_objectives(datum/mind/devil_mind, quantity)
+ var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target)
+ var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil)
+ for(var/i = 1 to quantity)
+ var/type = pick(validtypes)
+ var/datum/objective/devil/objective = new type(null)
+ objective.owner = devil_mind
+ D.objectives += objective
+ if(!istype(objective, /datum/objective/devil/buy_target))
+ validtypes -= type
+ else
+ objective.find_target()
+
+//////////////////////////////////////////////
+// //
+// BLOODSUCKERS //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/minor/bloodsucker
+ name = "Bloodsuckers"
+ config_tag = "bloodsucker"
+ antag_flag = ROLE_BLOODSUCKER
+ antag_datum = ANTAG_DATUM_BLOODSUCKER
+ minimum_required_age = 0
+ protected_roles = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
+ restricted_roles = list("Cyborg", "AI")
+ required_candidates = 1
+ weight = 2
+ cost = 15
+ scaling_cost = 10
+ property_weights = list("story_potential" = 1, "extended" = 1, "trust" = -2, "valid" = 1)
+ requirements = list(70,65,60,55,50,50,50,50,50,50)
+ high_population_requirement = 50
+
+/datum/dynamic_ruleset/minor/bloodsucker/execute()
+ var/mob/M = pick_n_take(candidates)
+ assigned += M.mind
+ M.mind.special_role = ROLE_BLOODSUCKER
+ M.mind.restricted_roles = restricted_roles
+ mode.check_start_sunlight()
+ if(mode.make_bloodsucker(M.mind))
+ mode.bloodsuckers += M.mind
+ return TRUE
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index db4ec99558..c5e0857461 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -15,6 +15,7 @@
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster", "Cyborg")
restricted_roles = list("Cyborg", "AI")
required_candidates = 1
+ flags = TRAITOR_RULESET | MINOR_RULESET | ALWAYS_MAX_WEIGHT_RULESET
weight = 5
cost = 10 // Avoid raising traitor threat above 10, as it is the default low cost ruleset.
scaling_cost = 10
@@ -22,7 +23,6 @@
high_population_requirement = 40
antag_cap = list(1,1,1,1,2,2,2,2,3,3)
property_weights = list("story_potential" = 2, "trust" = -1, "extended" = 1, "valid" = 1)
- always_max_weight = TRUE
var/autotraitor_cooldown = 450 // 15 minutes (ticks once per 2 sec)
/datum/dynamic_ruleset/roundstart/traitor/pre_execute()
@@ -57,6 +57,7 @@
restricted_roles = list("AI", "Cyborg")
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 2
+ flags = MINOR_RULESET
weight = 4
cost = 10
requirements = list(101,101,101,101,101,101,101,101,101,101)
@@ -106,6 +107,7 @@
restricted_roles = list("AI", "Cyborg")
protected_roles = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_candidates = 1
+ flags = MINOR_RULESET
weight = 3
cost = 15
scaling_cost = 15
@@ -156,6 +158,7 @@
protected_roles = list("Prisoner","Security Officer", "Warden", "Detective", "Head of Security", "Captain")
restricted_roles = list("AI", "Cyborg")
required_candidates = 1
+ flags = MINOR_RULESET
weight = 3
cost = 25
scaling_cost = 15
@@ -694,6 +697,7 @@
antag_datum = /datum/antagonist/devil
restricted_roles = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI")
required_candidates = 1
+ flags = MINOR_RULESET
weight = 3
cost = 0
requirements = list(101,101,101,101,101,101,101,101,101,101)
@@ -850,6 +854,7 @@
protected_roles = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
restricted_roles = list("Cyborg", "AI")
required_candidates = 1
+ flags = MINOR_RULESET
weight = 2
cost = 15
scaling_cost = 10
diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm
index 04e295356a..d5766b287e 100644
--- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm
+++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm
@@ -32,6 +32,9 @@ Property weights are added to the config weight of the ruleset. They are:
"conversion" -- Basically a bool. Conversion antags, well, convert. It's in its own class 'cause people kinda hate conversion.
*/
+/datum/dynamic_storyteller/proc/minor_start_chance()
+ return clamp(60 - mode.threat_level,0,100) // by default higher threat = lower chance of minor round
+
/datum/dynamic_storyteller/proc/start_injection_cooldowns()
var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min)
mode.latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time
@@ -104,8 +107,27 @@ Property weights are added to the config weight of the ruleset. They are:
/datum/dynamic_storyteller/proc/roundstart_draft()
var/list/drafted_rules = list()
+ var/minor_round_weight_mult = (100-minor_start_chance()) / 100
for (var/datum/dynamic_ruleset/roundstart/rule in mode.roundstart_rules)
if (rule.acceptable(mode.roundstart_pop_ready, mode.threat_level)) // If we got the population and threat required
+ rule.candidates = mode.candidates.Copy()
+ rule.trim_candidates()
+ if (rule.ready() && rule.candidates.len > 0)
+ var/property_weight = 0
+ for(var/property in property_weights)
+ if(property in rule.property_weights) // just treat it as 0 if it's not in there
+ property_weight += rule.property_weights[property] * property_weights[property]
+ var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult
+ if(CHECK_BITFIELD(rule.flags, MINOR_RULESET))
+ calced_weight *= minor_round_weight_mult
+ if(calced_weight > 0) // negatives in the list might cause problems
+ drafted_rules[rule] = calced_weight
+ return drafted_rules
+
+/datum/dynamic_storyteller/proc/minor_rule_draft()
+ var/list/drafted_rules = list()
+ for (var/datum/dynamic_ruleset/minor/rule in mode.minor_rules)
+ if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level))
rule.candidates = mode.candidates.Copy()
rule.trim_candidates()
if (rule.ready() && rule.candidates.len > 0)
@@ -124,7 +146,7 @@ Property weights are added to the config weight of the ruleset. They are:
// if there are antags OR the rule is an antag rule, antag_acceptable will be true.
if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level))
// Classic secret : only autotraitor/minor roles
- if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
+ if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET)))
continue
rule.trim_candidates()
if (rule.ready())
@@ -133,7 +155,7 @@ Property weights are added to the config weight of the ruleset. They are:
if(property in rule.property_weights) // just treat it as 0 if it's not in there
property_weight += rule.property_weights[property] * property_weights[property]
var/threat_weight = 1
- if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway
+ if(!(rule.flags & TRAITOR_RULESET)) // makes the traitor rulesets always possible anyway
var/cost_difference = rule.cost-(mode.threat_level-mode.threat)
/* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to
pick this particular ruleset.
@@ -157,7 +179,7 @@ Property weights are added to the config weight of the ruleset. They are:
for (var/datum/dynamic_ruleset/latejoin/rule in mode.latejoin_rules)
if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level - mode.threat))
// Classic secret : only autotraitor/minor roles
- if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
+ if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET)))
continue
// No stacking : only one round-ender, unless threat level > stacking_limit.
if (mode.threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
@@ -172,7 +194,7 @@ Property weights are added to the config weight of the ruleset. They are:
if(property in rule.property_weights)
property_weight += rule.property_weights[property] * property_weights[property]
var/threat_weight = 1
- if(!(rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET))
+ if(!(rule.flags & TRAITOR_RULESET))
var/cost_difference = rule.cost-(mode.threat_level-mode.threat)
threat_weight = 1-abs(1-(LOGISTIC_FUNCTION(2,0.05,abs(cost_difference),0)))
if(cost_difference > 0)
@@ -195,6 +217,9 @@ Property weights are added to the config weight of the ruleset. They are:
min_players = 30
var/refund_cooldown = 0
+/datum/dynamic_storyteller/chaotic/minor_start_chance()
+ return 0
+
/datum/dynamic_storyteller/chaotic/do_process()
if(refund_cooldown < world.time)
mode.create_threat(20)
@@ -215,6 +240,9 @@ Property weights are added to the config weight of the ruleset. They are:
flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS
property_weights = list("valid" = 3, "trust" = 5)
+/datum/dynamic_storyteller/chaotic/minor_start_chance()
+ return 0
+
/datum/dynamic_storyteller/team/should_inject_antag(dry_run = FALSE)
return (mode.current_players[CURRENT_LIVING_ANTAGS].len ? FALSE : ..())
@@ -228,6 +256,9 @@ Property weights are added to the config weight of the ruleset. They are:
flags = WAROPS_ALWAYS_ALLOWED
property_weights = list("valid" = 1, "conversion" = 20)
+/datum/dynamic_storyteller/chaotic/minor_start_chance()
+ return 0
+
/datum/dynamic_storyteller/random
name = "Random"
config_tag = "random"
@@ -244,6 +275,9 @@ Property weights are added to the config weight of the ruleset. They are:
/datum/dynamic_storyteller/random/should_inject_antag()
return prob(50)
+/datum/dynamic_storyteller/chaotic/minor_start_chance()
+ return 20
+
/datum/dynamic_storyteller/random/roundstart_draft()
var/list/drafted_rules = list()
for (var/datum/dynamic_ruleset/roundstart/rule in mode.roundstart_rules)
@@ -254,12 +288,22 @@ Property weights are added to the config weight of the ruleset. They are:
drafted_rules[rule] = 1
return drafted_rules
+/datum/dynamic_storyteller/random/minor_rule_draft()
+ var/list/drafted_rules = list()
+ for (var/datum/dynamic_ruleset/minor/rule in mode.minor_rules)
+ if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level))
+ rule.candidates = mode.candidates.Copy()
+ rule.trim_candidates()
+ if (rule.ready() && rule.candidates.len > 0)
+ drafted_rules[rule] = 1
+ return drafted_rules
+
/datum/dynamic_storyteller/random/midround_draft()
var/list/drafted_rules = list()
for (var/datum/dynamic_ruleset/midround/rule in mode.midround_rules)
if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level))
// Classic secret : only autotraitor/minor roles
- if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
+ if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET)))
continue
rule.trim_candidates()
if (rule.ready())
@@ -271,7 +315,7 @@ Property weights are added to the config weight of the ruleset. They are:
for (var/datum/dynamic_ruleset/latejoin/rule in mode.latejoin_rules)
if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level))
// Classic secret : only autotraitor/minor roles
- if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET) || (rule.flags & MINOR_RULESET)))
+ if (GLOB.dynamic_classic_secret && !((rule.flags & TRAITOR_RULESET)))
continue
// No stacking : only one round-ender, unless threat level > stacking_limit.
if (mode.threat_level > GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
@@ -286,7 +330,7 @@ Property weights are added to the config weight of the ruleset. They are:
/datum/dynamic_storyteller/story
name = "Story"
config_tag = "story"
- desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies. Has a buildup-climax-falling action threat curve."
+ desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies."
weight = 2
curve_width = 2
flags = USE_PREV_ROUND_WEIGHTS
@@ -308,6 +352,19 @@ Property weights are added to the config weight of the ruleset. They are:
flags = USE_PREV_ROUND_WEIGHTS
property_weights = list("trust" = -2)
+/datum/dynamic_storyteller/intrigue/minor_start_chance()
+ return 100 - mode.threat_level
+
+/datum/dynamic_storyteller/grabbag
+ name = "Grab Bag"
+ config_tag = "grabbag"
+ desc = "Crew antags (e.g. traitor, changeling, bloodsucker, heretic) only, all mixed together."
+ weight = 2
+ flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS
+
+/datum/dynamic_storyteller/grabbag/minor_start_chance()
+ return 100
+
/datum/dynamic_storyteller/liteextended
name = "Calm"
config_tag = "calm"
@@ -319,6 +376,9 @@ Property weights are added to the config weight of the ruleset. They are:
dead_player_weight = 5
property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "conversion" = -10)
+/datum/dynamic_storyteller/liteextended/minor_start_chance()
+ return 100
+
/datum/dynamic_storyteller/no_antag
name = "Extended"
config_tag = "semiextended"
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index da82b0afc7..f46169f72e 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
. = ..()
if(.)
return
- if(!usr.canUseTopic(src, !issilicon(usr)))
+ if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr)))
return
if(stat & BROKEN)
visible_message("[src] buzzes.", "You hear a faint buzz.")
@@ -147,7 +147,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
. = attack_ai(user)
/obj/machinery/announcement_system/attack_ai(mob/user)
- if(!user.canUseTopic(src, !issilicon(user)))
+ if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(stat & BROKEN)
to_chat(user, "[src]'s firmware appears to be malfunctioning!")
@@ -167,7 +167,9 @@ GLOBAL_LIST_EMPTY(announcement_systems)
act_up()
/obj/machinery/announcement_system/emag_act()
+ . = ..()
if(obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
act_up()
+ return TRUE
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 401d05da12..9b911e9c15 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -21,6 +21,9 @@
return
if(R.scrambledcodes)
return
+ if(hasSiliconAccessInArea(user) && !issilicon(user))
+ if(!Adjacent(user))
+ return
return TRUE
/obj/machinery/computer/robotics/ui_interact(mob/user, datum/tgui/ui)
@@ -40,6 +43,10 @@
else if(IsAdminGhost(user))
data["can_hack"] = TRUE
+ data["can_convert"] = FALSE
+ if(isAI(user) && is_servant_of_ratvar(user))
+ data["can_convert"] = TRUE
+
data["cyborgs"] = list()
for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
if(!can_control(user, R))
@@ -54,6 +61,7 @@
module = R.module ? "[R.module.name] Module" : "No Module Detected",
synchronization = R.connected_ai,
emagged = R.emagged,
+ servant = is_servant_of_ratvar(R),
ref = REF(R)
)
data["cyborgs"] += list(cyborg_data)
@@ -110,6 +118,13 @@
log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!")
message_admins("[ADMIN_LOOKUPFLW(usr)] emagged cyborg [key_name_admin(R)] using robotic console!")
R.SetEmagged(TRUE)
+ if("convert")
+ if(isAI(usr) && is_servant_of_ratvar(usr))
+ var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs
+ if(istype(R) && !is_servant_of_ratvar(R) && R.connected_ai == usr)
+ log_game("[key_name(usr)] converted [key_name(R)] using robotic console!")
+ message_admins("[ADMIN_LOOKUPFLW(usr)] converted cyborg [key_name_admin(R)] using robotic console!")
+ add_servant_of_ratvar(R)
if("killdrone")
if(allowed(usr))
var/mob/living/simple_animal/drone/D = locate(params["ref"]) in GLOB.mob_list
diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm
index e721e986d2..0dcb0e7235 100644
--- a/code/game/machinery/dna_scanner.dm
+++ b/code/game/machinery/dna_scanner.dm
@@ -32,6 +32,8 @@
. = ..()
if(in_range(user, src) || isobserver(user))
. += "The status display reads: Radiation pulse accuracy increased by factor [precision_coeff**2].
Radiation pulse damage decreased by factor [damage_coeff**2]."
+ if(scan_level >= 3)
+ . += "Scanner has been upgraded to support autoprocessing."
/obj/machinery/dna_scannernew/update_icon_state()
//no power or maintenance
@@ -94,6 +96,13 @@
..(user)
+// search for ghosts, if the corpse is empty and the scanner is connected to a cloner
+ var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
+ if(istype(mob_occupant))
+ if(locate_computer(/obj/machinery/computer/cloning))
+ if(!mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && !mob_occupant.hellbound)
+ mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src)
+
// DNA manipulators cannot operate on severed heads or brains
if(iscarbon(occupant))
if(linked_console)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 515a4672a5..9ef34390f6 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1457,6 +1457,16 @@
ui.open()
return TRUE
+/obj/machinery/door/airlock/ui_status(mob/user)
+ . = ..()
+ if (!issilicon(user) && hasSiliconAccessInArea(user))
+ . = UI_INTERACTIVE
+
+/obj/machinery/door/airlock/can_interact(mob/user)
+ . = ..()
+ if (!issilicon(user) && hasSiliconAccessInArea(user))
+ return TRUE
+
/obj/machinery/door/airlock/ui_data()
var/list/data = list()
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index fe2bdf90b1..8941c540ae 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -508,7 +508,7 @@
/obj/machinery/door/airlock/cult/allowed(mob/living/L)
if(!density)
return 1
- if(friendly || iscultist(L) || istype(L, /mob/living/simple_animal/shade) || isconstruct(L))
+ if(friendly || iscultist(L) || isshade(L) || isconstruct(L))
if(!stealthy)
new openingoverlaytype(loc)
return 1
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 4777796331..ecc8f9187a 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -616,7 +616,7 @@
if(defib.healdisk)
H.heal_overall_damage(25, 25)
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
- var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
+ var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
if(policy)
diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm
index 8054d8c6a4..35a68cecc6 100644
--- a/code/game/objects/items/gift.dm
+++ b/code/game/objects/items/gift.dm
@@ -8,6 +8,14 @@
* Gifts
*/
+/var/static/blacklisted_items = typecacheof(list(
+ /obj/effect,
+ /obj/belly,
+ /obj/mafia_game_board,
+ /obj/docking_port,
+ /obj/shapeshift_holder,
+ /obj/screen))
+
GLOBAL_LIST_EMPTY(possible_gifts)
/obj/item/a_gift
@@ -95,7 +103,7 @@ GLOBAL_LIST_EMPTY(possible_gifts)
var/list/gift_types_list = subtypesof(/obj/item)
for(var/V in gift_types_list)
var/obj/item/I = V
- if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT))
+ if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.item_flags) & ABSTRACT) || (is_type_in_typecache(I, blacklisted_items)))
gift_types_list -= V
GLOB.possible_gifts = gift_types_list
var/gift_type = pick(GLOB.possible_gifts)
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 58146be20f..a15e1368d8 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -492,7 +492,7 @@
var/possessed = FALSE
/obj/item/nullrod/scythe/talking/process()
- for(var/mob/living/simple_animal/shade/S in contents)
+ for(var/mob/living/simple_animal/hostile/construct/shade/S in contents)
if(S.mind)
return
else
@@ -516,7 +516,7 @@
if(LAZYLEN(candidates))
var/mob/C = pick(candidates)
- var/mob/living/simple_animal/shade/S = new(src)
+ var/mob/living/simple_animal/hostile/construct/shade/S = new(src)
S.real_name = name
S.name = name
S.ckey = C.ckey
@@ -537,7 +537,7 @@
possessed = FALSE
/obj/item/nullrod/scythe/talking/Destroy()
- for(var/mob/living/simple_animal/shade/S in contents)
+ for(var/mob/living/simple_animal/hostile/construct/shade/S in contents)
to_chat(S, "You were destroyed!")
qdel(S)
return ..()
diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm
index 36e58d8887..06d2df9272 100644
--- a/code/game/objects/items/implants/implant_hijack.dm
+++ b/code/game/objects/items/implants/implant_hijack.dm
@@ -92,10 +92,17 @@
/obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc)
if (apc.hijacker || hijacking)
return FALSE //can't remotely hijack an already hijacked APC
+
+ if(apc.being_hijacked)
+ to_chat(imp_in, "This APC is already being hijacked!")
+ return FALSE
+
+ apc.being_hijacked = TRUE
hijacking = TRUE
to_chat(imp_in, "Establishing remote connection with APC.")
if (!do_after(imp_in, 4 SECONDS,target=apc))
to_chat(imp_in, "Aborting.")
+ apc.being_hijacked = FALSE
hijacking = FALSE
return TRUE
if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT)
@@ -118,6 +125,7 @@
toggle_eyes()
else
to_chat(imp_in, "Aborting.")
+ apc.being_hijacked = FALSE
hijacking = FALSE
imp_in.light_power = 0
imp_in.light_range = 0
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index e2e0779b53..f15a4d00e1 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -150,8 +150,8 @@
item_state = "knife"
desc = "A military combat utility survival knife."
embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE)
- force = 20
- throwforce = 20
+ force = 16
+ throwforce = 16
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut")
bayonet = TRUE
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index 244b8c804b..476f35fe4c 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
if(istype(A, /obj/item/cult_bastard))
for(var/obj/item/soulstone/SS in A.contents)
SS.usability = TRUE
- for(var/mob/living/simple_animal/shade/EX in SS)
+ for(var/mob/living/simple_animal/hostile/construct/shade/EX in SS)
SSticker.mode.remove_cultist(EX.mind, 1, 0)
EX.icon_state = "ghost1"
EX.name = "Purified [EX.name]"
@@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
if(do_after(user, 40, target = SS))
playsound(src,'sound/effects/pray_chaplain.ogg',60,1)
SS.usability = TRUE
- for(var/mob/living/simple_animal/shade/EX in SS)
+ for(var/mob/living/simple_animal/hostile/construct/shade/EX in SS)
SSticker.mode.remove_cultist(EX.mind, 1, 0)
EX.icon_state = "ghost1"
EX.name = "Purified [EX.name]"
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index d35dad9f08..8e4fb05d71 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -21,6 +21,9 @@
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
resistance_flags = FIRE_PROOF
+ var/self_fueling = FALSE //Do we refill ourselves or not
+ var/nextrefueltick = 0 // How long it takes before we get a new fuel unit
+
custom_materials = list(/datum/material/iron=70, /datum/material/glass=30)
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
@@ -82,12 +85,18 @@
//This is to start fires. process() is only called if the welder is on.
open_flame()
+ //This handles refueling. Its looking at how much fuel the tool has and comparing that to how much it holds
+ //This then looks if the refuel tick has come based on world time.
+ //Then looks if we refuel ourselves or not.
+
+ if(get_fuel() < max_fuel && nextrefueltick < world.time && self_fueling)
+ nextrefueltick = world.time + 10
+ reagents.add_reagent(/datum/reagent/fuel, 1)
/obj/item/weldingtool/suicide_act(mob/user)
user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!")
return (FIRELOSS)
-
/obj/item/weldingtool/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
flamethrower_screwdriver(I, user)
@@ -318,7 +327,6 @@
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
return
-
/obj/item/weldingtool/mini
name = "emergency welding tool"
desc = "A miniature welder used during emergencies."
@@ -331,20 +339,6 @@
/obj/item/weldingtool/mini/flamethrower_screwdriver()
return
-/obj/item/weldingtool/abductor
- name = "alien welding tool"
- desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
- icon = 'icons/obj/abductor.dmi'
- icon_state = "welder"
- toolspeed = 0.1
- light_intensity = 0
- change_icons = 0
-
-/obj/item/weldingtool/abductor/process()
- if(get_fuel() <= max_fuel)
- reagents.add_reagent(/datum/reagent/fuel, 1)
- ..()
-
/obj/item/weldingtool/hugetank
name = "upgraded industrial welding tool"
desc = "An upgraded welder based of the industrial welder."
@@ -353,27 +347,6 @@
max_fuel = 80
custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
-/obj/item/weldingtool/experimental
- name = "experimental welding tool"
- desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
- icon_state = "exwelder"
- item_state = "exwelder"
- max_fuel = 40
- custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
- var/last_gen = 0
- change_icons = 0
- can_off_process = 1
- light_intensity = 1
- toolspeed = 0.5
- var/nextrefueltick = 0
-
-/obj/item/weldingtool/experimental/brass
- name = "brass welding tool"
- desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "clockwelder"
- item_state = "brasswelder"
-
/obj/item/weldingtool/bronze
name = "bronze plated welding tool"
desc = "A bronze plated welder."
@@ -382,24 +355,46 @@
icon_state = "brasswelder"
item_state = "brasswelder"
-/obj/item/weldingtool/experimental/process()
- ..()
- if(get_fuel() < max_fuel && nextrefueltick < world.time)
- nextrefueltick = world.time + 10
- reagents.add_reagent(/datum/reagent/fuel, 1)
+//Self filling welders below
+
+/obj/item/weldingtool/experimental
+ name = "experimental welding tool"
+ desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
+ icon_state = "exwelder"
+ item_state = "exwelder"
+ max_fuel = 40
+ custom_materials = list(/datum/material/iron=70, /datum/material/glass=120)
+ change_icons = 0
+ self_fueling = TRUE
+ can_off_process = 1
+ light_intensity = 1
+ toolspeed = 0.5
+
+/obj/item/weldingtool/experimental/brass
+ name = "brass welding tool"
+ desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon_state = "clockwelder"
+ item_state = "brasswelder"
+
+/obj/item/weldingtool/abductor
+ name = "alien welding tool"
+ desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "welder"
+ self_fueling = TRUE
+ toolspeed = 0.1
+ light_intensity = 0
+ change_icons = 0
/obj/item/weldingtool/advanced
name = "advanced welding tool"
desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast."
icon = 'icons/obj/advancedtools.dmi'
icon_state = "welder"
+ self_fueling = TRUE
toolspeed = 0.2
light_intensity = 0
change_icons = 0
-/obj/item/weldingtool/advanced/process()
- if(get_fuel() <= max_fuel)
- reagents.add_reagent(/datum/reagent/fuel, 1)
- ..()
-
#undef WELDER_FUEL_BURN_INTERVAL
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 03376df905..ad8dd168eb 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -508,7 +508,7 @@
if("constructwraith")
M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob )
if("shade")
- M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob )
+ M.change_mob_type( /mob/living/simple_animal/hostile/construct/shade , null, null, delmob )
/////////////////////////////////////new ban stuff
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index 05c265bc15..7a227ebc4e 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -684,10 +684,10 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0)
- enhancement = 9 // first, do harm. all of it. all of the harm. just fuck em up.
- wound_enhancement = 9
- var/fast_enhancement = 9
- var/fast_wound_enhancement = 9
+ enhancement = 6 // first, do harm. all of it. all of the harm. just fuck em up.
+ wound_enhancement = 6
+ var/fast_enhancement = 6
+ var/fast_wound_enhancement = 6
var/slow_enhancement = 20
var/slow_wound_enhancement = 20
silent = TRUE
diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
index 454870d1e1..ebb6ff5b83 100644
--- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
+++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm
@@ -216,6 +216,14 @@
else if(get_clockwork_power())
to_chat(L, "You feel a slight, static shock.")
+/obj/effect/clockwork/sigil/transmission/Initialize()
+ . = ..()
+ START_PROCESSING(SSobj, src)
+
+/obj/effect/clockwork/sigil/transmission/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ return ..()
+
/obj/effect/clockwork/sigil/transmission/process()
var/power_drained = 0
var/power_mod = 0.005
diff --git a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm
index 1d65cf9209..76738ab1de 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/clock_powerdrain.dm
@@ -1,41 +1,57 @@
-//horrifying power drain proc made for clockcult's power drain in lieu of six istypes or six for(x in view) loops
-/atom/movable/proc/power_drain(clockcult_user, drain_weapons = FALSE) //This proc as of now is only in use for void volt
+/*
+horrifying power drain proc made for clockcult's power drain in lieu of six istypes or six for(x in view) loops
+args:
+clockcult_user: If the user / source has to do with clockcult stuff
+drain_weapons: If this drains weaponry, such as batons and guns
+recursive: If this recurses through mob / storage contents. ONLY USE THIS IF IT'S NOT CALLED TOO FREQUENTLY, or I'm not liable for any lag / functional issues caused
+drain_amount: How much is drained by default; Influenced by a multiplier on most things depending on how much power they usually hold.
+*/
+/atom/movable/proc/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) //This proc as of now is only in use for void volt and transmission sigils
+ if(recursive)
+ var/succ = 0
+ for(var/V in contents)
+ var/atom/movable/target = V
+ succ += target.power_drain(clockcult_user, drain_weapons, recursive, drain_amount)
+ return succ
var/obj/item/stock_parts/cell/cell = get_cell()
if(cell)
- return cell.power_drain(clockcult_user)
+ return cell.power_drain(clockcult_user, drain_weapons, recursive, drain_amount)
return 0 //Returns 0 instead of FALSE to symbolise it returning the power amount in other cases, not TRUE aka 1
-/obj/item/melee/baton/power_drain(clockcult_user, drain_weapons = FALSE) //balance memes
+/obj/item/melee/baton/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) //balance memes
if(!drain_weapons)
return 0
- return ..()
+ var/obj/item/stock_parts/cell/cell = get_cell()
+ if(cell)
+ return cell.power_drain(clockcult_user, drain_weapons, recursive, drain_amount)
+ return 0 //No need to recurse further in batons
-/obj/item/gun/power_drain(clockcult_user, drain_weapons = FALSE) //balance memes
+/obj/item/gun/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER) //balance memes
if(!drain_weapons)
return 0
var/obj/item/stock_parts/cell/cell = get_cell()
if(!cell)
return 0
if(cell.charge)
- . = min(cell.charge, MIN_CLOCKCULT_POWER*4) //Done snowflakey because guns have far smaller cells than batons / other equipment
+ . = min(cell.charge, drain_amount*4) //Done snowflakey because guns have far smaller cells than batons / other equipment, also no need to recurse further in guns
cell.use(.)
update_icon()
-/obj/machinery/power/apc/power_drain(clockcult_user, drain_weapons = FALSE)
+/obj/machinery/power/apc/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
if(cell && cell.charge)
playsound(src, "sparks", 50, 1)
flick("apc-spark", src)
- . = min(cell.charge, MIN_CLOCKCULT_POWER*4)
- cell.use(.) //Better than a power sink!
+ . = min(cell.charge, drain_amount*4)
+ cell.use(min(cell.charge, . * 4)) //Better than a power sink!
if(!cell.charge && !shorted)
shorted = 1
visible_message("The [name]'s screen blurs with static.")
update()
update_icon()
-/obj/machinery/power/smes/power_drain(clockcult_user, drain_weapons = FALSE)
+/obj/machinery/power/smes/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
if(charge)
- . = min(charge, MIN_CLOCKCULT_POWER*4)
+ . = min(charge, drain_amount*4)
charge -= . * 50
if(!charge && !panel_open)
panel_open = TRUE
@@ -44,20 +60,26 @@
visible_message("[src]'s panel flies open with a flurry of sparks!")
update_icon()
-/obj/item/stock_parts/cell/power_drain(clockcult_user, drain_weapons = FALSE)
+/obj/item/stock_parts/cell/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
if(charge)
- . = min(charge, MIN_CLOCKCULT_POWER * 4) //Done like this because normal cells are usually quite a bit bigger than the ones used in guns / APCs
+ . = min(charge, drain_amount * 4) //Done like this because normal cells are usually quite a bit bigger than the ones used in guns / APCs
use(min(charge, . * 10)) //Usually cell-powered equipment that is not a gun has at least ten times the capacity of a gun / 5 times the amount of an APC. This adjusts the drain to account for that.
update_icon()
-/mob/living/silicon/robot/power_drain(clockcult_user, drain_weapons = FALSE)
+/mob/living/silicon/robot/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
if((!clockcult_user || !is_servant_of_ratvar(src)) && cell && cell.charge)
- . = min(cell.charge, MIN_CLOCKCULT_POWER*4)
+ . = min(cell.charge, drain_amount*8) //Silicons are very susceptible to Ratvar's might
cell.use(.)
spark_system.start()
-/obj/mecha/power_drain(clockcult_user, drain_weapons = FALSE)
- if((!clockcult_user || (occupant && !is_servant_of_ratvar(occupant))) && cell && cell.charge)
- . = min(cell.charge, MIN_CLOCKCULT_POWER*4)
- cell.use(.)
- spark_system.start()
+/obj/mecha/power_drain(clockcult_user, drain_weapons = FALSE, recursive = FALSE, drain_amount = MIN_CLOCKCULT_POWER)
+ if(!clockcult_user || (occupant && !is_servant_of_ratvar(occupant)))
+ if(recursive)
+ var/succ = 0
+ for(var/atom/movable/target in contents) //Hiding in your mech won't save you.
+ succ += target.power_drain(clockcult_user, drain_weapons, recursive, drain_amount)
+ . = succ
+ else if(cell && cell.charge)
+ . = min(cell.charge, drain_amount*4)
+ cell.use(.)
+ spark_system.start()
diff --git a/code/modules/antagonists/clockcult/clock_scripture.dm b/code/modules/antagonists/clockcult/clock_scripture.dm
index a85245e9d0..aa0f7f03fa 100644
--- a/code/modules/antagonists/clockcult/clock_scripture.dm
+++ b/code/modules/antagonists/clockcult/clock_scripture.dm
@@ -167,7 +167,7 @@ Judgement 5 converts
set waitfor = FALSE
chanting = TRUE
for(var/invocation in invocations)
- sleep(channel_time / invocations.len)
+ sleep(channel_time / (invocations.len + 1)) //So it always finishes the invocation
if(QDELETED(src) || QDELETED(slab) || !chanting)
return
if(multiple_invokers_used)
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
index eaec652f68..b559b34d5e 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
@@ -393,45 +393,49 @@
Left-click a target to fire, quickly!"
timeout_time = 20
-/datum/clockwork_scripture/channeled/void_volt
- descname = "Channeled, Power Drain"
+/datum/clockwork_scripture/void_volt
+ descname = "Pulse, Power Drain"
name = "Void Volt"
- desc = "A channeled spell that quickly drains any powercells in a radius of eight tiles, but burns the invoker. \
- Can be channeled with more cultists to increase range and split the caused damage evenly over all invokers. \
+ desc = "A spell that releases a pulse which drains the power of anything in a radius of eight tiles, but burns the invoker. \
+ Can be used with more servants to increase range and split the caused damage evenly among all invokers. \
Also charges clockwork power by a small percentage of the drained power amount, which can help offset this scriptures powercost."
- invocations = list("Channel their energy through my body... ", "... so it may fuel Engine!")
- chant_invocations = list("Make their lights fall dark!", "They shall be powerless!", "Rob them of their power!")
- chant_amount = 20
- chant_interval = 10 //100KW drain per pulse for guns / APCs / 1MW for other cells = 10 chants / 100ds / 10s to drain a charged weapon or a baton with a nonupgraded cell
- channel_time = 50
- power_cost = 300
+ invocations = list("Take the energy...", "...of their inventions...", "...and grant it to Engine...", "...for they already live in utter darkness!")
+ channel_time = 130 //You need alot of time, but it pays off. - ten times as powerful as a regular drain (done by transmission sigils) and recurses + affects weapons - incredibly useful if you can pull this off before a big fight.
+ power_cost = 500 //Relatively medium powercost, but can be offset due to it adding a part of drained power to the power pool.
multiple_invokers_used = TRUE
multiple_invokers_optional = TRUE
- usage_tip = "It may be useful to end channelling early if the burning becomes too much to handle.."
+ usage_tip = "Be sure to not be injured when using this, or the power channeled through you may overwhelm your body."
tier = SCRIPTURE_SCRIPT
primary_component = GEIS_CAPACITOR
sort_priority = 11
quickbind = TRUE
- quickbind_desc = "Quickly drains power in an area around the invoker, causing burns proportional to the amount of energy drained.
Maximum of 20 chants."
+ quickbind_desc = "Quickly drains power in an area around the invoker, causing burns proportional to the amount of energy drained."
-/datum/clockwork_scripture/channeled/void_volt/scripture_effects()
+/datum/clockwork_scripture/void_volt/chant()
invoker.visible_message("[invoker] glows in a brilliant golden light!")
invoker.add_atom_colour("#FFD700", ADMIN_COLOUR_PRIORITY)
invoker.light_power = 2
invoker.light_range = 4
invoker.light_color = LIGHT_COLOR_FIRE
invoker.update_light()
- return ..()
+ addtimer(CALLBACK(invoker, /mob.proc/stop_void_volt_glow), channel_time)
+ ..()//Do the timer & Chant
+/mob/proc/stop_void_volt_glow() //Needed so the scripture being qdel()d doesn't prevent it.
+ visible_message("[src] stops glowing...")
+ remove_atom_colour(ADMIN_COLOUR_PRIORITY)
+ light_power = 0
+ light_range = 0
+ update_light()
-/datum/clockwork_scripture/channeled/void_volt/chant_effects(chant_number)
+/datum/clockwork_scripture/void_volt/scripture_effects()
var/power_drained = 0
var/power_mod = 0.005 //Amount of power drained (generally) is multiplied with this, and subsequently dealt in damage to the invoker, then 15 times that is added to the clockwork cult's power reserves.
- var/drain_range = 8
+ var/drain_range = 12
var/additional_chanters = 0
var/list/chanters = list()
chanters += invoker
- for(var/mob/living/L in range(1, invoker))
+ for(var/mob/living/L in orange(1, invoker))
if(!L.stat && is_servant_of_ratvar(L))
additional_chanters++
chanters += L
@@ -440,22 +444,14 @@
var/turf/T = t
for(var/M in T)
var/atom/movable/A = M
- power_drained += A.power_drain(TRUE, TRUE) //Yes, this absolutely does drain weaponry. 10 pulses to drain guns / batons, though of course they can just be recharged.
+ power_drained += A.power_drain(TRUE, TRUE, TRUE, MIN_CLOCKCULT_POWER * 10) //Yes, this absolutely does drain weaponry, aswell as recurse through objects. No more hiding in lockers / mechs to avoid it.
new /obj/effect/temp_visual/ratvar/sigil/transgression(invoker.loc, 1 + (power_drained * power_mod))
var/datum/effect_system/spark_spread/S = new
S.set_up(round(1 + (power_drained * power_mod), 1), 0, get_turf(invoker))
S.start()
adjust_clockwork_power(power_drained * power_mod * 15)
for(var/mob/living/L in chanters)
- L.adjustFireLoss(round(clamp(power_drained * power_mod / (1 + additional_chanters), 0, 20), 0.1)) //No you won't just immediately melt if you do this in a very power-rich area
+ L.adjustFireLoss(round(clamp(power_drained * power_mod / (1 + additional_chanters), 0, 70), 0.1)) //No you won't just immediately melt if you do this in a very power-rich area, but it'll be close.
return TRUE
-
-/datum/clockwork_scripture/channeled/void_volt/chant_end_effects()
- invoker.visible_message("[invoker] stops glowing...")
- invoker.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
- invoker.light_power = 0
- invoker.light_range = 0
- invoker.update_light()
- return ..()
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index 6e3fcfae2a..a2ec4a47a4 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -295,6 +295,8 @@
++cultplayers
else
++alive
+ if(!alive)
+ return
var/ratio = cultplayers/alive
if(ratio > CULT_RISEN && !cult_risen)
for(var/datum/mind/B in members)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 6cc2fb94b8..276729b359 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -82,7 +82,7 @@ Runes can either be invoked by one's self or with many different cultists. Each
fail_invoke()
/obj/effect/rune/attack_animal(mob/living/simple_animal/M)
- if(istype(M, /mob/living/simple_animal/shade) || istype(M, /mob/living/simple_animal/hostile/construct))
+ if(isshade(M) || istype(M, /mob/living/simple_animal/hostile/construct))
if(construct_invoke || !iscultist(M)) //if you're not a cult construct we want the normal fail message
attack_hand(M)
else
@@ -191,7 +191,7 @@ structure_check() searches for nearby cultist structures required for the invoca
/obj/effect/rune/convert/do_invoke_glow()
return
-/obj/effect/rune/convert/invoke(var/list/invokers)
+/obj/effect/rune/convert/invoke(list/invokers)
if(rune_in_use)
return
var/list/myriad_targets = list()
@@ -203,11 +203,16 @@ structure_check() searches for nearby cultist structures required for the invoca
fail_invoke()
log_game("Offer rune failed - no eligible targets")
return
+ var/mob/living/L = pick(myriad_targets)
+ if(HAS_TRAIT(L, TRAIT_SACRIFICED))
+ fail_invoke()
+ log_game("Offer rune failed - target has already been sacrificed")
+ to_chat(invokers, "[L] has already been sacrificed!")
+ return
rune_in_use = TRUE
visible_message("[src] pulses blood red!")
var/oldcolor = color
color = RUNE_COLOR_DARKRED
- var/mob/living/L = pick(myriad_targets)
var/is_clock = is_servant_of_ratvar(L)
var/mob/living/F = invokers[1]
@@ -264,7 +269,7 @@ structure_check() searches for nearby cultist structures required for the invoca
H.uncuff()
H.stuttering = 0
H.cultslurring = 0
- return 1
+ return TRUE
/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers)
var/mob/living/first_invoker = invokers[1]
@@ -308,12 +313,16 @@ structure_check() searches for nearby cultist structures required for the invoca
stone.invisibility = 0
if(sacrificial)
+ ADD_TRAIT(sacrificial, TRAIT_SACRIFICED, "sacrificed")
if(iscyborg(sacrificial))
- playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, 1)
- sacrificial.dust() //To prevent the MMI from remaining
- else
- playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, 1)
- sacrificial.gib()
+ var/mob/living/silicon/robot/bot = sacrificial
+ playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, TRUE)
+ bot.deconstruct()
+
+ else if(ishuman(sacrificial))
+ playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE)
+ var/mob/living/carbon/human/H = sacrificial
+ H.spew_organ(2, 6)
return TRUE
/obj/effect/rune/empower
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 46961c0caf..abef18ade0 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -36,7 +36,7 @@
/obj/item/soulstone/examine(mob/user)
. = ..()
- if(usability || iscultist(user, TRUE) || iswizard(user) || isobserver(user))
+ if(usability || iscultist(user) || iswizard(user) || isobserver(user))
if (old_shard)
. += "A soulstone, used to capture a soul, either from dead humans or from freed shades."
else
@@ -46,7 +46,7 @@
. += "This shard is spent; it is now just a creepy rock."
/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle.
- for(var/mob/living/simple_animal/shade/A in src)
+ for(var/mob/living/simple_animal/hostile/construct/shade/A in src)
A.death()
return ..()
@@ -58,7 +58,7 @@
to_chat(user, "Your body is wracked with debilitating pain!")
return
if(spent)
- to_chat(user, "There is no power left in the shard.")
+ to_chat(user, "There is no power left in [src].")
return
if(!ishuman(M))//If target is not a human.
return ..()
@@ -81,7 +81,7 @@
release_shades(user)
/obj/item/soulstone/proc/release_shades(mob/user)
- for(var/mob/living/simple_animal/shade/A in src)
+ for(var/mob/living/simple_animal/hostile/construct/shade/A in src)
A.status_flags &= ~GODMODE
A.forceMove(get_turf(user))
A.mobility_flags = MOBILITY_FLAGS_DEFAULT
@@ -103,12 +103,12 @@
/obj/structure/constructshell/examine(mob/user)
. = ..()
- if(iscultist(user, TRUE) || iswizard(user) || user.stat == DEAD)
- . += "A construct shell, used to house bound souls from a soulstone."
- . += "Placing a soulstone with a soul into this shell allows you to produce your choice of the following:"
- . += "An Artificer, which can produce more shells and soulstones, as well as fortifications."
- . += "A Wraith, which does high damage and can jaunt through walls, though it is quite fragile."
- . += "A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."
+ if(iscultist(user) || iswizard(user) || user.stat == DEAD)
+ . += {"A construct shell, used to house bound souls from a soulstone.\n
+ Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n
+ An Artificer, which can produce more shells and soulstones, as well as fortifications.\n
+ A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n
+ A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."}
/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/soulstone))
@@ -145,14 +145,14 @@
if("VICTIM")
var/mob/living/carbon/human/T = target
var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
- if(C && C.cult_team?.is_sacrifice_target(T.mind))
+ if(C?.cult_team.is_sacrifice_target(T.mind))
if(iscultist(user))
to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"")
else
- to_chat(user, "The soulstone seems to reject this soul.")
+ to_chat(user, "[src] seems to reject this soul.")
return FALSE
if(contents.len)
- to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.")
+ to_chat(user, "Capture failed!: [src] is full! Free an existing soul to make room.")
else
if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD))
if(T.client == null)
@@ -167,7 +167,7 @@
to_chat(user, "Capture failed!: Kill or maim the victim first!")
if("SHADE")
- var/mob/living/simple_animal/shade/T = target
+ var/mob/living/simple_animal/hostile/construct/shade/T = target
if(contents.len)
to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.")
else
@@ -177,13 +177,13 @@
T.health = T.maxHealth
icon_state = "soulstone2"
name = "soulstone: Shade of [T.real_name]"
- to_chat(T, "Your soul has been captured by the soulstone. Its arcane energies are reknitting your ethereal form.")
+ to_chat(T, "Your soul has been captured by [src]. Its arcane energies are reknitting your ethereal form.")
if(user != T)
- to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within the soulstone.")
+ to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within [src].")
if("CONSTRUCT")
var/obj/structure/constructshell/T = target
- var/mob/living/simple_animal/shade/A = locate() in src
+ var/mob/living/simple_animal/hostile/construct/shade/A = locate() in src
if(A)
var/construct_class = alert(user, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
if(!T || !T.loc)
@@ -199,8 +199,8 @@
if(iscultist(user) || iswizard(user))
makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc)
- else
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc)
+ else
+ return
for(var/datum/mind/B in SSticker.mode.cult)
if(B == A.mind)
SSticker.mode.cult -= A.mind
@@ -208,19 +208,24 @@
qdel(T)
qdel(src)
else
- to_chat(user, "Creation failed!: The soul stone is empty! Go kill someone!")
+ to_chat(user, "Creation failed!: [src] is empty! Go kill someone!")
/proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null)
+ if(QDELETED(target))
+ return
var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target)))
if(stoner)
newstruct.faction |= "[REF(stoner)]"
newstruct.master = stoner
var/datum/action/innate/seek_master/SM = new()
SM.Grant(newstruct)
- target.transfer_ckey(newstruct)
+ newstruct.key = target.key
+ if(target.type == /mob/living/simple_animal/hostile/construct/shade) //Make sure we remember which body belonged to the shade
+ var/mob/living/simple_animal/hostile/construct/shade/shade = target
+ newstruct.original_mind = shade.original_mind
var/obj/screen/alert/bloodsense/BS
- if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode)
+ if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker?.mode)
SSticker.mode.add_cultist(newstruct.mind, 0)
if(iscultist(stoner) || cultoverride)
to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner ? stoner.p_their() : "their"] orders and help [stoner ? stoner.p_them() : "them"] complete [stoner ? stoner.p_their() : "their"] goals at all costs.")
@@ -234,19 +239,18 @@
/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, vic = 0)
- new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
+ if(HAS_TRAIT_FROM(T, TRAIT_SACRIFICED, "sacrificed"))
+ if(user)
+ to_chat(user, "This body has already been harvested!")
+ return
+ ADD_TRAIT(T, TRAIT_SACRIFICED, "sacrificed")
T.stop_sound_channel(CHANNEL_HEARTBEAT)
- T.invisibility = INVISIBILITY_ABSTRACT
- T.dust_animation()
- QDEL_IN(T, 5)
- var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src)
- S.status_flags |= GODMODE //So they won't die inside the stone somehow
- S.mobility_flags = NONE //Can't move out of the soul stone
+ var/mob/living/simple_animal/hostile/construct/shade/S = new /mob/living/simple_animal/hostile/construct/shade(src)
S.name = "Shade of [T.real_name]"
S.real_name = "Shade of [T.real_name]"
T.transfer_ckey(S)
+ S.original_mind = T.mind.current
S.copy_languages(T, LANGUAGE_MIND)//Copies the old mobs languages into the new mob holder.
- S.copy_languages(user, LANGUAGE_MASTER)
S.update_atom_languages()
grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue
if(user)
@@ -264,7 +268,7 @@
to_chat(user, "Capture successful!: [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.")
-/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U)
+/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/user)
var/mob/dead/observer/chosen_ghost
for(var/mob/dead/observer/ghost in GLOB.player_list) //We put them back in their body
@@ -279,13 +283,12 @@
if(!T)
return FALSE
if(!chosen_ghost)
- to_chat(U, "There were no spirits willing to become a shade.")
+ to_chat(user, "There were no spirits willing to become a shade.")
return FALSE
if(contents.len) //If they used the soulstone on someone else in the meantime
return FALSE
T.ckey = chosen_ghost.ckey
for(var/obj/item/W in T)
T.dropItemToGround(W)
- init_shade(T, U)
- qdel(T)
+ init_shade(T, user)
return TRUE
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index a2a55ee6b1..6049ee965e 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -237,12 +237,21 @@
. += "Alt-click to [locked ? "unlock" : "lock"] the interface."
/obj/machinery/airalarm/ui_status(mob/user)
- if(hasSiliconAccessInArea(user) && aidisabled)
- to_chat(user, "AI control has been disabled.")
- else if(!shorted)
+ if(hasSiliconAccessInArea(user))
+ if(aidisabled)
+ to_chat(user, "AI control has been disabled")
+ return UI_CLOSE
+ else if(!issilicon(user)) //True sillycones use ..()
+ return UI_INTERACTIVE
+ if(!shorted)
return ..()
return UI_CLOSE
+/obj/machinery/airalarm/can_interact(mob/user)
+ . = ..()
+ if (!issilicon(user) && hasSiliconAccessInArea(user))
+ return TRUE
+
/obj/machinery/airalarm/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
index a07f131d62..9aa3c8c16d 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm
@@ -196,8 +196,8 @@
icon_state = "inje_map-1"
/obj/machinery/atmospherics/components/unary/outlet_injector/layer3
- piping_layer = 2
- icon_state = "inje_map-2"
+ piping_layer = 3
+ icon_state = "inje_map-3"
/obj/machinery/atmospherics/components/unary/outlet_injector/on
on = TRUE
@@ -207,8 +207,8 @@
icon_state = "inje_map-1"
/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3
- piping_layer = 2
- icon_state = "inje_map-2"
+ piping_layer = 3
+ icon_state = "inje_map-3"
/obj/machinery/atmospherics/components/unary/outlet_injector/atmos
frequency = FREQ_ATMOS_STORAGE
diff --git a/code/modules/awaymissions/mission_code/jungleresort.dm b/code/modules/awaymissions/mission_code/jungleresort.dm
new file mode 100644
index 0000000000..6f66f1135a
--- /dev/null
+++ b/code/modules/awaymissions/mission_code/jungleresort.dm
@@ -0,0 +1,44 @@
+// welcome to the jungle, we got fun and games
+
+//areas
+
+/area/awaymission/jungleresort
+ name = "Jungle Resort"
+ icon_state = "awaycontent30"
+
+//objects
+
+/obj/item/paper/crumpled/awaymissions/jungleresort/notice
+ name = "Resort Notice"
+ info = "Due to unforeseen circumstances and the disappearance of several resort employees and visitors, the resort shall be closed to the public until further notice. - Resort Manager Joe Lawrence"
+
+/obj/item/melee/chainofcommand/jungle
+ name = "treasure hunter's whip"
+ desc = "The tool of a fallen treasure hunter, old and outdated, it still stings like hell to be hit by."
+ hitsound = 'sound/weapons/whip.ogg'
+ icon_state = "whip"
+
+//turfs
+
+/turf/open/water/jungle
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+
+/turf/open/floor/plating/dirt/jungle
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+
+/turf/open/floor/plating/dirt/dark/jungle
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+
+/turf/closed/mineral/random/labormineral/jungle
+ baseturfs = /turf/open/floor/plating/asteroid
+ turf_type = /turf/open/floor/plating/asteroid
+
+//mobs
+
+/mob/living/carbon/monkey/punpun/curiousgorge
+ name = "Curious Gorge"
+ pet_monkey_names = list("Curious Gorge", "Jungle Gorge", "Jungah Joe", "Mr. Monke")
+ rare_pet_monkey_names = list("Sun Mukong", "Monkey Kong")
+
+/mob/living/simple_animal/hostile/jungle/leaper/boss
+ health = 450
\ No newline at end of file
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 7d33a87111..c581e402a6 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -268,7 +268,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
else
prefs = new /datum/preferences(src)
GLOB.preferences_datums[ckey] = prefs
-
+
addtimer(CALLBACK(src, .proc/ensure_keys_set), 10) //prevents possible race conditions
prefs.last_ip = address //these are gonna be used for banning
@@ -561,36 +561,49 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!query_client_in_db.Execute())
qdel(query_client_in_db)
return
- if(!query_client_in_db.NextRow())
- if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey] && !(ckey in GLOB.bunker_passthrough))
- log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
- message_admins("Failed Login: [key] - New account attempting to connect during panic bunker")
- to_chat(src, "You must first join the Discord to verify your account before joining this server.
To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: https://discord.gg/E6SQuhz
If you have already done so, wait a few minutes then try again; sometimes the server needs to fully load before you can join.") //CIT CHANGE - makes the panic bunker disconnect message point to the discord
- var/list/connectiontopic_a = params2list(connectiontopic)
- var/list/panic_addr = CONFIG_GET(string/panic_server_address)
- if(panic_addr && !connectiontopic_a["redirect"])
- var/panic_name = CONFIG_GET(string/panic_server_name)
- to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].")
- winset(src, null, "command=.options")
- src << link("[panic_addr]?redirect=1")
- qdel(query_client_in_db)
- qdel(src)
- return
+ if(!query_client_in_db.NextRow()) //new user detected
+ if(!holder && !GLOB.deadmins[ckey])
+ if(CONFIG_GET(flag/panic_bunker) && !(ckey in GLOB.bunker_passthrough))
+ log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
+ message_admins("Failed Login: [key] - New account attempting to connect during panic bunker")
+ to_chat(src, "You must first join the Discord to verify your account before joining this server.
To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: https://discord.gg/E6SQuhz
If you have already done so, wait a few minutes then try again; sometimes the server needs to fully load before you can join.") //CIT CHANGE - makes the panic bunker disconnect message point to the discord
+ var/list/connectiontopic_a = params2list(connectiontopic)
+ var/list/panic_addr = CONFIG_GET(string/panic_server_address)
+ if(panic_addr && !connectiontopic_a["redirect"])
+ var/panic_name = CONFIG_GET(string/panic_server_name)
+ to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].")
+ winset(src, null, "command=.options")
+ src << link("[panic_addr]?redirect=1")
+ qdel(query_client_in_db)
+ qdel(src)
+ return
- new_player = 1
- account_join_date = sanitizeSQL(findJoinDate())
- var/sql_key = sanitizeSQL(key)
- var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `byond_key`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', '[sql_key]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])")
- if(!query_add_player.Execute())
- qdel(query_client_in_db)
+ new_player = 1
+ account_join_date = sanitizeSQL(findJoinDate())
+ var/sql_key = sanitizeSQL(key)
+ var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `byond_key`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', '[sql_key]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])")
+ if(!query_add_player.Execute())
+ qdel(query_client_in_db)
+ qdel(query_add_player)
+ return
qdel(query_add_player)
- return
- qdel(query_add_player)
- if(!account_join_date)
- account_join_date = "Error"
- account_age = -1
- else if(ckey in GLOB.bunker_passthrough)
- GLOB.bunker_passthrough -= ckey
+ if(!account_join_date)
+ account_join_date = "Error"
+ account_age = -1
+ else if(ckey in GLOB.bunker_passthrough)
+ GLOB.bunker_passthrough -= ckey
+ if(CONFIG_GET(flag/age_verification)) //setup age verification
+ if(!set_db_player_flags())
+ message_admins(usr, "ERROR: Unable to read player flags from database. Please check logs.")
+ return
+ else
+ var/dbflags = prefs.db_flags
+ if(!(dbflags & DB_FLAG_AGE_CONFIRMATION_COMPLETE)) //they have not completed age verification
+ if((ckey in GLOB.bunker_passthrough)) //they're verified in the panic bunker though
+ update_flag_db(DB_FLAG_AGE_CONFIRMATION_COMPLETE, TRUE)
+ else
+ update_flag_db(DB_FLAG_AGE_CONFIRMATION_INCOMPLETE, TRUE)
+
qdel(query_client_in_db)
var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'")
if(!query_get_client_age.Execute())
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index d817cc3a53..196c1ce0ed 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -482,7 +482,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += " Change
"
mutant_colors = TRUE
- if (CONFIG_GET(number/body_size_min) != CONFIG_GET(number/body_size_max))
dat += "Sprite Size: [features["body_size"]*100]%
"
if(!(NOEYES in pref_species.species_traits))
@@ -2245,21 +2244,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
gender = chosengender
if("body_size")
- var/min = CONFIG_GET(number/body_size_min)
- var/max = CONFIG_GET(number/body_size_max)
- var/danger = CONFIG_GET(number/threshold_body_size_slowdown)
- var/new_body_size = input(user, "Choose your desired sprite size: ([min*100]%-[max*100]%)\nWarning: This may make your character look distorted[danger > min ? "! Additionally, a proportional movement speed penalty will be applied to characters smaller than [danger*100]%." : "!"]", "Character Preference", features["body_size"]*100) as num|null
- if (new_body_size)
- new_body_size = clamp(new_body_size * 0.01, min, max)
- var/dorfy
- if((new_body_size + 0.01) < danger) // Adding 0.01 as a dumb fix to prevent the warning message from appearing when exactly at threshold... Not sure why that happens in the first place.
- dorfy = alert(user, "You have chosen a size below the slowdown threshold of [danger*100]%. For balancing purposes, the further you go below this percentage, the slower your character will be. Do you wish to keep this size?", "Speed Penalty Alert", "Yes", "Move it to the threshold", "No")
- if(dorfy == "Move it to the threshold")
- new_body_size = danger
- if(!dorfy) //Aborts if this var is somehow empty
- return
- if(dorfy != "No")
- features["body_size"] = new_body_size
+ var/new_body_size = input(user, "Choose your desired sprite size: (90-125%)\nWarning: This may make your character look distorted. Additionally, any size under 100% takes a 10% maximum health penalty", "Character Preference", features["body_size"]*100) as num|null
+ if(new_body_size)
+ features["body_size"] = clamp(new_body_size * 0.01, CONFIG_GET(number/body_size_min), CONFIG_GET(number/body_size_max))
+
if("tongue")
var/selected_custom_tongue = input(user, "Choose your desired tongue (none means your species tongue)", "Character Preference") as null|anything in GLOB.roundstart_tongues
if(selected_custom_tongue)
@@ -2653,6 +2641,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else if(firstspace == name_length)
real_name += "[pick(GLOB.last_names)]"
+ //reset size if applicable
+ if(character.dna.features["body_size"])
+ var/initial_old_size = character.dna.features["body_size"]
+ character.dna.features["body_size"] = RESIZE_DEFAULT_SIZE
+ character.dna.update_body_size(initial_old_size)
+
character.real_name = nameless ? "[real_name] #[rand(10000, 99999)]" : real_name
character.name = character.real_name
character.nameless = nameless
@@ -2695,8 +2689,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
pref_species = new /datum/species/human
save_character()
- var/old_size = character.dna.features["body_size"]
-
character.dna.features = features.Copy()
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
character.dna.species.eye_type = eye_type
@@ -2706,6 +2698,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.dna.nameless = character.nameless
character.dna.custom_species = character.custom_species
+ var/old_size = RESIZE_DEFAULT_SIZE
+ if(isdwarf(character))
+ character.dna.features["body_size"] = RESIZE_DEFAULT_SIZE
+
if((parent && parent.can_have_part("meat_type")) || pref_species.mutant_bodyparts["meat_type"])
character.type_of_meat = GLOB.meat_types[features["meat_type"]]
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index b88bef1c87..40ce543d31 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -68,8 +68,8 @@
triggering = TRUE
if (alert_observers)
- message_admins("Random Event triggering in 10 seconds: [name] (CANCEL)")
- sleep(100)
+ message_admins("Random Event triggering in 30 seconds: [name] (CANCEL)")
+ sleep(300)
var/gamemode = SSticker.mode.config_tag
var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE)
if(!canSpawnEvent(players_amt, gamemode))
diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm
index 394294db37..1b0c19274b 100644
--- a/code/modules/events/anomaly.dm
+++ b/code/modules/events/anomaly.dm
@@ -44,7 +44,13 @@
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/start()
- var/turf/T = pick(get_area_turfs(impact_area))
+ var/list/turf/valid = list()
+ for(var/i in get_area_turfs(impact_area))
+ var/turf/T = i
+ if(T.density)
+ continue
+ valid += T
+ var/turf/T = pick(valid)
var/newAnomaly
if(T)
newAnomaly = new anomaly_path(T)
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index 3bcec9f471..8bada6da77 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -219,7 +219,7 @@
suit_type = /obj/item/clothing/suit/space
helmet_type = /obj/item/clothing/head/helmet/space
mask_type = /obj/item/clothing/mask/breath
- storage_type = /obj/item/tank/internals/oxygen
+ storage_type = /obj/item/tank/jetpack/void
/obj/machinery/loot_locator
@@ -275,6 +275,7 @@
/obj/machinery/computer/piratepad_control
name = "cargo hold control terminal"
+ resistance_flags = INDESTRUCTIBLE
ui_x = 600
ui_y = 230
var/status_report = "Ready for delivery."
diff --git a/code/modules/holiday/halloween/halloween.dm b/code/modules/holiday/halloween/halloween.dm
index d3b9b92b4f..d44b94aaf3 100644
--- a/code/modules/holiday/halloween/halloween.dm
+++ b/code/modules/holiday/halloween/halloween.dm
@@ -86,7 +86,7 @@
else if(trapped == HOWLING_GHOST)
visible_message("[pick("OooOOooooOOOoOoOOooooOOOOO", "BooOOooOooooOOOO", "BOO!", "WoOOoOoooOooo")]")
playsound(loc, 'sound/spookoween/ghosty_wind.ogg', 300, 1)
- new /mob/living/simple_animal/shade/howling_ghost(loc)
+ new /mob/living/simple_animal/hostile/construct/shade/howling_ghost(loc)
trapped = 0
else if(trapped == SCARY_BATS)
@@ -123,7 +123,7 @@
//Spookoween Ghost//
////////////////////
-/mob/living/simple_animal/shade/howling_ghost
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost
name = "ghost"
real_name = "ghost"
icon = 'icons/mob/mob.dmi'
@@ -137,13 +137,13 @@
layer = 4
var/timer = 0
-/mob/living/simple_animal/shade/howling_ghost/Initialize()
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/Initialize()
. = ..()
icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2")
icon_living = icon_state
timer = rand(1,15)
-/mob/living/simple_animal/shade/howling_ghost/Life()
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/Life()
..()
timer--
if(prob(20))
@@ -152,16 +152,16 @@
spooky_ghosty()
timer = rand(1,15)
-/mob/living/simple_animal/shade/howling_ghost/proc/EtherealMove(direction)
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/proc/EtherealMove(direction)
forceMove(get_step(src, direction))
setDir(direction)
-/mob/living/simple_animal/shade/howling_ghost/proc/roam()
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/proc/roam()
if(prob(80))
var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST)
EtherealMove(direction)
-/mob/living/simple_animal/shade/howling_ghost/proc/spooky_ghosty()
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/proc/spooky_ghosty()
if(prob(20)) //haunt
playsound(loc, pick('sound/spookoween/ghosty_wind.ogg','sound/spookoween/ghost_whisper.ogg','sound/spookoween/chain_rattling.ogg'), 300, 1)
if(prob(10)) //flickers
@@ -175,7 +175,7 @@
step(I,direction)
return
-/mob/living/simple_animal/shade/howling_ghost/CanPass(atom/movable/mover, turf/target)
+/mob/living/simple_animal/hostile/construct/shade/howling_ghost/CanPass(atom/movable/mover, turf/target)
return 1
///////////////////////////
diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm
index 16151c4191..90016954fc 100644
--- a/code/modules/holiday/halloween/jacqueen.dm
+++ b/code/modules/holiday/halloween/jacqueen.dm
@@ -50,6 +50,13 @@
var/cached_z
/// I'm busy, don't move.
var/busy = FALSE
+ var/static/blacklisted_items = typecacheof(list(
+ /obj/effect,
+ /obj/belly,
+ /obj/mafia_game_board,
+ /obj/docking_port,
+ /obj/shapeshift_holder,
+ /obj/screen))
/mob/living/simple_animal/jacq/Initialize()
..()
@@ -112,7 +119,7 @@
/mob/living/simple_animal/jacq/proc/jacqrunes(message, mob/living/carbon/C) //Displays speechtext over Jacq for the user only.
var/atom/hearer = C
- var/list/spans = list("spooky")
+ var/list/spans = list("spooky")
new /datum/chatmessage(message, src, hearer, spans)
@@ -228,10 +235,13 @@
return
var/new_obj = pick(subtypesof(/obj))
- //for(var/item in blacklist)
- // if(new_obj == item)
- // panic()
+ for(var/item in blacklisted_items)
+ if(is_type_in_typecache(new_obj, blacklisted_items))
+ new_obj = /obj/item/reagent_containers/food/snacks/special_candy
var/reward = new new_obj(C.loc)
+ if(new_obj == /obj/item/reagent_containers/food/snacks/special_candy)
+ new new_obj(C.loc)
+ new new_obj(C.loc) //Giving them back their candies in case it's something from the blacklist or if the game literally rolled candies. What rotten luck.
C.put_in_hands(reward)
visible_message("[src] waves her hands, magicking up a [reward] from thin air, \"There ye are [gender], enjoy! \"")
jacqrunes("There ye are [gender], enjoy!", C)
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 429dc98e8a..2ca4d5fd2e 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -109,9 +109,12 @@ GLOBAL_LIST(labor_sheet_values)
qdel(src)
/obj/machinery/mineral/labor_claim_console/emag_act(mob/user)
- if(!(obj_flags & EMAGGED))
- obj_flags |= EMAGGED
- to_chat(user, "PZZTTPFFFT")
+ . = ..()
+ if((obj_flags & EMAGGED))
+ return
+ obj_flags |= EMAGGED
+ to_chat(user, "PZZTTPFFFT")
+ return TRUE
/**********************Prisoner Collection Unit**************************/
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 1fdf3102a9..91123c0c7f 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -78,6 +78,28 @@
popup.set_content(output)
popup.open(FALSE)
+/mob/dead/new_player/proc/age_verify()
+ if(CONFIG_GET(flag/age_verification) && !check_rights_for(client, R_ADMIN) && !(client.ckey in GLOB.bunker_passthrough)) //make sure they are verified
+ if(!client.set_db_player_flags())
+ message_admins("Blocked [src] from new player panel because age gate could not access player database flags.")
+ return FALSE
+ else
+ var/dbflags = client.prefs.db_flags
+ if(dbflags & DB_FLAG_AGE_CONFIRMATION_INCOMPLETE) //they have not completed age gate
+ var/age_verification = askuser(src, "Are you 18+", "Age Gate", "I am 18+", "I am not 18+", null, TRUE, null)
+ if(age_verification != 1)
+ client.add_system_note("Automated-Age-Gate", "Failed automatic age gate process")
+ qdel(client) //kick the user
+ return FALSE
+ else
+ //they claim to be of age, so allow them to continue and update their flags
+ client.update_flag_db(DB_FLAG_AGE_CONFIRMATION_COMPLETE, TRUE)
+ client.update_flag_db(DB_FLAG_AGE_CONFIRMATION_INCOMPLETE, FALSE)
+ //log this
+ message_admins("[ckey] has joined through the automated age gate process.")
+ return TRUE
+ return TRUE
+
/mob/dead/new_player/Topic(href, href_list[])
if(src != usr)
return 0
@@ -85,6 +107,9 @@
if(!client)
return 0
+ if(!age_verify())
+ return
+
//Determines Relevent Population Cap
var/relevant_cap
var/hpc = CONFIG_GET(number/hard_popcap)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 26486f255a..ebe5372e63 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -611,7 +611,7 @@
update_mobility()
UpdateStaminaBuffer()
update_health_hud()
-
+
/mob/living/carbon/update_sight()
if(!client)
return
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 710d49c075..3aa26de5cf 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -212,6 +212,7 @@
// called when something steps onto a human
// this could be made more general, but for now just handle mulebot
/mob/living/carbon/human/Crossed(atom/movable/AM)
+ SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM)
var/mob/living/simple_animal/bot/mulebot/MB = AM
if(istype(MB))
MB.RunOver(src)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 76a9c00ed1..10295a7de4 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -1,4 +1,6 @@
/mob/living/carbon/human/getarmor(def_zone, type)
+ if(HAS_TRAIT(src, TRAIT_ARMOR_BROKEN)) //trait that makes it act as if you have no armor at all, you take natural damage from all sources
+ return 0
var/armorval = 0
var/organnum = 0
@@ -18,7 +20,6 @@
organnum++
return (armorval/max(organnum, 1))
-
/mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, d_type)
if(!d_type || !def_zone)
return 0
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 8b78a9212d..74675a03f0 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1451,9 +1451,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
target.apply_damage(damage*1.5, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
target.apply_damage(damage*0.5, STAMINA, affecting, armor_block)
log_combat(user, target, "kicked")
- else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.3x raw damage + 1x stam damage, and have some armor pierce
- target.apply_damage(damage*1.3, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
- target.apply_damage(damage, STAMINA, affecting, armor_block)
+ else if(HAS_TRAIT(user, TRAIT_MAULER)) // mauler punches deal 1.1x raw damage + 1.3x stam damage, and have some armor pierce
+ target.apply_damage(damage*1.1, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
+ target.apply_damage(damage*1.3, STAMINA, affecting, armor_block)
log_combat(user, target, "punched (mauler)")
else //other attacks deal full raw damage + 2x in stamina damage
target.apply_damage(damage, attack_type, affecting, armor_block, wound_bonus = punchwoundbonus)
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index a87c92bdb9..ecac5fda10 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -714,18 +714,25 @@
return FALSE
/datum/action/innate/slime_puddle/Activate()
+ var/mob/living/carbon/human/H = owner
+ //if they have anything stuck to their hands, we immediately say 'no' and return
+ for(var/obj/item/I in H.held_items)
+ if(HAS_TRAIT(I, TRAIT_NODROP))
+ to_chat(owner, "There's something stuck to your hand, stopping you from transforming!")
+ return
if(isjellyperson(owner) && IsAvailable())
transforming = TRUE
UpdateButtonIcon()
- var/mob/living/carbon/human/H = owner
var/mutcolor = "#" + H.dna.features["mcolor"]
if(!is_puddle)
- if(CHECK_MOBILITY(H, MOBILITY_USE))
- is_puddle = TRUE
- owner.cut_overlays()
+ if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle
+ is_puddle = TRUE //so we know which transformation to use when its used
+ owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite
var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir)
puddle_effect.color = mutcolor
- H.Stun(in_transformation_duration, ignore_canstun = TRUE)
+ H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming
+
+ //series of traits that make up the puddle behaviour
ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT)
ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT)
ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT)
@@ -733,19 +740,30 @@
ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT)
ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT)
ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT)
+ ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT)
+ H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed
+
H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
- H.update_disabled_bodyparts(silent = TRUE)
+
H.layer -= 1 //go one layer down so people go over you
- ENABLE_BITFIELD(H.pass_flags, PASSMOB)
- squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg'))
- sleep(in_transformation_duration)
+ ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you
+ squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you
+
+ //if the user is a changeling, retract their sting
+ H.unset_sting()
+
+ sleep(in_transformation_duration) //wait for animation to end
+
+ //set the puddle overlay up
var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state)
puddle_overlay.color = mutcolor
tracked_overlay = puddle_overlay
owner.add_overlay(puddle_overlay)
+
transforming = FALSE
UpdateButtonIcon()
else
+ //like the above, but reverse everything done!
owner.cut_overlay(tracked_overlay)
var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir)
puddle_effect.color = mutcolor
@@ -758,6 +776,7 @@
REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT)
REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT)
REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT)
+ REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT)
H.update_disabled_bodyparts(silent = TRUE)
H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle)
H.layer += 1 //go one layer back above!
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 676248c463..558fdc6594 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -15,8 +15,13 @@
skinned_type = /obj/item/stack/sheet/animalhide/human
var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
species_category = SPECIES_CATEGORY_UNDEAD
+ var/batform_enabled = TRUE
-/datum/species/vampire/check_roundstart_eligible()
+/datum/species/vampire/roundstart
+ id = SPECIES_VAMPIRE_WEAK
+ batform_enabled = FALSE
+
+/datum/species/vampire/roundstart/check_roundstart_eligible()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
return TRUE
return FALSE
@@ -27,8 +32,9 @@
if(!C.dna.skin_tone_override)
C.skin_tone = "albino"
C.update_body(0)
- var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new
- C.AddSpell(B)
+ if(batform_enabled)
+ var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new
+ C.AddSpell(B)
/datum/species/vampire/on_species_loss(mob/living/carbon/C)
. = ..()
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 4ee52a08a6..ce8bbc5dab 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -443,6 +443,7 @@
key = "me"
key_third_person = "custom"
message = null
+ emote_type = EMOTE_BOTH
/datum/emote/living/custom/proc/check_invalid(mob/user, input)
if(stop_bad_mime.Find(input, 1, 1))
@@ -462,24 +463,12 @@
else if(!params)
var/custom_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN)
if(custom_emote && !check_invalid(user, custom_emote))
- var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
- switch(type)
- if("Visible")
- emote_type = EMOTE_VISIBLE
- if("Hearable")
- emote_type = EMOTE_AUDIBLE
- else
- alert("Unable to use this emote, must be either hearable or visible.")
- return
message = custom_emote
else
message = params
- if(type_override)
- emote_type = type_override
message = user.say_emphasis(message)
. = ..()
message = null
- emote_type = EMOTE_VISIBLE
/datum/emote/living/custom/replace_pronoun(mob/user, message)
return message
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 95bd8d8991..af8382a82b 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -44,6 +44,7 @@
var/can_repair_constructs = FALSE
var/can_repair_self = FALSE
var/runetype
+ var/original_mind
/mob/living/simple_animal/hostile/construct/Initialize()
. = ..()
@@ -66,6 +67,11 @@
CR.button.screen_loc = "6:[pos],4:-2"
CR.button.moved = "6:[pos],4:-2"
+/mob/living/simple_animal/hostile/construct/death()
+ if(original_mind)
+ transfer_ckey(original_mind)
+ ..()
+
/mob/living/simple_animal/hostile/construct/Login()
..()
to_chat(src, playstyle_string)
@@ -107,7 +113,7 @@
return
/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)
- return 0
+ return FALSE
/mob/living/simple_animal/hostile/construct/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index f0ab3fba4c..477483862b 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -87,7 +87,7 @@ Difficulty: Medium
return FALSE
return ..()
-/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message)
+/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, omni = FALSE)
if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit
return
return ..()
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index 75182b85e5..b46b56f472 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -1,53 +1,33 @@
-/mob/living/simple_animal/shade
+/mob/living/simple_animal/hostile/construct/shade
name = "Shade"
real_name = "Shade"
desc = "A bound spirit."
- gender = PLURAL
- icon = 'icons/mob/mob.dmi'
icon_state = "shade"
icon_living = "shade"
mob_biotypes = MOB_SPIRIT
maxHealth = 40
health = 40
- spacewalk = TRUE
- healable = 0
- speak_emote = list("hisses")
emote_hear = list("wails.","screeches.")
response_help_continuous = "puts their hand through"
response_help_simple = "put your hand through"
- response_disarm_continuous = "flails at"
- response_disarm_simple = "flail at"
- response_harm_continuous = "punches"
- response_harm_simple = "punch"
- speak_chance = 1
melee_damage_lower = 5
melee_damage_upper = 12
attack_verb_continuous = "metaphysically strikes"
attack_verb_simple = "metaphysically strike"
- minbodytemp = 0
- maxbodytemp = INFINITY
- 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)
- stop_automated_movement = 1
- status_flags = 0
- faction = list("cult")
- status_flags = CANPUSH
- movement_type = FLYING
+ speed = -1 //they don't have to lug a body made of runed metal around
loot = list(/obj/item/ectoplasm)
- del_on_death = TRUE
- initial_language_holder = /datum/language_holder/construct
- blood_volume = 0
- has_field_of_vision = FALSE //we are a spoopy ghost
+ playstyle_string = "You are a shade! Your job is to survive until you are granted a shell, and help out cultists with casting runes!"
-/mob/living/simple_animal/shade/death()
+/mob/living/simple_animal/hostile/construct/shade/death()
deathmessage = "lets out a contented sigh as [p_their()] form unwinds."
..()
-/mob/living/simple_animal/shade/canSuicide()
+/mob/living/simple_animal/hostile/construct/shade/canSuicide()
if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone
- return 0
+ return FALSE
return ..()
-/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M)
+/mob/living/simple_animal/hostile/construct/shade/attack_animal(mob/living/simple_animal/M)
if(isconstruct(M))
var/mob/living/simple_animal/hostile/construct/C = M
if(!C.can_repair_constructs)
@@ -62,7 +42,7 @@
else if(src != M)
return ..()
-/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri
+/mob/living/simple_animal/hostile/construct/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri
if(istype(O, /obj/item/soulstone))
var/obj/item/soulstone/SS = O
SS.transfer_soul("SHADE", src, user)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ab2556abb5..3416a8b337 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -127,8 +127,9 @@
* * ignored_mobs (optional) doesn't show any message to any given mob in the list.
* * target (optional) is the other mob involved with the visible message. For example, the attacker in many combat messages.
* * target_message (optional) is what the target mob will see e.g. "[src] does something to you!"
+ * * omni (optional) if TRUE, will show to users no matter what.
*/
-/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message)
+/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message, omni = FALSE)
var/turf/T = get_turf(src)
if(!T)
return
@@ -139,20 +140,26 @@
if(target_message && target && istype(target) && target.client)
hearers -= target
- //This entire if/else chain could be in two lines but isn't for readibilties sake.
- var/msg = target_message
- if(target.see_invisible[user.say_emphasis(message)]"
- if(emote_type == EMOTE_AUDIBLE)
- user.audible_message(message=message,hearing_distance=1, ignored_mobs = GLOB.dead_mob_list)
- else
- user.visible_message(message=message,self_message=message,vision_distance=1, ignored_mobs = GLOB.dead_mob_list)
+ user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE)
///////////////// VERB CODE
/mob/living/verb/subtle()
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 7de30a7095..3a7e270567 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -617,7 +617,7 @@
return 1
if(ispath(MP, /mob/living/simple_animal/hostile/mushroom))
return 1
- if(ispath(MP, /mob/living/simple_animal/shade))
+ if(ispath(MP, /mob/living/simple_animal/hostile/construct/shade))
return 1
if(ispath(MP, /mob/living/simple_animal/hostile/killertomato))
return 1
diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm
index 946d93e96b..f5a599f940 100644
--- a/code/modules/movespeed/modifiers/innate.dm
+++ b/code/modules/movespeed/modifiers/innate.dm
@@ -20,5 +20,6 @@
flags = IGNORE_NOSLOW
/datum/movespeed_modifier/slime_puddle
- multiplicative_slowdown = 2
+ multiplicative_slowdown = 4.5
flags = IGNORE_NOSLOW
+ variable = TRUE
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 1a96f36ccd..7f7c02f457 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -111,6 +111,7 @@
var/obj/machinery/computer/apc_control/remote_control = null
var/mob/living/carbon/hijacker
var/hijackerlast = TRUE
+ var/being_hijacked = FALSE
/obj/machinery/power/apc/unlocked
locked = FALSE
@@ -902,7 +903,7 @@
if(H && !H.stealthmode && H.toggled)
abilitiesavail = TRUE
var/list/data = list(
- "locked" = locked,
+ "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !area.hasSiliconAccessInArea(user, PRIVILEDGES_SILICON|PRIVILEDGES_DRONE),
"failTime" = failure_timer,
"isOperating" = operating,
"externalPower" = main_status,
@@ -1119,10 +1120,14 @@
/obj/machinery/power/apc/proc/hijack(mob/living/L)
if (!istype(L))
return
+ if(being_hijacked)
+ to_chat(L, "This APC is already being hijacked!")
+ return
if (hijacker && hijacker != L)
var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
to_chat(L, "Someone already has control of this APC. Beginning counter-hijack.")
H.hijacking = TRUE
+ being_hijacked = TRUE
if (do_after(L,20 SECONDS,target=src))
hijacker.toggleSiliconAccessArea(area)
if (L.toggleSiliconAccessArea(area))
@@ -1130,23 +1135,28 @@
update_icon()
set_hijacked_lighting()
H.hijacking = FALSE
+ being_hijacked = FALSE
return
else
to_chat(L, "Aborting.")
H.hijacking = FALSE
+ being_hijacked = FALSE
return
to_chat(L, "Beginning hijack of APC.")
var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack)
H.hijacking = TRUE
+ being_hijacked = TRUE
if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src))
if (L.toggleSiliconAccessArea(area))
hijacker = L
update_icon()
set_hijacked_lighting()
H.hijacking = FALSE
+ being_hijacked = FALSE
else
to_chat(L, "Aborting.")
H.hijacking = FALSE
+ being_hijacked = FALSE
return
/obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf)
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index e775fdc05a..9ed9630f2f 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -54,11 +54,10 @@
/obj/item/gun/ballistic/automatic/pistol/m1911
name = "\improper M1911"
- desc = "A classic .45 handgun with a small magazine capacity."
+ desc = "A classic .45 handgun with a small magazine capacity. Has a threaded barrel for suppressors."
icon_state = "m1911"
w_class = WEIGHT_CLASS_NORMAL
mag_type = /obj/item/ammo_box/magazine/m45
- can_suppress = FALSE
/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag
spawnwithmagazine = FALSE
@@ -67,6 +66,7 @@
name = "\improper Kitchen Gun (TM)"
desc = "Say goodbye to dirt with Kitchen Gun (TM)! Laser sight and night vision accessories sold separately."
icon_state = "kitchengun"
+ can_suppress = FALSE
mag_type = /obj/item/ammo_box/magazine/m45/kitchengun
/obj/item/gun/ballistic/automatic/pistol/deagle
@@ -98,11 +98,10 @@
/obj/item/gun/ballistic/automatic/pistol/APS
name = "stechkin APS pistol"
- desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo."
+ desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo. Has a threaded barrel for suppressors."
icon_state = "aps"
w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/pistolm9mm
- can_suppress = FALSE
burst_size = 3
fire_delay = 2
actions_types = list(/datum/action/item_action/toggle_firemode)
@@ -136,7 +135,7 @@
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
fire_delay = 50
burst_size = 1
- can_suppress = 0
+ can_suppress = FALSE
w_class = WEIGHT_CLASS_NORMAL
actions_types = list()
fire_sound = 'sound/weapons/blastcannon.ogg'
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 99c1cf97a6..8c3b9c7f99 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -83,6 +83,16 @@
updateUsrDialog()
update_icon()
return
+
+ if(beaker)
+ if(istype(I, /obj/item/reagent_containers/dropper))
+ var/obj/item/reagent_containers/dropper/D = I
+ D.afterattack(beaker, user, 1)
+ return
+ if(istype(I, /obj/item/reagent_containers/syringe))
+ var/obj/item/reagent_containers/syringe/S = I
+ S.afterattack(beaker, user, 1)
+ return
return ..()
/obj/machinery/chem_heater/on_deconstruction()
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index f3d299cce5..0d91e37ca0 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -970,7 +970,7 @@
M.emote("gasp")
log_combat(M, M, "revived", src)
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
- var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
+ var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
if(policy)
@@ -1321,7 +1321,7 @@
pH = 11
value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already.
-
+
//Earthsblood is still a wonderdrug. Just... don't expect to be able to mutate something that makes plants so healthy.
/datum/reagent/medicine/earthsblood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user)
. = ..()
@@ -1335,7 +1335,7 @@
myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1))
myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.5))
myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.5))
-
+
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-3 * REM, FALSE)
M.adjustFireLoss(-3 * REM, FALSE)
diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm
index 11518b236f..3d54c7130c 100644
--- a/code/modules/spells/spell_types/lichdom.dm
+++ b/code/modules/spells/spell_types/lichdom.dm
@@ -132,7 +132,7 @@
lich.real_name = mind.name
mind.transfer_to(lich)
mind.grab_ghost(force=TRUE)
- lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton)
+ lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton/space)
to_chat(lich, "Your bones clatter and shudder as you are pulled back into this world!")
var/turf/body_turf = get_turf(old_body)
lich.DefaultCombatKnockdown(200 + 200*resurrections)
diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm
index c61ee330e6..0b864958a0 100644
--- a/code/modules/surgery/advanced/revival.dm
+++ b/code/modules/surgery/advanced/revival.dm
@@ -70,7 +70,7 @@
if(O.organ_flags & ORGAN_FAILING)
O.applyOrganDamage(-5)
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
- var/timelimit = CONFIG_GET(number/defib_cmd_time_limit)
+ var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
var/late = timelimit && (tplus > timelimit)
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
if(policy)
diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm
index ef6d3a4fe5..4d37ed662d 100644
--- a/code/modules/tgs/core/datum.dm
+++ b/code/modules/tgs/core/datum.dm
@@ -50,7 +50,7 @@ TGS_PROTECT_DATUM(/datum/tgs_api)
/datum/tgs_api/proc/ChatTargetedBroadcast(message, admin_only)
return TGS_UNIMPLEMENTED
-/datum/tgs_api/proc/ChatPrivateMessage(message, admin_only)
+/datum/tgs_api/proc/ChatPrivateMessage(message, datum/tgs_chat_user/user)
return TGS_UNIMPLEMENTED
/datum/tgs_api/proc/SecurityLevel()
diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm
index e0d00ad15d..5b41e6a89d 100644
--- a/code/modules/tgs/v3210/api.dm
+++ b/code/modules/tgs/v3210/api.dm
@@ -39,7 +39,7 @@
var/warned_custom_commands = FALSE
/datum/tgs_api/v3210/ApiVersion()
- return new /datum/tgs_version("3.2.1.0")
+ return new /datum/tgs_version("3.2.1.3")
/datum/tgs_api/v3210/proc/trim_left(text)
for (var/i = 1 to length(text))
@@ -180,7 +180,7 @@
ExportService(SERVICE_REQUEST_KILL_PROCESS)
/datum/tgs_api/v3210/ChatChannelInfo()
- return list()
+ return list() // :omegalul:
/datum/tgs_api/v3210/ChatBroadcast(message, list/channels)
if(channels)
diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm
index a1949da444..4ccfc1a8a6 100644
--- a/code/modules/tgs/v3210/commands.dm
+++ b/code/modules/tgs/v3210/commands.dm
@@ -42,5 +42,11 @@
var/datum/tgs_chat_command/stc = new command_type
var/datum/tgs_chat_user/user = new
user.friendly_name = sender
+
+ // Discord hack, fix the mention if it's only numbers (fuck you IRC trolls)
+ var/regex/discord_id_regex = regex(@"^[0-9]+$")
+ if(findtext(sender, discord_id_regex))
+ sender = "<@[sender]>"
+
user.mention = sender
return stc.Run(user, params) || TRUE
diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm
index 1dc98f811e..081543828e 100644
--- a/code/modules/tgs/v4/api.dm
+++ b/code/modules/tgs/v4/api.dm
@@ -114,13 +114,6 @@
/datum/tgs_api/v4/OnInitializationComplete()
Export(TGS4_COMM_SERVER_PRIMED)
- var/tgs4_secret_sleep_offline_sauce = 24051994
- var/old_sleep_offline = world.sleep_offline
- world.sleep_offline = tgs4_secret_sleep_offline_sauce
- sleep(1)
- if(world.sleep_offline == tgs4_secret_sleep_offline_sauce) //if not someone changed it
- world.sleep_offline = old_sleep_offline
-
/datum/tgs_api/v4/OnTopic(T)
var/list/params = params2list(T)
var/their_sCK = params[TGS4_INTEROP_ACCESS_IDENTIFIER]
@@ -255,7 +248,7 @@
return instance_name
/datum/tgs_api/v4/TestMerges()
- return cached_test_merges
+ return cached_test_merges.Copy()
/datum/tgs_api/v4/EndProcess()
Export(TGS4_COMM_END_PROCESS)
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 8ca85faf05..466a986237 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -15,8 +15,10 @@
var/datum/tgs_revision_information/revision
var/list/chat_channels
+ var/initialized = FALSE
+
/datum/tgs_api/v5/ApiVersion()
- return new /datum/tgs_version("5.2.1")
+ return new /datum/tgs_version(TGS_DMAPI_VERSION)
/datum/tgs_api/v5/OnWorldNew(minimum_required_security_level)
server_port = world.params[DMAPI5_PARAM_SERVER_PORT]
@@ -79,6 +81,7 @@
chat_channels = list()
DecodeChannels(runtime_information)
+ initialized = TRUE
return TRUE
/datum/tgs_api/v5/proc/RequireInitialBridgeResponse()
@@ -88,13 +91,6 @@
/datum/tgs_api/v5/OnInitializationComplete()
Bridge(DMAPI5_BRIDGE_COMMAND_PRIME)
- var/tgs4_secret_sleep_offline_sauce = 29051994
- var/old_sleep_offline = world.sleep_offline
- world.sleep_offline = tgs4_secret_sleep_offline_sauce
- sleep(1)
- if(world.sleep_offline == tgs4_secret_sleep_offline_sauce) //if not someone changed it
- world.sleep_offline = old_sleep_offline
-
/datum/tgs_api/v5/proc/TopicResponse(error_message = null)
var/list/response = list()
response[DMAPI5_RESPONSE_ERROR_MESSAGE] = error_message
@@ -102,10 +98,13 @@
return json_encode(response)
/datum/tgs_api/v5/OnTopic(T)
+ if(!initialized)
+ return FALSE //continue world/Topic
+
var/list/params = params2list(T)
var/json = params[DMAPI5_TOPIC_DATA]
if(!json)
- return FALSE //continue world/Topic
+ return FALSE
var/list/topic_parameters = json_decode(json)
if(!topic_parameters)
@@ -282,7 +281,7 @@
/datum/tgs_api/v5/TestMerges()
RequireInitialBridgeResponse()
- return test_merges
+ return test_merges.Copy()
/datum/tgs_api/v5/EndProcess()
Bridge(DMAPI5_BRIDGE_COMMAND_KILL)
@@ -327,7 +326,7 @@
/datum/tgs_api/v5/ChatChannelInfo()
RequireInitialBridgeResponse()
- return chat_channels
+ return chat_channels.Copy()
/datum/tgs_api/v5/proc/DecodeChannels(chat_update_json)
var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS]
diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt
index 768942c434..2663a206da 100644
--- a/config/awaymissionconfig.txt
+++ b/config/awaymissionconfig.txt
@@ -11,6 +11,7 @@
#_maps/RandomZLevels/away_mission/Academy.dmm
#_maps/RandomZLevels/away_mission/wildwest.dmm
#_maps/RandomZLevels/away_mission/challenge.dmm
+_maps/RandomZLevels/away_mission/jungleresort.dmm
#_maps/RandomZLevels/away_mission/moonoutpost19.dmm
#_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm
#_maps/RandomZLevels/away_mission/caves.dmm
diff --git a/config/config.txt b/config/config.txt
index 7e2ff5da41..5be76972ab 100644
--- a/config/config.txt
+++ b/config/config.txt
@@ -375,6 +375,9 @@ NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1
##Name of the place to send people rejected by the bunker
#PANIC_SERVER_NAME [Put the name here]
+##Automated age verification, comment this out to not ask new users if they are 18+
+AGE_VERIFICATION
+
## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog
#AGGRESSIVE_CHANGELOG
diff --git a/config/game_options.txt b/config/game_options.txt
index bb6c5d8f01..bc5fdf940e 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -651,17 +651,17 @@ PENIS_MIN_INCHES_PREFS 1
PENIS_MAX_INCHES_PREFS 20
## Body size configs, the feature will be disabled if both min and max have the same value.
-BODY_SIZE_MIN 1
-BODY_SIZE_MAX 1
+BODY_SIZE_MIN 0.9
+BODY_SIZE_MAX 1.25
## Pun-Pun movement slowdown given to characters with a body size smaller than this value,
## to compensate for their smaller hitbox.
## To disable, just make sure the value is lower than 'body_size_min'
-THRESHOLD_BODY_SIZE_SLOWDOWN 0.85
+THRESHOLD_BODY_SIZE_PENALTY 1
## Multiplier used in the smaller strides slowdown calculation.
## Doesn't apply to floating or crawling mobs.
-BODY_SIZE_SLOWDOWN_MULTIPLIER 0.25
+BODY_SIZE_SLOWDOWN_MULTIPLIER 0
## Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones.
ALLOW_CUSTOM_SKINTONES
diff --git a/html/changelogs/AutoChangeLog-pr-13521.yml b/html/changelogs/AutoChangeLog-pr-13521.yml
new file mode 100644
index 0000000000..77aca8c363
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13521.yml
@@ -0,0 +1,5 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - balance: "zeolites are now actual fermichems instead of being incredibly easy to make."
+ - bugfix: "Using syringes / droppers on chem heaters with beakers in them works again."
diff --git a/html/changelogs/AutoChangeLog-pr-13567.yml b/html/changelogs/AutoChangeLog-pr-13567.yml
new file mode 100644
index 0000000000..d51db8e3b8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13567.yml
@@ -0,0 +1,8 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - tweak: "changeling stings retract upon turning into a slime puddle"
+ - tweak: "you cannot transform into a slime puddle with a no drop item in your hands"
+ - tweak: "slime puddles are now transparent and their colour looks more natural in comparison to the user"
+ - tweak: "slime puddles are now even slower"
+ - tweak: "slime puddles now get no protection from worn clothing"
diff --git a/html/changelogs/AutoChangeLog-pr-13602.yml b/html/changelogs/AutoChangeLog-pr-13602.yml
new file mode 100644
index 0000000000..24185b1792
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13602.yml
@@ -0,0 +1,5 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - rscadd: "A fallback for dynamic antag rolling that allows for it to just try between traitor, blood brothers, heretics, changeling, bloodsucker and devil until there are enough roundstart antags. This can also happen randomly anyway. Blood brothers and devil are disabled for now, but the code is there to enable them."
+ - rscadd: "A new storyteller, \"Grab Bag\", that forces the above round type."
diff --git a/html/changelogs/AutoChangeLog-pr-13604.yml b/html/changelogs/AutoChangeLog-pr-13604.yml
new file mode 100644
index 0000000000..2ac141215b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13604.yml
@@ -0,0 +1,5 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - balance: "Brass welders are 50% faster at refueling"
+ - code_imp: "redoes self fueling welders in the code to be less speggie"
diff --git a/html/changelogs/AutoChangeLog-pr-13618.yml b/html/changelogs/AutoChangeLog-pr-13618.yml
new file mode 100644
index 0000000000..b301c39e6b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13618.yml
@@ -0,0 +1,5 @@
+author: "Vynzill"
+delete-after: True
+changes:
+ - rscadd: "new gateway mission
+mapadd: jungleresort map"
diff --git a/html/changelogs/AutoChangeLog-pr-13629.yml b/html/changelogs/AutoChangeLog-pr-13629.yml
new file mode 100644
index 0000000000..954f6972ec
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13629.yml
@@ -0,0 +1,4 @@
+author: "silicons"
+delete-after: True
+changes:
+ - rscdel: "anomalies no longer spawn in walls"
diff --git a/html/changelogs/AutoChangeLog-pr-13630.yml b/html/changelogs/AutoChangeLog-pr-13630.yml
new file mode 100644
index 0000000000..f7e80aaf9e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13630.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - rscadd: "you can now customize your size from 90% to 130%, going below 100% makes you have 10 less max health"
diff --git a/html/changelogs/AutoChangeLog-pr-13632.yml b/html/changelogs/AutoChangeLog-pr-13632.yml
new file mode 100644
index 0000000000..bf478ec97c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13632.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - bugfix: "time for memory loss message to show up when being revived is now correctly 300 seconds, instead of 30"
diff --git a/html/changelogs/AutoChangeLog-pr-13633.yml b/html/changelogs/AutoChangeLog-pr-13633.yml
new file mode 100644
index 0000000000..d9246cfff6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13633.yml
@@ -0,0 +1,4 @@
+author: "ArchieBeepBoop"
+delete-after: True
+changes:
+ - bugfix: "Outlet Injector Mapping Asset Layer Fix"
diff --git a/html/changelogs/AutoChangeLog-pr-13635.yml b/html/changelogs/AutoChangeLog-pr-13635.yml
new file mode 100644
index 0000000000..21730d4cf5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13635.yml
@@ -0,0 +1,4 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - balance: "The bone gauntlets should be slightly less murderously punchy on the fast punches mode."
diff --git a/html/changelogs/AutoChangeLog-pr-13639.yml b/html/changelogs/AutoChangeLog-pr-13639.yml
new file mode 100644
index 0000000000..a511d0a909
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13639.yml
@@ -0,0 +1,4 @@
+author: "Trilbyspaceclone"
+delete-after: True
+changes:
+ - tweak: "ASP 9mm and M1911 can now have suppressers added"
diff --git a/html/changelogs/AutoChangeLog-pr-13641.yml b/html/changelogs/AutoChangeLog-pr-13641.yml
new file mode 100644
index 0000000000..b0c429da75
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13641.yml
@@ -0,0 +1,4 @@
+author: "MrJWhit"
+delete-after: True
+changes:
+ - balance: "Nerf combat knife damage"
diff --git a/html/changelogs/AutoChangeLog-pr-13647.yml b/html/changelogs/AutoChangeLog-pr-13647.yml
new file mode 100644
index 0000000000..b3211ee759
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13647.yml
@@ -0,0 +1,4 @@
+author: "zeroisthebiggay"
+delete-after: True
+changes:
+ - bugfix: "jacqueline spawns on boxstation"
diff --git a/html/changelogs/AutoChangeLog-pr-13648.yml b/html/changelogs/AutoChangeLog-pr-13648.yml
new file mode 100644
index 0000000000..4148230385
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13648.yml
@@ -0,0 +1,13 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - bugfix: "The 'Your body is in a cloner' notification works again"
+ - bugfix: "Hijack implants should work properly again (or, at least better)"
+ - bugfix: "Liches are now good skeletons again instead of weak ones"
+ - bugfix: "The piratepad control cannot be destroyed again."
+ - bugfix: "Pirates have received new supplies of jetpacks instead of useless oxygen tanks"
+ - bugfix: "Ratvarian AIs are once again able to show their linked borgs Ratvar's light"
+ - bugfix: "Hijackers are once again unable to detonate borgs without being adjacent to the console"
+ - bugfix: "Automated annoucement systems and gulag ore consoles no longer waste emag charges"
+ - bugfix: "Automated announcement systems once again can be remote controlled by non-AIs with silicon access"
+ - bugfix: "APCs being hijacked multiple times at once is no longer possible, preventing some issues"
diff --git a/html/changelogs/AutoChangeLog-pr-13653.yml b/html/changelogs/AutoChangeLog-pr-13653.yml
new file mode 100644
index 0000000000..2f920da353
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13653.yml
@@ -0,0 +1,4 @@
+author: "MrJWhit"
+delete-after: True
+changes:
+ - tweak: "Minor fixes to kilo"
diff --git a/html/changelogs/AutoChangeLog-pr-13654.yml b/html/changelogs/AutoChangeLog-pr-13654.yml
new file mode 100644
index 0000000000..cb67c6e6be
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13654.yml
@@ -0,0 +1,4 @@
+author: "ArchieBeepBoop"
+delete-after: True
+changes:
+ - bugfix: "Jacqueen and the Christmas tree should no longer spawn abstract things that can cause shittons of runtimes."
diff --git a/html/changelogs/AutoChangeLog-pr-13655.yml b/html/changelogs/AutoChangeLog-pr-13655.yml
new file mode 100644
index 0000000000..6e48c84054
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13655.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - bugfix: "fixes held items proccing crossed when passing someone"
diff --git a/html/changelogs/AutoChangeLog-pr-13656.yml b/html/changelogs/AutoChangeLog-pr-13656.yml
new file mode 100644
index 0000000000..017f0d99c2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13656.yml
@@ -0,0 +1,4 @@
+author: "MrJWhit"
+delete-after: True
+changes:
+ - admin: "Canceling events gives more time to stop from 10 to 30"
diff --git a/html/changelogs/AutoChangeLog-pr-13657.yml b/html/changelogs/AutoChangeLog-pr-13657.yml
new file mode 100644
index 0000000000..6f445f6b71
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13657.yml
@@ -0,0 +1,4 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - bugfix: "The transmission sigil power drain works now"
diff --git a/html/changelogs/AutoChangeLog-pr-13658.yml b/html/changelogs/AutoChangeLog-pr-13658.yml
new file mode 100644
index 0000000000..09b22d38ad
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13658.yml
@@ -0,0 +1,6 @@
+author: "DeltaFire15"
+delete-after: True
+changes:
+ - bugfix: "Scripture no longer sometimes eats part of its invocation."
+ - balance: "APCs and silicons are now more susceptible to powerdrains (by the power_drain() proc, which is rare)"
+ - balance: "Void Volt has been modified from a chant to a singular pulse."
diff --git a/html/changelogs/AutoChangeLog-pr-13659.yml b/html/changelogs/AutoChangeLog-pr-13659.yml
new file mode 100644
index 0000000000..85eee3b78d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13659.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - bugfix: "the load away mission verb won't crash the server now"
diff --git a/html/changelogs/AutoChangeLog-pr-13661.yml b/html/changelogs/AutoChangeLog-pr-13661.yml
new file mode 100644
index 0000000000..81b5a735dc
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13661.yml
@@ -0,0 +1,4 @@
+author: "timothyteakettle"
+delete-after: True
+changes:
+ - rscadd: "added in-game age verification as an alternative to access requests"
diff --git a/html/changelogs/AutoChangeLog-pr-13669.yml b/html/changelogs/AutoChangeLog-pr-13669.yml
new file mode 100644
index 0000000000..c682500501
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-13669.yml
@@ -0,0 +1,4 @@
+author: "Arturlang"
+delete-after: True
+changes:
+ - tweak: "Being sacrificed by the cult no longer removes all hope of rescue."
diff --git a/icons/mob/clothing/custom_w.dmi b/icons/mob/clothing/custom_w.dmi
index 5b1fd0876c..10f7c5080a 100644
Binary files a/icons/mob/clothing/custom_w.dmi and b/icons/mob/clothing/custom_w.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 10b733bae4..3d1cbfa273 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi
index e17d55dc85..77b2d114b9 100644
Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 939ee0e009..d697c4619d 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index 35b6e08d0e..4a21fb41fd 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -529,3 +529,10 @@
path = /obj/item/clothing/under/custom/vest
ckeywhitelist = list("maylowfox")
+/datum/gear/donator/exo
+ name = "exo frame"
+ slot = SLOT_WEAR_SUIT
+ path = /obj/item/clothing/suit/custom/exo
+ ckeywhitelist = list("jesterz7")
+
+
diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
index bd928e75d5..4ef5a91a92 100644
--- a/modular_citadel/code/modules/custom_loadout/custom_items.dm
+++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm
@@ -577,3 +577,11 @@
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = STYLE_DIGITIGRADE
+/obj/item/clothing/suit/custom/exo
+ name = "Full ExoFrame"
+ desc = "A suit specially designed for those who live and breath hardware with custom tooled robotic manipulators for working with precision even on the most hazardous of jobs."
+ icon_state = "frame"
+ item_state = "frame"
+ icon = 'icons/obj/custom.dmi'
+ mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
+ mutantrace_variation = NONE
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
index a6a9d7a85f..de27723508 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm
@@ -200,22 +200,23 @@
/datum/reagent/fermi/zeolites
name = "Artificial Zeolites"
- description = "Lab made Zeolite, used to clear radiation from people and items alike! Splashing just a small amount(5u) onto any item can clear away large amounts of contamination."
+ description = "Lab made Zeolite, used to clear radiation from people and items alike! Splashing just a small amount(5u) onto any item can clear away large amounts of contamination, as long as its purity is at least 0.7."
pH = 8
color = "#FFDADA"
- metabolization_rate = 8 * REAGENTS_METABOLISM //Metabolizes fast but heals a lot!
- value = REAGENT_VALUE_COMMON
+ metabolization_rate = 8 * REAGENTS_METABOLISM //Metabolizes fast but heals a lot! Lasts far longer if more pure.
+ value = REAGENT_VALUE_RARE //Relatively hard to make now, might be fine with VERY_RARE instead depending on feedback.
/datum/reagent/fermi/zeolites/on_mob_life(mob/living/carbon/M)
+ metabolization_rate = (4 / purity) * REAGENTS_METABOLISM //Metab rate directly influenced by purity. Linear.
var/datum/component/radioactive/contamination = M.GetComponent(/datum/component/radioactive)
- if(M.radiation > 0)
- M.radiation -= min(M.radiation, 60)
+ if(M.radiation > 0) //hey so apparently pentetic literally purges 1/50 (2%) of the rad amount on someone per tick no matter the 'true' amount, sooo uhh time to tweak this some more..
+ M.radiation -= clamp(round((M.radiation / 150) * (25 ** purity), 0.1), 0, M.radiation) //Purges between ~3% and ~16% of total rad amount, per tick, depending on purity. Exponential.
if(contamination && contamination.strength > 0)
- contamination.strength -= min(contamination.strength, 100)
+ contamination.strength -= min(contamination.strength, round(25 ** (0.5 + purity), 0.1)) //25 per tick at minimum purity; Tops out at ~125 per tick if purity is 1. Exponential.
..()
/datum/reagent/fermi/zeolites/reaction_obj(obj/O, reac_volume)
var/datum/component/radioactive/contamination = O.GetComponent(/datum/component/radioactive)
- if(contamination && reac_volume >= 5)
+ if(contamination && reac_volume >= 5 && purity >= 0.7) //you need at least 0.7 purity to instantly purge all contam on an object.
qdel(contamination)
return
diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
index da9fd34cd6..f4b8850f55 100644
--- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm
@@ -591,19 +591,21 @@
/datum/chemical_reaction/fermi/zeolites
name = "Zeolites"
id = /datum/reagent/fermi/zeolites
- results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot!
+ results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot! - But it's now somewhat dangerous, and needs a bit of uranium to catalyze the reaction
required_reagents = list(/datum/reagent/medicine/potass_iodide = 1, /datum/reagent/aluminium = 1, /datum/reagent/silicon = 1, /datum/reagent/oxygen = 1)
+ required_catalysts = list(/datum/reagent/uranium = 5)
//FermiChem vars:
- OptimalTempMin = 300
- OptimalTempMax = 900
- ExplodeTemp = 1000 //check to see overflow doesn't happen!
- OptimalpHMin = 4.0
- OptimalpHMax = 6.0
+ OptimalTempMin = 500
+ OptimalTempMax = 750
+ ExplodeTemp = 850
+ OptimalpHMin = 2.8
+ OptimalpHMax = 5 //2.2 ph levels of optimal ph zone - centered at 3.9 - ph of ingredients mixed at equal values is 9.55; ph of result is 8.
ReactpHLim = 4
//CatalystFact = 0
- CurveSharpT = 4
- CurveSharppH = 0
- ThermicConstant = 0
- HIonRelease = 0.01
- RateUpLim = 15
+ CurveSharpT = 1.5
+ CurveSharppH = 3
+ ThermicConstant = 7
+ HIonRelease = -0.15
+ RateUpLim = 4
+ PurityMin = 0.5 //Good luck.
FermiChem = TRUE
diff --git a/tgstation.dme b/tgstation.dme
index 14a6a7cd10..2008f39c3d 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -751,6 +751,7 @@
#include "code\game\gamemodes\dynamic\dynamic_rulesets.dm"
#include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm"
#include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm"
+#include "code\game\gamemodes\dynamic\dynamic_rulesets_minor.dm"
#include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm"
#include "code\game\gamemodes\dynamic\dynamic_storytellers.dm"
#include "code\game\gamemodes\eldritch_cult\eldritch_cult.dm"
@@ -1804,6 +1805,7 @@
#include "code\modules\awaymissions\mission_code\caves.dm"
#include "code\modules\awaymissions\mission_code\centcomAway.dm"
#include "code\modules\awaymissions\mission_code\challenge.dm"
+#include "code\modules\awaymissions\mission_code\jungleresort.dm"
#include "code\modules\awaymissions\mission_code\moonoutpost19.dm"
#include "code\modules\awaymissions\mission_code\murderdome.dm"
#include "code\modules\awaymissions\mission_code\research.dm"
diff --git a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js
index 746cb7ad9c..1520b4093b 100644
--- a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js
+++ b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js
@@ -8,6 +8,7 @@ export const RoboticsControlConsole = (props, context) => {
const [tab, setTab] = useSharedState(context, 'tab', 1);
const {
can_hack,
+ can_convert,
cyborgs = [],
drones = [],
} = data;
@@ -34,7 +35,9 @@ export const RoboticsControlConsole = (props, context) => {
{tab === 1 && (
-
+
)}
{tab === 2 && (
@@ -45,7 +48,7 @@ export const RoboticsControlConsole = (props, context) => {
};
const Cyborgs = (props, context) => {
- const { cyborgs, can_hack } = props;
+ const { cyborgs, can_hack, can_convert } = props;
const { act, data } = useBackend(context);
if (!cyborgs.length) {
return (
@@ -70,6 +73,15 @@ const Cyborgs = (props, context) => {
ref: cyborg.ref,
})} />
)}
+ {!!can_convert && !cyborg.servant && (
+