diff --git a/.travis.yml b/.travis.yml index 5a6f9be8086..6eb8961a07f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,7 @@ env: cache: directories: - - nano/node_modules - - nano/bower_components + - tgui/node_modules - $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} @@ -35,13 +34,12 @@ addons: install: - rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install $NODE_VERSION - - npm install -g gulp bower + - npm install -g gulp-cli - pip install --user PyYaml -q - pip install --user beautifulsoup4 -q before_script: - - cd nano && npm install && cd .. - - cd nano && bower install && cd .. + - cd tgui && npm install && cd .. - chmod +x ./install-byond.sh - ./install-byond.sh @@ -50,7 +48,7 @@ script: - (! grep 'step_[xy]' _maps/**/*.dmm) - md5sum -c - <<< "49bc6b1b9ed56c83cceb6674bd97cb34 *html/changelogs/example.yml" - tools/check_filedirs.sh tgstation.dme - - cd nano && gulp && gulp --min && cd .. + - cd tgui && gulp && cd .. - python tools/ss13_genchangelog.py html/changelog.html html/changelogs - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup - bash dm.sh -M${DM_MAPFILE} tgstation.dme diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm new file mode 100644 index 00000000000..11a292472f3 --- /dev/null +++ b/_maps/RandomZLevels/research.dmm @@ -0,0 +1,940 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/simulated/mineral,/area/space) +"ac" = (/turf/simulated/floor/plating/asteroid/airless,/area/space) +"ad" = (/turf/simulated/mineral,/area/awaymission/research/exterior) +"ae" = (/turf/simulated/floor/plating/asteroid/airless,/area/awaymission/research/exterior) +"af" = (/mob/living/simple_animal/hostile/syndicate/ranged/space,/turf/simulated/floor/plating/asteroid/airless,/area/awaymission/research/exterior) +"ag" = (/turf/simulated/floor/plating/asteroid/airless,/turf/simulated/wall/shuttle{dir = 8; icon_state = "diagonalWall3"},/area/awaymission/research/interior/engineering) +"ah" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/space,/area/awaymission/research/interior/engineering) +"ai" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aj" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/space,/area/awaymission/research/interior/engineering) +"ak" = (/turf/simulated/floor/plating/asteroid/airless,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/awaymission/research/interior/engineering) +"al" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/awaymission/research/interior/engineering) +"am" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/research/interior/engineering) +"an" = (/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"ao" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/research/interior/engineering) +"ap" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"aq" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"ar" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/engineering) +"as" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"at" = (/obj/machinery/suit_storage_unit/engine,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"au" = (/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"av" = (/obj/item/weapon/shard{icon_state = "small"},/obj/machinery/constructable_frame/machine_frame,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high/empty,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aw" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/whiteyellow/side,/area/awaymission/research/interior/engineering) +"ax" = (/obj/structure/flora/kirbyplants{icon_state = "plant-20"; layer = 4.1; pixel_y = 3},/turf/simulated/floor/plasteel/whiteyellow/corner{tag = "icon-whiteyellowcorner (WEST)"; icon_state = "whiteyellowcorner"; dir = 8},/area/awaymission/research/interior/engineering) +"ay" = (/obj/structure/bed/chair{dir = 8},/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"az" = (/obj/effect/gibspawner/human,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aA" = (/obj/item/stack/sheet/plasteel,/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aB" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior/engineering) +"aC" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aD" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aE" = (/obj/effect/gibspawner/human,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aF" = (/obj/item/stack/rods,/obj/item/stack/sheet/metal,/obj/item/weapon/stock_parts/cell/high/empty,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aG" = (/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aH" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/maint) +"aI" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aJ" = (/obj/machinery/computer/pod{id = "spacebattlepod2"; name = "Hull Door Control"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"aK" = (/obj/effect/landmark/corpse/syndicatesoldier{corpsebrute = 200},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"aL" = (/obj/structure/table,/obj/item/weapon/c4,/obj/item/weapon/c4,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/research/interior/engineering) +"aM" = (/obj/item/weapon/stock_parts/cell/high/empty,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aN" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/cable_coil{amount = 1},/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"aO" = (/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"aP" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"aQ" = (/turf/simulated/floor/plasteel/whiteyellow/corner,/area/awaymission/research/interior/engineering) +"aR" = (/obj/item/stack/sheet/plasteel,/obj/item/stack/cable_coil{amount = 1},/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aS" = (/turf/simulated/floor/plasteel{icon_state = "damaged4"},/turf/simulated/wall/shuttle{icon_state = "diagonalWall3"},/area/awaymission/research/interior/engineering) +"aT" = (/mob/living/simple_animal/hostile/syndicate/melee,/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"aU" = (/turf/simulated/floor/plasteel{icon_state = "damaged1"},/turf/simulated/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/research/interior/engineering) +"aV" = (/obj/item/stack/sheet/plasteel,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"aW" = (/obj/machinery/light{dir = 4},/obj/structure/dispenser,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior/engineering) +"aX" = (/obj/item/stack/sheet/mineral/bananium{amount = 50},/turf/simulated/floor/plating/asteroid/airless,/area/space) +"aY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"aZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -32; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior/engineering) +"ba" = (/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bb" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior/engineering) +"bc" = (/turf/simulated/floor/plasteel{icon_state = "damaged5"},/turf/simulated/wall/shuttle{icon_state = "diagonalWall3"},/area/awaymission/research/interior/engineering) +"bd" = (/turf/simulated/floor/plasteel{icon_state = "damaged3"},/area/awaymission/research/interior/engineering) +"be" = (/obj/item/stack/rods,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel{icon_state = "damaged5"},/area/awaymission/research/interior/engineering) +"bf" = (/turf/simulated/floor/plasteel{icon_state = "damaged3"},/turf/simulated/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/research/interior/engineering) +"bg" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "damaged5"},/area/awaymission/research/interior/engineering) +"bh" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bi" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior/engineering) +"bj" = (/obj/machinery/light/small,/turf/simulated/floor/plating/asteroid/airless,/area/awaymission/research/exterior) +"bk" = (/obj/item/weapon/bikehorn,/turf/simulated/floor/plating/asteroid/airless,/area/space) +"bl" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/gateway) +"bm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{auto_name = 1; cell_type = 9000; dir = 4; name = "Engineering APC"; pixel_x = 27; pixel_y = 2},/turf/simulated/floor/plating,/area/awaymission/research/interior/engineering) +"bn" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior/engineering) +"bo" = (/obj/item/weapon/screwdriver,/obj/item/stack/cable_coil{amount = 1},/obj/item/ammo_casing/c45,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bp" = (/obj/effect/landmark/corpse/engineer{corpsebrute = 200},/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bq" = (/obj/item/stack/rods,/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"br" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel{icon_state = "damaged5"},/area/awaymission/research/interior/engineering) +"bs" = (/obj/item/ammo_casing/c45,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel{icon_state = "damaged5"},/area/awaymission/research/interior/engineering) +"bt" = (/obj/effect/gibspawner/human,/obj/item/stack/cable_coil{amount = 1},/obj/item/ammo_casing/c45,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bu" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bv" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bw" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior/engineering) +"bx" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"by" = (/obj/item/clothing/mask/gas/clown_hat,/turf/simulated/floor/plating/asteroid/airless,/area/space) +"bz" = (/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"bA" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTHWEST)"; icon_state = "warndark"; dir = 9},/area/awaymission/research/interior/gateway) +"bB" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plasteel/darkwarning{icon_state = "warndark"; dir = 1},/area/awaymission/research/interior/gateway) +"bC" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (NORTHEAST)"; icon_state = "warndark"; dir = 5},/area/awaymission/research/interior/gateway) +"bD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"bE" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/plasteel/whiteyellow/corner{tag = "icon-whiteyellowcorner (EAST)"; icon_state = "whiteyellowcorner"; dir = 4},/area/awaymission/research/interior/engineering) +"bF" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior/engineering) +"bG" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior/engineering) +"bH" = (/obj/item/ammo_casing/c9mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior/engineering) +"bI" = (/obj/effect/landmark/corpse/syndicatesoldier{corpsebrute = 200},/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTHEAST)"; icon_state = "whiteyellow"; dir = 5},/area/awaymission/research/interior/engineering) +"bJ" = (/obj/item/ammo_casing/c45,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bK" = (/obj/item/weapon/wrench,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTHWEST)"; icon_state = "whiteyellow"; dir = 9},/area/awaymission/research/interior/engineering) +"bL" = (/obj/item/stack/sheet/plasteel,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior/engineering) +"bM" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior/engineering) +"bN" = (/obj/effect/landmark/corpse/engineer{corpsebrute = 200},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior/engineering) +"bO" = (/obj/structure/extinguisher_cabinet{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel/whiteyellow/corner{tag = "icon-whiteyellowcorner (NORTH)"; icon_state = "whiteyellowcorner"; dir = 1},/area/awaymission/research/interior/engineering) +"bP" = (/obj/structure/sign/vacuum{pixel_x = 32},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"bQ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"bR" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"bS" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plasteel/darkwarning{dir = 8},/area/awaymission/research/interior/gateway) +"bT" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"bU" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (EAST)"; icon_state = "warndark"; dir = 4},/area/awaymission/research/interior/gateway) +"bV" = (/obj/structure/sign/nosmoking_1{pixel_x = -32},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior/engineering) +"bW" = (/obj/item/ammo_casing/c45,/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior/engineering) +"bX" = (/obj/effect/landmark/corpse/engineer{corpsebrute = 200},/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c9mm,/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior/engineering) +"bY" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (SOUTHWEST)"; icon_state = "warndark"; dir = 10},/area/awaymission/research/interior/gateway) +"bZ" = (/obj/machinery/gateway,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/darkwarning,/area/awaymission/research/interior/gateway) +"ca" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plasteel/darkwarning{tag = "icon-warndark (SOUTHEAST)"; icon_state = "warndark"; dir = 6},/area/awaymission/research/interior/gateway) +"cb" = (/obj/machinery/power/apc{cell_type = 12000; dir = 4; name = "Gateway APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ce" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cf" = (/obj/item/ammo_casing/c46x30mm,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior/engineering) +"cg" = (/obj/effect/landmark/corpse/syndicatesoldier{corpsebrute = 200},/turf/simulated/floor/plasteel{icon_state = "damaged3"},/area/awaymission/research/interior/engineering) +"ch" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ci" = (/obj/machinery/light{dir = 8},/obj/structure/window/reinforced,/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cj" = (/obj/structure/window/reinforced,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"ck" = (/obj/machinery/door/window/eastright{tag = "icon-right"; icon_state = "right"; dir = 2},/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cl" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"co" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cp" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior) +"cq" = (/obj/machinery/door/airlock/engineering{name = "Engine Room"; req_access_txt = "10"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior/engineering) +"cr" = (/obj/effect/landmark/corpse/nanotrasensoldier{corpsebrute = 200},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior) +"cs" = (/obj/machinery/door/airlock/engineering{name = "Engine Room"; req_access_txt = "10"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior/engineering) +"ct" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -32; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cv" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cx" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/genetics) +"cy" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Genetics Maintenance"; req_access_txt = "9"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cA" = (/obj/item/ammo_casing/c46x30mm,/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior) +"cB" = (/obj/item/ammo_casing/c46x30mm,/obj/item/ammo_casing/c9mm,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"cC" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior) +"cD" = (/obj/structure/table,/obj/item/device/radio,/obj/item/device/radio,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table,/obj/item/weapon/paper/pamphlet,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/gateway) +"cG" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = 32},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"cH" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/pepper,/obj/machinery/button/door{id = "cryopodg2"; name = "panic lockdown button"},/obj/machinery/alarm{pixel_y = 32},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"cI" = (/obj/machinery/computer/scan_consolenew,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"cJ" = (/obj/machinery/dna_scannernew,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"cK" = (/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"cL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cM" = (/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior) +"cN" = (/obj/item/ammo_casing/c9mm,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior) +"cO" = (/obj/item/ammo_casing/c46x30mm,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"cP" = (/obj/effect/landmark/corpse/nanotrasensoldier{corpsebrute = 200},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior) +"cQ" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/secure) +"cR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 1; name = "Gateway Access"; req_access_txt = "36"},/turf/simulated/floor/plating,/area/awaymission/research/interior/gateway) +"cS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "Genetics APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/research/interior/genetics) +"cT" = (/mob/living/carbon/monkey,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"cU" = (/obj/machinery/door/window/eastright,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"cV" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"cW" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"cX" = (/mob/living/carbon/human,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"cY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/ammo_casing/c9mm,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"cZ" = (/obj/machinery/door/airlock/engineering{name = "Engine Room"; req_access_txt = "10"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior) +"da" = (/obj/machinery/door/airlock/engineering{name = "Engine Room"; req_access_txt = "10"},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior) +"db" = (/obj/structure/filingcabinet,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dc" = (/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dd" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/device/firing_pin/dna,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"de" = (/obj/structure/filingcabinet,/obj/structure/filingcabinet,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"df" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off."; fields = list("label" = "Buffer1:Kr-$$@##", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+"); name = "dusty genetics data disk"; read_only = 1},/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/weapon/dnainjector/xraymut,/obj/item/weapon/dnainjector/xraymut,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior) +"dh" = (/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"di" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/mob/living/carbon/monkey,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"dj" = (/obj/item/weapon/disk/data{desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off."; fields = list("label" = "Buffer1:Krystal Symers", "UI" = "f8f603857000f930127c4", "SE" = "414401462231053131010241514651403453121613263463440351136366", "UE" = "340008485c321e542aed4df7032ac04d", "name" = "Krystal Symers", "blood_type" = "A+"); name = "dusty genetics data disk"; read_only = 1},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dk" = (/obj/item/weapon/disk/data{desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off with the words 'DO NOT CLONE' hastely written over it."; fields = list("label" = "Buffer1:George Melons", "UI" = "3c300f11b5421ca7014d8", "SE" = "430431205660551642142504334461413202111310233445620533134255", "UE" = "6893e6a0b0076a41897776b10cc2b324", "name" = "George Melons", "blood_type" = "B+"); name = "old genetics data disk"},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dl" = (/obj/effect/decal/cleanable/blood,/obj/item/stack/rods,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dn" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior) +"do" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"dp" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior) +"dq" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/security) +"dr" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/weapon/dnainjector/telemut,/obj/item/weapon/dnainjector/telemut,/obj/item/weapon/dnainjector/chavmut,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"ds" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"dt" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"du" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dv" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dw" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"dx" = (/obj/machinery/light{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"dy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/ammo_casing/c9mm,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dB" = (/obj/effect/landmark/corpse/nanotrasensoldier{corpsebrute = 200},/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; dir = 4},/area/awaymission/research/interior) +"dC" = (/obj/effect/decal/cleanable/blood,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"dD" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)"; icon_state = "whiteyellow"; dir = 8},/area/awaymission/research/interior) +"dE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dF" = (/obj/structure/closet,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dG" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dH" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dI" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dJ" = (/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dK" = (/mob/living/simple_animal/hostile/nanotrasen/ranged,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dL" = (/obj/structure/rack,/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/suit/armor/bulletproof,/obj/item/clothing/head/helmet/alt,/obj/item/clothing/head/helmet/alt,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dM" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dN" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A data disk used to store cloning and genetic records. The name on the label appears to be scratched off with the words 'DO NOT CLONE' hastely written over it."; fields = list("label" = "Buffer1:George Melons", "UI" = "3c300f11b5421ca7014d8", "SE" = "430431205660551642142504334461413202111310233445620533134255", "UE" = "6893e6a0b0076a41897776b10cc2b324", "name" = "George Melons", "blood_type" = "B+"); name = "old genetics data disk"},/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/device/firing_pin/dna,/obj/item/weapon/dnainjector/dwarf,/obj/item/weapon/dnainjector/dwarf,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dO" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/weapon/dnainjector/chameleonmut,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dP" = (/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dQ" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dR" = (/mob/living/carbon/human/interactive/greytide,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"dS" = (/obj/structure/window/reinforced{dir = 8},/mob/living/carbon/human,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"dT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/ammo_casing/c45,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"dV" = (/obj/structure/table,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dW" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dX" = (/obj/structure/rack,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/obj/item/clothing/head/helmet,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"dY" = (/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 1; locked = 1; name = "Secure Storage C"; req_access_txt = "36"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"dZ" = (/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 1; locked = 1; name = "Secure Storage D"; req_access_txt = "36"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"ea" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/research/interior) +"eb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ec" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/cryo) +"ed" = (/obj/machinery/door/poddoor{id = "cryopodg2"; name = "cryogenetic genetics blastdoor"},/turf/simulated/floor/plasteel/stairs,/area/awaymission/research/interior/genetics) +"ee" = (/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior/cryo) +"ef" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior/cryo) +"eg" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"eh" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ei" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ej" = (/obj/effect/spawner/lootdrop/maintenance,/obj/effect/spawner/lootdrop/maintenance,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ek" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/decal/cleanable/blood/drip,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"el" = (/turf/simulated/floor/plasteel/white/corner,/area/awaymission/research/interior) +"em" = (/turf/simulated/floor/plasteel/whiteyellow/side,/area/awaymission/research/interior) +"en" = (/obj/machinery/alarm{pixel_y = 32},/turf/simulated/floor/plasteel/whiteyellow/side,/area/awaymission/research/interior) +"eo" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (SOUTHEAST)"; icon_state = "whiteyellow"; dir = 6},/area/awaymission/research/interior) +"ep" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"eq" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (SOUTHWEST)"; icon_state = "whiteyellow"; dir = 10},/area/awaymission/research/interior) +"er" = (/turf/simulated/floor/plasteel/white/corner{tag = "icon-whitecorner (WEST)"; icon_state = "whitecorner"; dir = 8},/area/awaymission/research/interior) +"es" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"et" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/automatic/pistol/m1911,/obj/item/weapon/gun/projectile/automatic/pistol/m1911,/obj/item/ammo_box/magazine/m45,/obj/item/ammo_box/magazine/m45,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"eu" = (/obj/structure/rack,/obj/item/clothing/suit/armor/laserproof,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"ev" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"ew" = (/turf/simulated/floor/plating,/area/awaymission/research/interior) +"ex" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ey" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/awaymission/research/interior/cryo) +"ez" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior/cryo) +"eA" = (/obj/machinery/alarm{pixel_y = 32},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior/cryo) +"eB" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/awaymission/research/interior/cryo) +"eC" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/cryo) +"eD" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/awaymission/research/interior/cryo) +"eE" = (/obj/structure/extinguisher_cabinet{pixel_y = 32},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior/cryo) +"eF" = (/mob/living/simple_animal/hostile/nanotrasen/ranged,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior/cryo) +"eG" = (/obj/item/ammo_casing/c9mm,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior/cryo) +"eH" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel{icon_state = "damaged4"},/area/awaymission/research/interior/cryo) +"eI" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"eJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"eK" = (/obj/structure/closet/crate,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"eL" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"eM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/awaymission/research/interior) +"eN" = (/turf/simulated/floor/plasteel/white,/area/awaymission/research/interior) +"eO" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; dir = 1},/area/awaymission/research/interior) +"eP" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTHEAST)"; icon_state = "whiteyellow"; dir = 5},/area/awaymission/research/interior) +"eQ" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"eR" = (/turf/simulated/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTHWEST)"; icon_state = "whiteyellow"; dir = 9},/area/awaymission/research/interior) +"eS" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior) +"eT" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"eU" = (/obj/machinery/door/window/northright{name = "Cell Door"; req_access_txt = "63"},/turf/simulated/floor/plasteel/red/side{dir = 1},/area/awaymission/research/interior/security) +"eV" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/research/interior/security) +"eW" = (/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel/red/side{dir = 1},/area/awaymission/research/interior/security) +"eX" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -32; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"eY" = (/mob/living/simple_animal/hostile/nanotrasen/ranged/smg,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"eZ" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"fa" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/research/interior) +"fb" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior) +"fc" = (/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"fd" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "Cryostatis APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"fe" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/awaymission/research/interior/cryo) +"ff" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/simulated/floor/plasteel/white,/area/awaymission/research/interior/cryo) +"fg" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -7; pixel_y = 1},/turf/simulated/floor/plasteel/white,/area/awaymission/research/interior/cryo) +"fh" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/turf/simulated/floor/plasteel/white,/area/awaymission/research/interior/cryo) +"fi" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/awaymission/research/interior/cryo) +"fj" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/awaymission/research/interior/cryo) +"fk" = (/obj/effect/decal/cleanable/blood/drip,/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/simulated/floor/plasteel/white,/area/awaymission/research/interior/cryo) +"fl" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/awaymission/research/interior/cryo) +"fm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/awaymission/research/interior) +"fn" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/awaymission/research/interior) +"fo" = (/obj/effect/decal/cleanable/blood/drip,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/white,/area/awaymission/research/interior) +"fp" = (/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"fq" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/research/interior) +"fr" = (/turf/simulated/floor/plasteel/whitered/corner,/area/awaymission/research/interior/security) +"fs" = (/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior/security) +"ft" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior/security) +"fu" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior/security) +"fv" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior/security) +"fw" = (/obj/machinery/alarm{pixel_y = 32},/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior/security) +"fx" = (/obj/structure/sign/goldenplaque{pixel_x = 32},/turf/simulated/floor/plasteel/whitered/corner{tag = "icon-whiteredcorner (WEST)"; icon_state = "whiteredcorner"; dir = 8},/area/awaymission/research/interior/security) +"fy" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"fz" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"fA" = (/obj/machinery/power/apc{cell_type = 12000; dir = 4; name = "Vault APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"fB" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"fC" = (/obj/machinery/light/small{dir = 8},/mob/living/simple_animal/hostile/nanotrasen/ranged/smg,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"fD" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"fE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"fF" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/awaymission/research/interior/cryo) +"fG" = (/turf/simulated/floor/plasteel/whitepurple/side,/area/awaymission/research/interior/cryo) +"fH" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/awaymission/research/interior/cryo) +"fI" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"fJ" = (/obj/effect/landmark/corpse/syndicatesoldier{corpsebrute = 200},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whitepurple/side,/area/awaymission/research/interior/cryo) +"fK" = (/obj/item/ammo_casing/c9mm,/turf/simulated/floor/plasteel/whitepurple/side,/area/awaymission/research/interior/cryo) +"fL" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/awaymission/research/interior/cryo) +"fM" = (/obj/machinery/door/airlock/research{name = "Cryogenetics Research"; req_access_txt = "9"},/turf/simulated/floor/plasteel/whitepurple/side,/area/awaymission/research/interior/cryo) +"fN" = (/turf/simulated/floor/plasteel/whitepurple/side,/area/awaymission/research/interior) +"fO" = (/obj/machinery/door/airlock/research{name = "Cryogenetics Research"; req_access_txt = "9"},/turf/simulated/floor/plasteel/whitepurple/side,/area/awaymission/research/interior) +"fP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/awaymission/research/interior) +"fQ" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/awaymission/research/interior) +"fR" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteyellow,/area/awaymission/research/interior) +"fS" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (SOUTHEAST)"; icon_state = "whitered"; dir = 6},/area/awaymission/research/interior) +"fT" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (SOUTHWEST)"; icon_state = "whitered"; dir = 10},/area/awaymission/research/interior) +"fU" = (/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior) +"fV" = (/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior) +"fW" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/whitered/side,/area/awaymission/research/interior/security) +"fX" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (SOUTHEAST)"; icon_state = "whitered"; dir = 6},/area/awaymission/research/interior/security) +"fY" = (/mob/living/simple_animal/hostile/nanotrasen/ranged/smg,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"fZ" = (/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"ga" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gc" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gd" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"ge" = (/obj/structure/extinguisher_cabinet{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior/security) +"gf" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gh" = (/obj/machinery/power/terminal,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gi" = (/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 1; name = "Power Storage"; req_access_txt = "36"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/hostile/nanotrasen/ranged/smg,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/barricade/security,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 0; name = "Vault Storage"; req_access_txt = "36"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"go" = (/obj/structure/barricade/security,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"gp" = (/obj/machinery/door/airlock/research{name = "Secure Storage"; req_access_txt = "9,63"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/secure) +"gq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior) +"gr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/research/interior) +"gs" = (/obj/machinery/door/airlock/research{name = "Cryogenetics Research"; req_access_txt = "9"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior) +"gt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"gu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"gv" = (/obj/machinery/door/airlock/research{name = "Cryogenetics Research"; req_access_txt = "9"},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gw" = (/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gx" = (/mob/living/simple_animal/hostile/nanotrasen/ranged,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gy" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 145; corpseidjob = "Geneticist"; corpseoxy = 55; corpsesuit = /obj/item/clothing/suit/toggle/labcoat/genetics; corpseuniform = /obj/item/clothing/under/rank/geneticist; name = "Geneticist"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gz" = (/obj/item/ammo_casing/c9mm,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gA" = (/obj/item/ammo_casing/c9mm,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gB" = (/obj/machinery/light{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"gC" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"gD" = (/obj/structure/sign/science,/turf/simulated/wall/r_wall,/area/awaymission/research/interior) +"gE" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"gF" = (/mob/living/simple_animal/hostile/syndicate/melee,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"gG" = (/turf/simulated/floor/plasteel,/area/awaymission/research/interior) +"gH" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior) +"gI" = (/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior) +"gJ" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior) +"gK" = (/obj/machinery/light{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior) +"gL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior) +"gM" = (/obj/structure/barricade/security,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gN" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gP" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"gT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior/security) +"gU" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/awaymission/research/interior/cryo) +"gV" = (/obj/item/weapon/melee/classic_baton/telescopic,/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior/cryo) +"gW" = (/obj/item/weapon/reagent_containers/spray/pepper,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/awaymission/research/interior/cryo) +"gX" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior/cryo) +"gY" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/area/awaymission/research/interior/cryo) +"gZ" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/area/awaymission/research/interior) +"ha" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/whitepurple,/area/awaymission/research/interior) +"hb" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/area/awaymission/research/interior) +"hc" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whitegreen,/area/awaymission/research/interior) +"hd" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTHEAST)"; icon_state = "whitered"; dir = 5},/area/awaymission/research/interior) +"he" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTHWEST)"; icon_state = "whitered"; dir = 9},/area/awaymission/research/interior) +"hf" = (/obj/machinery/door/airlock/glass_security{id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior) +"hg" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior) +"hh" = (/obj/structure/barricade/security,/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior/security) +"hi" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTHEAST)"; icon_state = "whitered"; dir = 5},/area/awaymission/research/interior/security) +"hj" = (/obj/structure/table,/obj/item/weapon/folder,/obj/item/weapon/folder,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"hk" = (/obj/structure/table,/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"hl" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/whitered,/area/awaymission/research/interior/security) +"hm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior/security) +"hn" = (/mob/living/simple_animal/hostile/nanotrasen,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/cryo) +"ho" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/awaymission/research/interior) +"hp" = (/turf/simulated/floor/plasteel/whitegreen,/area/awaymission/research/interior) +"hq" = (/turf/simulated/floor/plasteel/whitered/corner{tag = "icon-whiteredcorner (EAST)"; icon_state = "whiteredcorner"; dir = 4},/area/awaymission/research/interior/security) +"hr" = (/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior/security) +"hs" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior/security) +"ht" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior/security) +"hu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior/security) +"hv" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"hw" = (/obj/machinery/light,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/awaymission/research/interior/cryo) +"hx" = (/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/cryo) +"hy" = (/obj/machinery/light,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/awaymission/research/interior/cryo) +"hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"hA" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"hB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/awaymission/research/interior) +"hC" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior) +"hD" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (SOUTHEAST)"; icon_state = "whitegreen"; dir = 6},/area/awaymission/research/interior) +"hE" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (SOUTHWEST)"; icon_state = "whitegreen"; dir = 10},/area/awaymission/research/interior) +"hF" = (/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior) +"hG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"hH" = (/obj/machinery/door/window/southright{name = "Cell Door"; req_access_txt = "63"},/turf/simulated/floor/plasteel/red/side,/area/awaymission/research/interior/security) +"hI" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/research/interior/security) +"hJ" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/research/interior/security) +"hK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/vending/security,/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior/security) +"hL" = (/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 1; locked = 1; name = "Secure Storage A"; req_access_txt = "36"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"hM" = (/obj/machinery/door/airlock/highsecurity{aiDisabledIdScanner = 1; locked = 1; name = "Secure Storage B"; req_access_txt = "36"},/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"hN" = (/obj/machinery/door/poddoor{id = "cryopodg1"; name = "cryogenetic genetics blastdoor"},/turf/simulated/floor/plasteel/stairs{tag = "icon-stairs (NORTH)"; icon_state = "stairs"; dir = 1},/area/awaymission/research/interior/genetics) +"hO" = (/turf/simulated/floor/plasteel/white/corner{tag = "icon-whitecorner (EAST)"; icon_state = "whitecorner"; dir = 4},/area/awaymission/research/interior) +"hP" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior) +"hQ" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 200},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior) +"hR" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHEAST)"; icon_state = "whitegreen"; dir = 5},/area/awaymission/research/interior) +"hS" = (/obj/structure/sign/directions/medical{pixel_x = 32; pixel_y = -32},/obj/structure/sign/directions/evac{pixel_x = 32; pixel_y = -24},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/awaymission/research/interior) +"hT" = (/turf/simulated/floor/plasteel/white/corner{tag = "icon-whitecorner (NORTH)"; icon_state = "whitecorner"; dir = 1},/area/awaymission/research/interior) +"hU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/table,/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (WEST)"; icon_state = "whitered"; dir = 8},/area/awaymission/research/interior/security) +"hV" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines. This one has the initials 'C.P' marked on the front. "; name = "encrypted genetic data disk"; read_only = 1},/obj/item/clothing/head/collectable/petehat{name = "dusty hat"},/obj/item/device/firing_pin/dna,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"hW" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/device/firing_pin/dna,/obj/item/weapon/dnainjector/hulkmut,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"hX" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"hY" = (/obj/structure/flora/kirbyplants{icon_state = "plant-10"; layer = 4.1},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"hZ" = (/obj/structure/window/reinforced{dir = 8},/mob/living/carbon/monkey,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"ia" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ib" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ic" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior) +"id" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior) +"ie" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"if" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"ig" = (/turf/simulated/wall,/area/awaymission/research/interior/maint) +"ih" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ii" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ij" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/red,/area/awaymission/research/interior/security) +"ik" = (/obj/structure/flora/kirbyplants/dead{desc = "A potted plant, it doesn't look very healthy.."; name = "dead potted plant"},/turf/simulated/floor/plasteel/whitered/corner{tag = "icon-whiteredcorner (EAST)"; icon_state = "whiteredcorner"; dir = 4},/area/awaymission/research/interior/security) +"il" = (/mob/living/simple_animal/bot/secbot/beepsky{desc = "A beefy variant of the standard securitron model."; emagged = 1; faction = list("nanotrasenprivate"); health = 50; maxHealth = 50; name = "Officer Genesky"},/turf/simulated/floor/plasteel/whitered/side{tag = "icon-whitered (NORTH)"; icon_state = "whitered"; dir = 1},/area/awaymission/research/interior/security) +"im" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/whitered/corner{tag = "icon-whiteredcorner (NORTH)"; icon_state = "whiteredcorner"; dir = 1},/area/awaymission/research/interior/security) +"in" = (/obj/structure/closet/crate,/obj/item/weapon/disk/data{desc = "A specialized data disk for holding critical genetic backup data. Without proper passwords, infomation will turn up blank on most DNA machines."; name = "encrypted genetic data disk"; read_only = 1},/obj/item/device/firing_pin/dna/dredd,/obj/item/device/firing_pin/dna/dredd,/obj/item/weapon/dnainjector/lasereyesmut,/obj/item/weapon/dnainjector/lasereyesmut,/turf/simulated/floor/plasteel/black,/area/awaymission/research/interior/secure) +"io" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"ip" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 145; corpseidjob = "Geneticist"; corpseoxy = 55; corpsesuit = /obj/item/clothing/suit/toggle/labcoat/genetics; corpseuniform = /obj/item/clothing/under/rank/geneticist; name = "Geneticist"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"iq" = (/obj/structure/mirror{pixel_x = -32},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"ir" = (/obj/structure/urinal{pixel_y = 32},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"is" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"it" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior) +"iu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/whitegreen,/area/awaymission/research/interior) +"iv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior) +"iw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"ix" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Security Maintenance"; req_access_txt = "63"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"iy" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "Genetics APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/research/interior/genetics) +"iz" = (/obj/machinery/door/window/eastleft,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"iA" = (/obj/structure/bed/chair/office/dark,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"iB" = (/obj/machinery/door/window/westright,/turf/simulated/floor/plasteel/purple,/area/awaymission/research/interior/genetics) +"iC" = (/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iD" = (/obj/machinery/door/airlock{name = "Stall"},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iE" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/obj/effect/landmark{name = "awaystart"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iF" = (/turf/simulated/wall,/area/awaymission/research/interior) +"iG" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior) +"iH" = (/obj/machinery/power/apc{dir = 1; name = "Security APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/security) +"iI" = (/obj/machinery/computer/scan_consolenew,/obj/machinery/light,/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"iJ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/pepper,/obj/machinery/button/door{id = "cryopodg1"; name = "panic lockdown button"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -32; tag = "icon-alarm0 (NORTH)"},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"iK" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = -32},/turf/simulated/floor/plasteel/darkpurple,/area/awaymission/research/interior/genetics) +"iL" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iM" = (/obj/structure/window/reinforced/tinted,/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iN" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iO" = (/turf/simulated/wall,/area/awaymission/research/interior/bathroom) +"iP" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iQ" = (/obj/structure/window/reinforced/tinted{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iR" = (/obj/machinery/door/airlock{name = "Unisex Bathroom"},/turf/simulated/floor/plasteel/freezer,/area/awaymission/research/interior/bathroom) +"iS" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior) +"iT" = (/turf/simulated/floor/plasteel,/area/awaymission/research/interior/maint) +"iU" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/awaymission/research/interior/maint) +"iV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"iW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/awaymission/research/interior/maint) +"iX" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"iY" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/medbay) +"iZ" = (/turf/simulated/wall,/area/awaymission/research/interior/dorm) +"ja" = (/obj/machinery/door/airlock{name = "Bathroom"},/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"jb" = (/obj/machinery/alarm{pixel_y = 32},/turf/simulated/floor/plasteel/whiteblue/corner,/area/awaymission/research/interior/medbay) +"jc" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"jd" = (/obj/structure/table,/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"je" = (/obj/structure/table,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"jf" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"jg" = (/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/awaymission/research/interior/medbay) +"jh" = (/turf/simulated/wall,/area/awaymission/research/interior/medbay) +"ji" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel/whiteblue/corner,/area/awaymission/research/interior/medbay) +"jj" = (/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"jk" = (/obj/structure/dresser,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jl" = (/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jm" = (/obj/structure/closet/secure_closet/personal/cabinet,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jn" = (/obj/structure/flora/kirbyplants{icon_state = "plant-14"; layer = 4.1},/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (NORTHWEST)"; icon_state = "yellowsiding"; dir = 9},/area/awaymission/research/interior/dorm) +"jo" = (/turf/simulated/floor/plasteel/yellowsiding{dir = 1},/area/awaymission/research/interior/dorm) +"jp" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/yellowsiding{dir = 1},/area/awaymission/research/interior/dorm) +"jq" = (/obj/structure/barricade/wooden{desc = "A wooden table hastely flipped over for cover."; health = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; maxhealth = 55; name = "flipped table"},/turf/simulated/floor/plasteel/yellowsiding{dir = 1},/area/awaymission/research/interior/dorm) +"jr" = (/turf/simulated/floor/plasteel/green/side{dir = 5},/area/awaymission/research/interior) +"js" = (/obj/structure/sign/directions/security{dir = 1; icon_state = "direction_sec"; pixel_x = 32; pixel_y = 40},/obj/structure/sign/directions/engineering{dir = 1; icon_state = "direction_eng"; pixel_x = 32; pixel_y = 33; tag = "icon-direction_eng (NORTH)"},/obj/structure/sign/directions/science{dir = 1; icon_state = "direction_sci"; pixel_x = 32; pixel_y = 26; tag = "icon-direction_sci (NORTH)"},/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plasteel/whitegreen,/area/awaymission/research/interior) +"jt" = (/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior) +"ju" = (/obj/machinery/door/airlock/medical{name = "Medical"},/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior) +"jv" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"jw" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/awaymission/research/interior/medbay) +"jx" = (/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jy" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"jz" = (/obj/machinery/door/airlock/medical{name = "Medical Surgey"},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jA" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"jB" = (/obj/structure/table/optable,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jC" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"jD" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jE" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jF" = (/turf/simulated/floor/plasteel/yellowsiding{dir = 8},/area/awaymission/research/interior/dorm) +"jG" = (/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"jH" = (/obj/structure/barricade/wooden{desc = "A wooden table hastely flipped over for cover."; health = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; maxhealth = 55; name = "flipped table"},/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"jI" = (/turf/simulated/floor/plasteel/green/side{dir = 4},/area/awaymission/research/interior) +"jJ" = (/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior) +"jK" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior) +"jL" = (/obj/structure/sign/bluecross,/turf/simulated/wall/r_wall,/area/awaymission/research/interior) +"jM" = (/obj/machinery/light{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior) +"jN" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior) +"jO" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jP" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jQ" = (/mob/living/simple_animal/hostile/syndicate/ranged,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jR" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"jS" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/research/interior/medbay) +"jT" = (/obj/structure/table,/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"jU" = (/obj/machinery/button/door{id = "Dorm1"; name = "Privacy Button"; pixel_y = -28},/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jV" = (/obj/structure/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jW" = (/obj/machinery/button/door{id = "Dorm2"; name = "Privacy Button"; pixel_y = -28},/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jX" = (/obj/structure/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jY" = (/obj/machinery/button/door{id = "Dorm3"; name = "Privacy Button"; pixel_y = -28},/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"jZ" = (/obj/structure/bed,/obj/item/weapon/bedsheet/clown,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"ka" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 200},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kb" = (/turf/simulated/floor/plasteel/yellowsiding/corner,/area/awaymission/research/interior/dorm) +"kc" = (/obj/structure/barricade/wooden{desc = "A wooden table hastely flipped over for cover."; health = 55; icon = 'icons/obj/smooth_structures/wood_table.dmi'; icon_state = "wood_table"; maxhealth = 55; name = "flipped table"},/turf/simulated/floor/plasteel/yellowsiding,/area/awaymission/research/interior/dorm) +"kd" = (/turf/simulated/floor/plasteel/yellowsiding,/area/awaymission/research/interior/dorm) +"ke" = (/turf/simulated/floor/plasteel/green/side{dir = 6},/area/awaymission/research/interior) +"kf" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior) +"kg" = (/obj/machinery/door/airlock/medical{name = "Medical"},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior) +"kh" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"ki" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"kj" = (/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/awaymission/research/interior/medbay) +"kk" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 145; corpseidjob = "Geneticist"; corpseoxy = 55; corpsesuit = /obj/item/clothing/suit/toggle/labcoat/genetics; corpseuniform = /obj/item/clothing/under/rank/geneticist; name = "Geneticist"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"kl" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"km" = (/obj/structure/table,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/awaymission/research/interior/medbay) +"kn" = (/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"ko" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"kp" = (/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (NORTH)"; icon_state = "whitebluecorner"; dir = 1},/area/awaymission/research/interior/medbay) +"kq" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "Dorms APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/research/interior/dorm) +"kr" = (/obj/machinery/door/airlock{id_tag = "Dorm1"; name = "Dorm 1"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"ks" = (/obj/machinery/door/airlock{id_tag = "Dorm2"; name = "Dorm 2"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"kt" = (/obj/machinery/door/airlock{id_tag = "Dorm3"; name = "Dorm 3"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"ku" = (/obj/item/weapon/gun/projectile/automatic/pistol/m1911,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kv" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"kw" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/awaymission/research/interior) +"kx" = (/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/awaymission/research/interior/medbay) +"ky" = (/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"kz" = (/obj/structure/table,/obj/machinery/light,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"kA" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"kB" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"kC" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted/fulltile,/turf/simulated/floor/plating,/area/awaymission/research/interior/medbay) +"kD" = (/obj/structure/flora/kirbyplants{icon_state = "plant-22"},/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (NORTHWEST)"; icon_state = "yellowsiding"; dir = 9},/area/awaymission/research/interior/dorm) +"kE" = (/turf/simulated/floor/plasteel/yellowsiding/corner{dir = 1},/area/awaymission/research/interior/dorm) +"kF" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kG" = (/obj/structure/closet/wardrobe/green,/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"kH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"kI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior) +"kJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/whitegreen,/area/awaymission/research/interior) +"kK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior) +"kL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"kM" = (/turf/simulated/floor/plating,/area/awaymission/research/interior/medbay) +"kN" = (/obj/machinery/door/airlock/medical{name = "Medical Storage"},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"kO" = (/obj/machinery/vending/cola,/turf/simulated/floor/plasteel/whiteblue/corner,/area/awaymission/research/interior/medbay) +"kP" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"kQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"kR" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel/yellowsiding{dir = 8},/area/awaymission/research/interior/dorm) +"kS" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kT" = (/obj/structure/table/wood,/obj/item/weapon/storage/pill_bottle/dice,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kU" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/fourcolor,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kV" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"kW" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"kX" = (/turf/simulated/floor/plasteel/whiteblue/corner,/area/awaymission/research/interior/medbay) +"kY" = (/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"kZ" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/whiteblue/corner,/area/awaymission/research/interior/medbay) +"la" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/whiteblue/side,/area/awaymission/research/interior/medbay) +"lb" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/awaymission/research/interior/medbay) +"lc" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"ld" = (/obj/structure/window/reinforced,/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"le" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"lf" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"lg" = (/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"lh" = (/obj/effect/decal/cleanable/blood/drip,/obj/item/ammo_casing/c45,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"li" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"lj" = (/obj/effect/decal/cleanable/blood,/obj/item/stack/rods,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"lk" = (/obj/effect/decal/cleanable/blood/drip,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"ll" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"lm" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"ln" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/yellowsiding{dir = 8},/area/awaymission/research/interior/dorm) +"lo" = (/turf/simulated/floor/plasteel,/area/space) +"lp" = (/obj/structure/table/wood,/obj/structure/bedsheetbin,/turf/simulated/floor/plasteel,/area/awaymission/research/interior/dorm) +"lq" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"lr" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"ls" = (/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"lt" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"lu" = (/obj/effect/decal/cleanable/blood,/obj/item/ammo_casing/c45,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"lv" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/awaymission/research/interior/medbay) +"lw" = (/obj/effect/decal/cleanable/blood/drip,/obj/item/ammo_casing/c45,/obj/item/stack/rods,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/awaymission/research/interior/medbay) +"lx" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 200},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteblue,/area/awaymission/research/interior/medbay) +"ly" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/awaymission/research/interior/medbay) +"lz" = (/obj/structure/flora/kirbyplants{icon_state = "plant-16"; layer = 4.1},/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (SOUTHWEST)"; icon_state = "yellowsiding"; dir = 10},/area/awaymission/research/interior/dorm) +"lA" = (/obj/machinery/light,/turf/simulated/floor/plasteel/yellowsiding,/area/awaymission/research/interior/dorm) +"lB" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel/yellowsiding,/area/awaymission/research/interior/dorm) +"lC" = (/turf/simulated/floor/plasteel/yellowsiding/corner{dir = 8},/area/awaymission/research/interior/dorm) +"lD" = (/obj/machinery/iv_drip,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/awaymission/research/interior/medbay) +"lE" = (/obj/machinery/light,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"lF" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/brute,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (NORTH)"; icon_state = "whitebluecorner"; dir = 1},/area/awaymission/research/interior/medbay) +"lG" = (/obj/effect/landmark/corpse/doctor{corpsebrute = 200},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/awaymission/research/interior/medbay) +"lH" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (NORTH)"; icon_state = "whitebluecorner"; dir = 1},/area/awaymission/research/interior/medbay) +"lI" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/awaymission/research/interior/medbay) +"lJ" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/awaymission/research/interior/medbay) +"lK" = (/obj/structure/closet/crate/bin,/obj/item/trash/can,/obj/item/trash/chips,/turf/simulated/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (NORTH)"; icon_state = "whitebluecorner"; dir = 1},/area/awaymission/research/interior/medbay) +"lL" = (/obj/machinery/door/airlock{id_tag = "Dorm6"; name = "Dorm 6"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lM" = (/obj/machinery/door/airlock{id_tag = "Dorm5"; name = "Dorm 5"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lN" = (/obj/machinery/door/airlock{id_tag = "Dorm4"; name = "Dorm 4"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lO" = (/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 32; tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"lP" = (/obj/machinery/button/door{id = "Dorm6"; name = "Privacy Button"; pixel_y = 28},/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lQ" = (/obj/structure/bed,/obj/item/weapon/bedsheet/rainbow,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lR" = (/obj/machinery/button/door{id = "Dorm5"; name = "Privacy Button"; pixel_y = 28},/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lS" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lT" = (/obj/machinery/button/door{id = "Dorm4"; name = "Privacy Button"; pixel_y = 28},/obj/structure/table/wood,/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lU" = (/obj/structure/bed,/obj/item/weapon/bedsheet/patriot,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/wood,/area/awaymission/research/interior/dorm) +"lV" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (EAST)"; icon_state = "yellowsiding"; dir = 4},/area/awaymission/research/interior/dorm) +"lW" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/awaymission/research/interior/maint) +"lX" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Medbay APC"; pixel_y = 24},/turf/simulated/floor/plating,/area/awaymission/research/interior/medbay) +"lY" = (/obj/structure/closet/crate/bin,/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (SOUTHWEST)"; icon_state = "yellowsiding"; dir = 10},/area/awaymission/research/interior/dorm) +"lZ" = (/turf/simulated/floor/plasteel/yellowsiding{tag = "icon-yellowsiding (SOUTHEAST)"; icon_state = "yellowsiding"; dir = 6},/area/awaymission/research/interior/dorm) +"ma" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/power/apc{dir = 1; name = "Escape APC"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"mb" = (/turf/simulated/wall/r_wall,/area/awaymission/research/interior/escapepods) +"mc" = (/turf/simulated/wall,/area/awaymission/research/interior/escapepods) +"md" = (/obj/item/stack/rods,/obj/item/weapon/shard,/turf/simulated/floor/plating/asteroid,/area/awaymission/research/exterior) +"me" = (/turf/simulated/floor/plating/asteroid,/area/awaymission/research/exterior) +"mf" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/awaymission/research/exterior) +"mg" = (/turf/simulated/floor/plating/asteroid/airless,/obj/structure/shuttle/engine/propulsion/burst{tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; dir = 8},/turf/simulated/wall/shuttle{dir = 3; icon_state = "swall_f10"; layer = 2},/area/awaymission/research/exterior) +"mh" = (/obj/structure/closet/emcloset,/obj/structure/sign/vacuum{pixel_y = 32},/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"mi" = (/obj/structure/sign/pods{pixel_x = -32},/turf/simulated/floor/plasteel/whitegreen/corner,/area/awaymission/research/interior/escapepods) +"mj" = (/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior/escapepods) +"mk" = (/obj/structure/table,/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior/escapepods) +"ml" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior/escapepods) +"mm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior/escapepods) +"mn" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (SOUTHEAST)"; icon_state = "whitegreen"; dir = 6},/area/awaymission/research/interior/escapepods) +"mo" = (/turf/simulated/floor/plasteel/whitegreen,/area/awaymission/research/interior/escapepods) +"mp" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (SOUTHWEST)"; icon_state = "whitegreen"; dir = 10},/area/awaymission/research/interior/escapepods) +"mq" = (/turf/simulated/floor/plasteel/whitegreen/corner{tag = "icon-whitegreencorner (WEST)"; icon_state = "whitegreencorner"; dir = 8},/area/awaymission/research/interior/escapepods) +"mr" = (/turf/simulated/floor/plating,/area/awaymission/research/exterior) +"ms" = (/obj/item/stack/rods,/obj/item/weapon/shard,/obj/effect/landmark/corpse/doctor{corpsebrute = 200},/turf/simulated/floor/plasteel/shuttle,/area/awaymission/research/exterior) +"mt" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark/corpse/doctor{corpsebrute = 145; corpseidjob = "Geneticist"; corpseoxy = 55; corpsesuit = /obj/item/clothing/suit/toggle/labcoat/genetics; corpseuniform = /obj/item/clothing/under/rank/geneticist; name = "Geneticist"},/turf/simulated/floor/plasteel/shuttle,/area/awaymission/research/exterior) +"mu" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/awaymission/research/exterior) +"mv" = (/obj/machinery/door/airlock/external{name = "Escape Pod One"},/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"mw" = (/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"mx" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior/escapepods) +"my" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior/escapepods) +"mz" = (/turf/simulated/floor/plating/asteroid/airless,/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/awaymission/research/exterior) +"mA" = (/turf/simulated/floor/plating/asteroid/airless,/obj/structure/shuttle/engine/propulsion/burst{tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; dir = 8},/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/awaymission/research/exterior) +"mB" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior/escapepods) +"mC" = (/turf/simulated/wall,/area/awaymission/research/exterior) +"mD" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior/escapepods) +"mE" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/awaymission/research/interior/escapepods) +"mF" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior/escapepods) +"mG" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior/escapepods) +"mH" = (/obj/structure/table,/obj/machinery/light,/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior/escapepods) +"mI" = (/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTHEAST)"; icon_state = "whitegreen"; dir = 5},/area/awaymission/research/interior/escapepods) +"mJ" = (/obj/structure/sign/pods{pixel_x = -32},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior/escapepods) +"mK" = (/obj/structure/flora/kirbyplants{layer = 4.1},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (WEST)"; icon_state = "whitegreen"; dir = 8},/area/awaymission/research/interior/escapepods) +"mL" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/grass,/area/awaymission/research/interior/escapepods) +"mM" = (/obj/structure/flora/ausbushes/fernybush,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/grass,/area/awaymission/research/interior/escapepods) +"mN" = (/obj/structure/flora/ausbushes/grassybush,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/grass,/area/awaymission/research/interior/escapepods) +"mO" = (/obj/structure/flora/kirbyplants{icon_state = "applebush"; layer = 4.1},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior/escapepods) +"mP" = (/obj/machinery/door/airlock/external{name = "Escape Pod Two"},/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"mQ" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior/escapepods) +"mR" = (/obj/structure/table,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel/whitegreen/side,/area/awaymission/research/interior/escapepods) +"mS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4},/area/awaymission/research/interior/escapepods) +"mT" = (/obj/machinery/door/airlock/external{name = "Escape Pod Three"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"mU" = (/turf/simulated/floor/plasteel/whitegreen/corner{tag = "icon-whitegreencorner (EAST)"; icon_state = "whitegreencorner"; dir = 4},/area/awaymission/research/interior/escapepods) +"mV" = (/obj/structure/sign/vacuum{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior/escapepods) +"mW" = (/obj/machinery/light,/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior/escapepods) +"mX" = (/obj/structure/sign/vacuum{pixel_y = -32},/turf/simulated/floor/plasteel/whitegreen/side{tag = "icon-whitegreen (NORTH)"; icon_state = "whitegreen"; dir = 1},/area/awaymission/research/interior/escapepods) +"mY" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 32; tag = "icon-alarm0 (WEST)"},/turf/simulated/floor/plasteel/whitegreen/corner{tag = "icon-whitegreencorner (NORTH)"; icon_state = "whitegreencorner"; dir = 1},/area/awaymission/research/interior/escapepods) +"mZ" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"na" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating,/area/awaymission/research/interior/escapepods) +"nb" = (/turf/simulated/wall/mineral/plasma,/area/space) +"nc" = (/obj/structure/table/wood,/obj/item/weapon/spellbook/oneuse/random,/turf/simulated/floor/mineral/plasma,/area/space) +"nd" = (/mob/living/simple_animal/hostile/creature,/turf/simulated/floor/mineral/plasma,/area/space) +"ne" = (/obj/structure/divine/healingfountain/anyone,/turf/simulated/floor/mineral/plasma,/area/space) +"nf" = (/turf/simulated/floor/mineral/plasma,/area/space) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaabababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaabababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababacacacacacacacacacacababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababacacacacacacacacacacacacacacacacababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacacacacacababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacabababababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaacacacacacacacacacabababababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacabababababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacabababababababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacababababababababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacababababababababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaadadadadaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaadadadadadaeaeaeaeaeaeaeaeaeaeaeaeagahaiaiajakaeaeaeaeaeaeaeaeaeaeadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaadadadadadaeaeaeaeaeaeaeaeaeaeaeaealamananaoalaeaeaeaeaeaeaeaeaeaeadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaealapananaqalaeaeaeaeaeaeaeaeaeaeadadadadaaaaaaaaaaaaaaaaaaaaadadadaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaealapananaqalaeaeaeaeaeaeaeaeaeaeadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaearararalapasanaqalararararaeaeaeaeaeadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacaaaaaaaaaaaaababacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaearataualapananaqalavawaxaraeaeaeaeaeaeadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacaaaaaaaaaaaaababacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeadadadadarataualapananayalazaAaBaCaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacaaaaaaaaaaaaababababacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeadadadadadadadaraDaEalananananalaFaGaBaCaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHaHararaIalaJanaKaLalaMaNaBaCaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHaOaPaQaRaSalaTaualaUauaVaWaraeaeaeaeaeadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaeaeadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacaXacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHaYaraZbabbbcbdbebfbgaNbhbiaraebjaeaeadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacbkacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeadadadadaaaaadadadadadadadadadadadadadadadadadadblblblblblblbladadadadadadadadadadadadadadadadadadadadadadadadaHbmarbnbhbobpbqbrbsbtbubvbwarbxaHaeadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacbyaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeadadadadadadadadadadadadadadadadadadadadadadadblblbzbAbBbCbzblbladadadadadadadadadadadadadadadadadadadadadadadaHbDarbEbFbGbHbIbJbKbLbMbNbOarbPaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadadadadblbQbRbSbTbUbRbzbladadadadadadadadadadadadadadadadadadadadadadadaHbDarararararbVbWbXarararararbxaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacaaaaaaaaacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadadblbQbRbYbZcabRcbbladadadadadadadaHaHaHaHaHaHaHaHaHaHaHadadadadadaHcccdcdcdcearcfcgbdaraOaOaOaOchaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadadblcicjcjckcjcjclbladadadadadaHaHaHcmcdcdcdcdcdcdcnceaHaHaHadadadaHaHaHaHaHcocpcqcrcscpaOaHaHaHaHaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadadblctbzbzbzbzcucvbladadadadadaHcmcdcwcxcxcxcxcxcycxcccdczaHadadadadadadadaHcocpcAcBcCcpaOaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeadadadadadadadadadadadadadadadadadadadadblblcDbzcucEcFblbladadadadadaHcocxcxcxcGcHcIcJcKcxcxcxcoaHadadadadadadadaHcLcMcNcOcPcpaOaHadadadadadaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeadadadadcQcQcQcQcQcQcQcQcQcQcQadadadadadadblblblcRblblbladadadadadadaHcScxcTcUcKcKcVcKcKcWcXcxcoaHadadadadadadadaHcYcpcZcpdacpaOaHadadadadadaHaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeaeaeadadadadadcQdbdcdcddcQdedcdcdfcQadadadadadadadadcpdgcpadadadadadadadadaHcocxdhdicKdjdkcKdldhdhcxcoaHadadadadaHaHaHaHdmaPdndodpaPaOaHaHaHaHadadaHaOdqdqdqdqdqdqdqdqdqdqdqdqdqdqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeaeaeadadadadadcQdbdcdcdrcQdbdcdcddcQadadadadadadaeaecpdgcpaeaeadadadaHaHaHaHcocxdsdtcKducKcKdvdwdxcxcoaHaHaHaHaHaHdycddzdAcpdBdCdDcpdEaOaOaOaHaHadaHaOdqdFdGdHdqdFdGdHdqdIdJdKdLdqaOaHadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadcQdMdcdcdNcQdMdcdcdOcQadadadadadaeaeaecpdgcpaeaeaeadadaHcmcdcdcwcxcTdtdPcKdQdRcKdSdhcxccdTdTdTcdcdcddUcpcpcpcpcZcpdacpcpcpcpaOaOaHadaHaOdqdJdJdVdqdJdJdVdqdWdJdJdXdqaOaHadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadcQcQdYcQcQcQcQdZcQcQcQcQcQcQcQaeaeaeeaeadgeaeaaeaeaeadaHebececececececececedececececececeeefegeheiejekcpelemeneoepeqememercpaHaOaHaHaHaOdqdJdJesdqdJdJesdqetdJdJeudqaOaHadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadcQevdcdcdcdcdcdcdcdccQdcdcdccQaeaeaeeaewdgeweaaeaeaeaHaHexeceyezezezeAezeBeCeDezeEeFeGezeHeceIeJeieKcceLeMeNeOePeQeReOeNeScpaHaOeTaOaOaOdqdqeUeVdqdqeUeVdqdqeWeWdqdqaOaHadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadcQcQcQcQcQeXdcdceYeZcQdcdcdccQaeaeaecpfadgfbcpaeaeaecpfcfdecfefffgfffhfffieCfjfffgfffhfkflcpcpcpcpcpcpcpfmfneNfofpeNeNfqeScpcpaPcpcpcpcpdqfrfsftfufsfsftfvfwfsfsfxdqaOaHadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadcQfyfzfAcQdMdcdceZfBcQfCdcdccQeaeaeaeaewdgeweaeaeaeacpfDfEecfFfGfGfGfGfGfHfIfFfGfGfJfKfKfLfMfNfNfOfNfNfOfPfQeNeNfReNeNfSfTfUfVfVfUfVfVfUfWfXfYfZgafZfZfZgbgcgdfZgedqaOaHadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadcQgfggghgigjgkglgmgkgngkgkgogpgqgqgqgqgqgrgqgqgqgqgqgsgtgugvgwgwgxgwgwgwgwgygwgwgwgzgwgxgAcpfcgBcpgCfcgDgEfcgFfcgGgHgIgJgKcpgIgKcpgLgIcpgMfZfZfZgNgOgOgOgPgQgRgSgTdqaOaHadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadcQdcdcfycQdMdcdceZfBcQfCdcdccQeaeaeaeaeacpeaeaeaeaeacpfDfEeceyezezezezezgUgVgWezezezgXezgYfMgZgZfOgZgZfOhahbeNeNhceNeNhdhehfhghghfhghghfhhhifYfZgafZfZfZgahjhkhlhmdqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadcQcQcQcQcQdcdcdceYeZcQdcdcdccQaeaeaeaeaeaeaeaeaeaeaecpfcfEecfefffgfffhfffihnfjfffgfffhffflcpcpcpcpcpcpcpfmhoeNeNhpeNeNfqeScpcpaPcpcpcpcpdqhqhrhshthrhrhshthifZfZhudqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadcQhvdcdcdcdcdcdcdcdccQdcdcdccQaeaeaeaeaeaeaeaeaeaeaeaHaHexecfFfGfGfGfGfGhwhxhyfGfGfGfGfGfHeccmhzhzhzhAeLhBeNhChDhphEhFeNeScpaHcmhGhzhzcedqdqhHhIdqdqhHhIdqhJfZfZhKdqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadcQcQhLcQcQcQcQhMcQcQcQcQcQcQcQaeaeadadadadaeaeaeaeaeadaHebecececececececechNececececececececbDeJeiaOaYcphOhPhQhRhphShPhPhTcpaHbDaHaHaHbDdqdJdJesdqdJdJesdqhJfZfZhUdqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadcQdbdcdchVcQdbdcdchWcQadadadadadadadadadadadadaeaeaeadaHcccdcdcecxhXdtcKcKcKcKhYhZdhcxcmhzhzcwiaeiibbDcpcpcpcpichpidcpcpcpcpcmcwaHadaHbDdqdJdJdVdqdJdJdVdqhJfZfZhUdqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadcQdbdcdcdOcQdbdcdchWcQadadadadadadadadadadadadadaeaeadaHaHaHaHcocxdsdwdRcKcKducKieifcxbDigigigigigigcchzhzihcpichpidcpiihzhzcwaHaHadaHbDdqdFijdHdqdFijdHdqikhrilimdqaOaHadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadcQdMdcdcincQdMdcdcddcQadadadadadadadadadadadadadaeaeadadadadaHcocxdhdhdviocKipcKiedhcxbDigiqiriririgigigigiseLitiuiveLiwaHaHaHaHadadaHbDdqdqdqdqdqdqdqdqdqdqdqdqixdqaOaHadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadcQcQcQcQcQcQcQcQcQcQcQadadadadadadadadadadadadadadaeaeadadadaHiycxdhizcKcKiAcKdRiBcTcxbDigiqiCiCiCiCiDiEigbDiFichpiGcpcoaHadadadadadaHcchzhzhzhzhzhzhzhzhziHhzhGcwaOaOaHadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeadaHcocxcxcxcKcJiIiJiKcxcxcxbDigiLiMiMiCiNiOiOigbDiFichpidcpcoaHadadadadadaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeadaHcchzcecxcycxcxcxcxcxcmhzcwigiCiCiPiQiCiDiEigbDiFichpidcpcoaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadaHaHaHcchzhzhGhzhzhzhzcwigigigiOiOiOiOiRiOiOigbDiFiShpidcpcoaHadadadadadaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHaHigigigigigigigigigaOaOaOaOigiTiTiUiTigebiFichpidcpcoaHaHaHaHaHaHaHaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaHadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcmhzhzhzhzhzhzhzhzhzhzhzhziViWiWiWiWiVcwiFichpidcpcccdcdcdcdcdcdiXaOiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYiYaOaHadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZiZiZiZiZiZiZiZiZiZiZiZiZiZjaiZiZiZiZiFhDhpidcpcpcpcpcpcpcpcpiYiYiYjbjcjcjdjejfjcjcjgjhjijjjjjgiYaOaHadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZjkjljmiZjkjljmiZjkjljmiZjnjojpjojqjojrhphpjsjtjujtjtjujtjtjujjjjjvjwjxjxjxjxjxjxjxjyjzjAjxjBjCiYaOaHadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZjDjEjliZjDjEjliZjDjEjliZjFjGjGjGjHjGjIhphpjJjKjLjJjMcpjNjJcpjOjPjQjPjRjxjxjxjRjxjxjyjSjTjxjxjyiYaOaHadadadadadadadadadaeaeaeaeaeaeaeadadadaeaeaeaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZjUjljViZjWjljXiZjYjljZiZjFjGkakbkckdkehphphpkfkgkfkfkgkfkfkgkhkikikjjxjRkkkljxjxjxjyjSkmknkokpiYaOaHadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHkqiZiZkriZiZiZksiZiZiZktiZiZjFkujGkviZiZiFhRhpkwcpcpcpcpcpcpcpcpiYiYiYkxkykhkhkzkAkBkhkpjhjhkCkCjhiYaOaHadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZkDjojojojojojojojojojojokEkFjGkGiZcmkHkIkJkKkHcdcdcdcdcdcdcdkLceiYjhkMkNjSjhjSkNkMjhjhkOkPkPjgiYaOaHadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHkQiZkRkSkTkUkVjGjGjGjGjGkVjGjGjGjGkWiZcoiFichpidiFdEaHaHaHaHaHaHaHbDiYkXkYjjjgjSkZjjlalbkCjAjQjxlciYaOaHadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoaPjFkSkSkSjGjGjGjGjGjGkSkSjGjGjGldiZcoiFichpiGiFaOaHadadadadadaHbDiYlejxjxlfjSlglhlhlijzljlklllmiYaOaHadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZlnjGkVjGjGlojGjGjGkVjGjGlpkVjGlqiZcoiFichpidiFaOaHadadadadadaHbDiYlrjxlsltjSjAlulsjylvlwlxjxlyiYaOaHadadadadadadadadaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZlzkdkdkdkdkdkdkdlAkdkdlBlCjGjGlqiZcoiFichpidiFaOaHadadadadadaHbDiYlDlEkhlFjSlGkilElHjhlIlJkhlKiYaOaHadadadadadadadadaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZiZlLiZiZiZlMiZiZiZlNiZiZjFjGjGlOiZcoiFichpidiFaOaHadadadadadaHbDiYiYiYiYiYiYiYaPiYiYiYiYiYiYiYiYaOaHadadadadadadadadaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaHcoiZlPjllQiZlRjllSiZlTjllUiZjFjGkVlViZcoiFichpidiFaOaHadadadadadaHcckLkLkLkLkLkLlWkLlXaOaOaOaOaOaOaOaOaHadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaadadadadadadadadadaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadaeadadaHcoiZjDjEjliZjDjEjliZjDjEjliZjFjGkVlViZcoiFichpidiFaOaHadadadadadaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHaHadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaHcoiZjkjljmiZjkjljmiZjkjljmiZlYlAkdlZiZcoiFichpidiFaOaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaHcoiZiZiZiZiZiZiZiZiZiZiZiZiZiZiZiZaPiZcoiFichpiGiFdEaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaHcchzhzhzhzhzhzhzhzhzhzhzhzhzmahzhGcdcdcwiFichpidaPaOaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaHaHaHaHaHaHaHmbmbmbmcmcmcmcmcmcmcmcmcaPmciFichpidiFigaHadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadmdmemfmgaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemcmhmcmimjmkmkmlmmmjmjmjmjmmmjmnmompmqmcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadmrmsmtmuaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemvmwmvmxmomomomomomomomomomomomomomomymcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadaemzmfmfmAaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemcmwmcmxmomomomomomomomomomomomomomomBmcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemCmcmcmcmDmomomEmFmGmGmHmHmGmGmFmImomomymcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaadadadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemcmhmcmJmomomKmcmLmMmcmcmNmMmcmOmomomymcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemPmwmPmxmomompmjmQmQmRmRmQmQmjmnmomomymcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemcmwmcmxmomomomomomomomomomomomomomomymcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemCmcmcmcmSmomomomomomomomomomomomomomomBmcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaemcmhmcmJmomomomomomomomomomomomomomomymcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaemTmwmTmUmFmFmFmFmVmFmFmFmFmWmFmFmFmXmYmcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaemcmwmcmcmcmZnamZmcmZmZmZmZmcmZnamZmcmcmcadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaemCmcmcmcaaaamZmwmZaaaaaaaaaaaamZmwmZaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeadaaaamZmwmZaaaaaaaaaaaamZmwmZaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaaaaaamZnamZaaaaaaaaaaaamZnamZaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababnbnbnbnbnbabnbnbnbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababnbncndnenbnbnbnfnbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababnbncnfnfnfnfnfnfnbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababnbncndnenbnbnbnbnbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababnbnbnbnbnbababababaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +ababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +ababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacabababacacacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababacacabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaacacacacacabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaacacacacacacacacacabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababacacacacacacacacacababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababacacacacacacacacacababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababacacacacacacacacacababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababacacacacacacacacacacababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababacacacacacacababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababacacacacababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababacacacacababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index 0b38e7c8fdb..69cf9c74098 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -13,7 +13,6 @@ "am" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/space/hardsuit/syndi,/obj/item/clothing/head/helmet/space/hardsuit/syndi,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) "an" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) "ao" = (/obj/machinery/sleeper,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) -"ap" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) "aq" = (/mob/living/simple_animal/hostile/syndicate/melee,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) "ar" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) "as" = (/obj/structure/table/reinforced,/obj/item/weapon/grenade/empgrenade,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/spacebattle/syndicate2) @@ -513,14 +512,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahahahahahahahajajahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaoajajajaoahajajahaoajajajaoahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahajajajajajahajajahajajajajajahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaoajapajaoahajajahaoajajajaoahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaoajajajaoahajajahaoajajajaoahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahajajajajajahajajahajajaqajajahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahaoajajajajarajajarajajajajaoahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahajajajajajarajajarajajaqajajahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahahahahahahahajajahahahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahasananananahajajahanatanananahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahanajajajatahaqajahatajajajanahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahanajaqajanahajajahanajapajanahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahanajaqajanahajajahanajajajanahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahanajajajanahajaqahanajajajanahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahauajaqajajarajajavajajajajanahababababababababababababababababababababababababababababababababababababawaxayayayayayayayayayayayayazaAabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahanajajajajarajajarajajajajaBahababababababababababababababababababababababababababababababababababababaCaDaDaDaDaDaDaDaDaDaDaDaDaDaDaCabababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index a1df0c8a713..9ac3abd45e3 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -1643,7 +1643,7 @@ "aFE" = (/obj/machinery/computer/secure_data,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/carpet,/area/security/detectives_office) "aFF" = (/obj/effect/landmark/start{name = "Detective"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/security/detectives_office) "aFG" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office) -"aFH" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/security/detectives_office) +"aFH" = (/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/security/detectives_office) "aFI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/security/main) "aFJ" = (/turf/simulated/floor/plasteel,/area/security/main) "aFK" = (/obj/machinery/requests_console{department = "Security"; departmentType = 5; name = "Security Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/security/main) diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 45d8a10038c..8f8a80e0b8c 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -2656,7 +2656,7 @@ "aZe" = (/obj/structure/sink/kitchen{desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink"; pixel_y = 28},/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"}) "aZf" = (/obj/structure/closet/crate/secure/hydrosec{req_access_txt = "35"},/obj/item/seeds/kudzuseed{potency = 0; production = 8},/obj/item/seeds/chilighost,/obj/item/seeds/deathberryseed,/obj/item/device/gps,/turf/simulated/floor/plasteel/white,/area/maintenance/fore{name = "Security Maintenance"}) "aZg" = (/obj/structure/cable/cyan{icon_state = "1-2"},/obj/machinery/camera/autoname{icon_state = "camera"; dir = 5},/turf/simulated/floor/wood,/area/security/brig) -"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/turf/simulated/floor/wood,/area/security/brig) +"aZh" = (/obj/structure/closet/secure_closet/detective,/obj/item/device/camera/detective,/turf/simulated/floor/wood,/area/security/brig) "aZi" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/security/brig) "aZj" = (/obj/machinery/computer/pandemic{layer = 2.5; pixel_x = -4},/turf/simulated/floor/plasteel/white,/area/medical/virology) "aZk" = (/obj/structure/reagent_dispensers/virusfood{density = 0; pixel_y = -32},/turf/simulated/floor/plasteel/white,/area/medical/virology) diff --git a/_maps/map_files/DiscStation/DiscStation.dmm b/_maps/map_files/DiscStation/DiscStation.dmm index cc70904b2e6..d7bdd21fff1 100644 --- a/_maps/map_files/DiscStation/DiscStation.dmm +++ b/_maps/map_files/DiscStation/DiscStation.dmm @@ -3922,7 +3922,7 @@ "bxv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/hallway/primary/port) "bxw" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/filingcabinet,/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 25},/obj/machinery/camera{c_tag = "Detective's Office"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bxx" = (/obj/structure/closet/secure_closet/detective,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) -"bxy" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"bxy" = (/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera/detective,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bxz" = (/obj/structure/table/wood,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/item/device/taperecorder{pixel_x = 3; pixel_y = 0},/obj/item/weapon/storage/box/evidence,/obj/item/device/flashlight/seclite,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "bxA" = (/obj/structure/transit_tube{dir = 2; icon_state = "N-SW-SE"; tag = "icon-E-SW-NW"},/turf/space,/area/space) "bxB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/maintenance/port) diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 43ee06ad710..b937096fed9 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -3726,7 +3726,7 @@ "btH" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/requests_console{department = "Detective's Office"; name = "Detective's Office RC"; pixel_x = -30; pixel_y = 0},/obj/effect/landmark/start{name = "Detective"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/light_switch{pixel_y = -24; tag = "s"},/turf/simulated/floor/carpet,/area/security/detectives_office) "btI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/carpet,/area/security/detectives_office) "btJ" = (/obj/structure/closet/secure_closet/detective,/obj/machinery/newscaster{hitstaken = 0; pixel_x = 0; pixel_y = -32; tag = "s"},/turf/simulated/floor/carpet,/area/security/detectives_office) -"btK" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -26},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/carpet,/area/security/detectives_office) +"btK" = (/obj/structure/table/wood,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -26},/obj/item/device/camera/detective,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/carpet,/area/security/detectives_office) "btL" = (/obj/structure/table/wood,/obj/item/weapon/hand_labeler,/turf/simulated/floor/carpet,/area/security/detectives_office) "btM" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) "btN" = (/obj/machinery/door/window/brigdoor{dir = 1; id = "Cell 1"; name = "Cell 1"; req_access_txt = "2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/security/brig) diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index d53e4a638f1..12fef27b067 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -65,7 +65,7 @@ "abm" = (/obj/structure/table,/obj/item/weapon/folder,/obj/item/weapon/paper/hydroponics,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abn" = (/obj/structure/table,/obj/machinery/computer/libraryconsole/bookmanagement,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abo" = (/obj/machinery/computer/arcade,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) -"abp" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/security/prison) +"abp" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel,/area/security/prison) "abq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "abs" = (/obj/structure/holohoop{pixel_y = 29},/obj/item/toy/beach_ball{icon = 'icons/obj/basketball.dmi'; icon_state = "basketball"; item_state = "basketball"; name = "basket ball"},/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/security/prison) @@ -137,7 +137,7 @@ "acG" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/security/prison) "acH" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/security/prison) "acI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/security/prison) -"acJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) +"acJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; initialize_directions = 11},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/item/device/radio/intercom{desc = "Talk through this. It looks like it has been modified to not broadcast."; dir = 2; name = "Prison Intercom (General)"; pixel_x = 0; pixel_y = -28; prison_radio = 1},/obj/machinery/camera{c_tag = "Prison Chamber"; dir = 1; network = list("SS13","Prison")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "acM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison) @@ -476,9 +476,9 @@ "ajh" = (/turf/simulated/wall/r_wall,/area/engine/gravity_generator) "aji" = (/obj/machinery/conveyor{dir = 2; id = "garbage"; layer = 2.7},/obj/machinery/door/poddoor/preopen{id = "Disposal Exit"; layer = 3.1; name = "disposal exit vent"},/turf/simulated/floor/plating,/area/maintenance/disposal) "ajj" = (/obj/machinery/button/door{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/button/massdriver{id = "trash"; pixel_x = -26; pixel_y = -6},/obj/structure/bed/stool,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/disposal) -"ajk" = (/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/disposal) +"ajk" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fore) "ajl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) -"ajm" = (/obj/effect/decal/cleanable/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) +"ajm" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/disposal) "ajn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/engineering{name = "Fore Port Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "ajo" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) "ajp" = (/obj/structure/table,/obj/item/stack/medical/ointment{pixel_x = 3; pixel_y = -2},/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/epinephrine,/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 28},/obj/item/weapon/restraints/handcuffs/cable/pink,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -733,7 +733,7 @@ "aoe" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) "aof" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/recycler,/turf/simulated/floor/plating,/area/maintenance/disposal) "aog" = (/obj/machinery/door/window/eastright{dir = 4; name = "Danger: Conveyor Access"; req_access_txt = "12"},/obj/machinery/conveyor{dir = 10; icon_state = "conveyor0"; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal) -"aoh" = (/obj/machinery/power/apc{dir = 2; name = "Disposal APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/disposal) +"aoh" = (/obj/effect/decal/cleanable/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/light/small{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/disposal) "aoi" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aoj" = (/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aok" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -774,7 +774,7 @@ "aoT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/fore) "aoU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "aoV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fore) -"aoW" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fore) +"aoW" = (/obj/machinery/power/apc{dir = 2; name = "Disposal APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable/yellow,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/disposal) "aoX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "aoY" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fore) "aoZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fore) @@ -1067,7 +1067,7 @@ "auA" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/starboard) "auB" = (/obj/structure/closet/crate/hydroponics,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) "auC" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/starboard) -"auD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/starboard) +"auD" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fore) "auE" = (/obj/structure/closet,/obj/item/weapon/stock_parts/matter_bin,/turf/simulated/floor/plating,/area/maintenance/starboard) "auF" = (/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/starboard) "auG" = (/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; dir = 1; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/engine/gravity_generator) @@ -1559,7 +1559,7 @@ "aDY" = (/obj/machinery/computer/secure_data,/obj/machinery/button/flasher{id = "secentranceflasher"; name = "Brig Entrance Flash Control"; pixel_x = -24; pixel_y = 24; req_access_txt = "1"},/obj/machinery/button/door{id = "Secure Gate"; name = "Cell Window Control"; normaldoorcontrol = 0; pixel_x = 5; pixel_y = 27; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/button/door{id = "briglockdown"; name = "Brig Lockdown Control"; pixel_x = 5; pixel_y = 37; req_access_txt = "0"},/obj/machinery/light/small{dir = 1},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "innerbrig"; name = "Brig Interior Doors Control"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = 37; req_access_txt = "63"},/obj/machinery/button/door{desc = "A remote control switch for the medbay foyer."; id = "outerbrig"; name = "Brig Exterior Doors Control"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = 27; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aDZ" = (/obj/structure/filingcabinet/chestdrawer{pixel_y = 3},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) "aEa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/button/flasher{id = "holdingflash"; name = "holding cell flasher button"; pixel_x = 23; pixel_y = 23; req_access_txt = "1"},/obj/machinery/camera{c_tag = "Brig - Desk"; dir = 8; network = list("SS13")},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/brig) -"aEb" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detective's camera"; pictures_left = 30},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"aEb" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/machinery/light/small{dir = 8},/obj/item/weapon/book/manual/wiki/security_space_law,/obj/item/device/camera/detective,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aEc" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aEd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "aEe" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -26},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) @@ -1728,7 +1728,7 @@ "aHl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aHm" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/sleep) "aHn" = (/obj/machinery/door/airlock{id_tag = "Cabin7"; name = "Cabin 1"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep) -"aHo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep) +"aHo" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aHp" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep) "aHq" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/clothing/under/assistantformal,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "aHr" = (/obj/structure/table,/obj/item/stack/rods{amount = 50},/obj/item/weapon/wrench,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/engine/engineering) @@ -1968,7 +1968,7 @@ "aLR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"aLU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"aLU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aLW" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/device/gps{gpstag = "AUX0"},/turf/simulated/floor/plasteel{dir = 9; icon_state = "brown"},/area/storage/primary) "aLX" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "brown"},/area/storage/primary) @@ -2092,7 +2092,7 @@ "aOl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/engine/engineering) "aOm" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/engineering_guide{pixel_x = 3; pixel_y = 4},/obj/item/weapon/book/manual/engineering_particle_accelerator{pixel_x = -2; pixel_y = 3},/obj/machinery/button/door{id = "Singularity"; name = "Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/engine/engineering) "aOn" = (/obj/machinery/button/door{id = "Singularity"; name = "Shutters Control"; pixel_x = -25; pixel_y = 0; req_access_txt = "11"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engineering) -"aOo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/engine/engineering) +"aOo" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/starboard) "aOp" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/engine/engineering) "aOq" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/engine/engineering) "aOr" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) @@ -2787,7 +2787,7 @@ "bbE" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;48;50;1"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bbF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bbG" = (/obj/structure/closet/secure_closet/personal,/obj/item/clothing/under/assistantformal,/obj/structure/sign/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/obj/item/clothing/suit/hooded/wintercoat,/obj/item/clothing/shoes/winterboots,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/crew_quarters/locker) -"bbH" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"bbH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/starboard) "bbI" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bbJ" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "0"; req_one_access_txt = "48;50"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/quartermaster/storage) "bbK" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/quartermaster/storage) @@ -3575,7 +3575,7 @@ "bqM" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqN" = (/obj/machinery/reagentgrinder,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqO" = (/obj/structure/table/wood,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Bar - Backroom"; dir = 2; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bqP" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bqP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "bqQ" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar) "bqR" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/crew_quarters/bar) "bqS" = (/obj/item/weapon/storage/box/lights/mixed,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -3897,7 +3897,7 @@ "bwW" = (/obj/machinery/computer/arcade,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bwX" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/starboard) "bwY" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/starboard) -"bwZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/starboard) +"bwZ" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering - Particle Accelerator"; dir = 2; network = list("Singulo","SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "bxa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/starboard) "bxb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;25;46"},/turf/simulated/floor/plating,/area/maintenance/starboard) "bxc" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/hallway/primary/starboard) @@ -4914,7 +4914,7 @@ "bQz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "bQA" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bQB" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) -"bQC" = (/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) +"bQC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg1"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bQD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bQE" = (/obj/machinery/door/window/northleft{dir = 8; name = "Jetpack Storage"; pixel_x = -1; pixel_y = 0; req_access_txt = "19"},/obj/structure/window/reinforced,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide{pixel_x = 4; pixel_y = -1},/obj/item/weapon/tank/jetpack/carbondioxide{pixel_x = 0; pixel_y = 0},/obj/item/weapon/tank/jetpack/carbondioxide{pixel_x = -4; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bQF" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter{name = "\improper Teleporter Room"}) @@ -6345,7 +6345,7 @@ "csa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "csb" = (/obj/structure/lattice/catwalk,/obj/item/weapon/wrench,/turf/space,/area/space) "csc" = (/obj/structure/bed/stool,/turf/simulated/floor/wood{icon_state = "wood-broken7"},/area/maintenance/aft{name = "Aft Maintenance"}) -"csd" = (/turf/simulated/floor/wood{icon_state = "wood-broken6"},/area/maintenance/aft{name = "Aft Maintenance"}) +"csd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/engine/engineering) "cse" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/aft{name = "Aft Maintenance"}) "csf" = (/obj/machinery/door/airlock/maintenance{name = "Surgery Maintenance"; req_access_txt = "45"},/turf/simulated/floor/plating,/area/medical/surgery) "csg" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery) @@ -6985,7 +6985,7 @@ "cEq" = (/turf/simulated/wall,/area/medical/morgue) "cEr" = (/obj/structure/bodycontainer/morgue,/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cEs" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) -"cEt" = (/obj/machinery/camera{c_tag = "Morgue"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"cEt" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/construction) "cEu" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cEv" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) "cEw" = (/obj/machinery/alarm{pixel_y = 32},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 4},/obj/effect/landmark{name = "revenantspawn"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) @@ -8371,17 +8371,30 @@ "deY" = (/obj/structure/cable{tag = "icon-0-4"; icon_state = "0-4"},/obj/machinery/power/tesla_coil,/turf/simulated/floor/plating/airless,/area/space) "deZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "dfa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) -"dfb" = (/obj/machinery/camera/emp_proof{c_tag = "Engineering - Particle Accelerator"; dir = 2; network = list("Singulo","SS13")},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) +"dfb" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "platingdmg2"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "dfc" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engineering) "dfd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "dfe" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/engine/engineering) "dff" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "dfg" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space) +"dfh" = (/obj/structure/sink/kitchen{pixel_y = 28},/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/bar) "dfi" = (/obj/machinery/camera/emp_proof{c_tag = "Aft Arm - Near"; dir = 4; network = list("Singulo")},/turf/simulated/floor/plating/airless,/area/space) "dfj" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tesla_coil,/turf/simulated/floor/plating/airless,/area/space) "dfk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area/space) "dfl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space) "dfm" = (/obj/structure/cable{icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space) +"dfn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/starboard) +"dfo" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/security/vacantoffice) +"dfp" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"dfq" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel,/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) +"dfr" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) +"dfs" = (/obj/structure/bed/stool,/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) +"dft" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) +"dfu" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood{icon_state = "wood-broken6"},/area/maintenance/aft{name = "Aft Maintenance"}) +"dfv" = (/obj/machinery/camera{c_tag = "Morgue"; dir = 2; network = list("SS13","Medbay")},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"dfw" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"dfx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"dfy" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8462,17 +8475,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaekaekafKaekaekaafaafabbabbabbabbaaxafLafMafNafOafPafQafRafMafSafTafUafVafWafXafMafYafZagaagbagcaafaewagfageaghaggagjagiagWaewaafagkaglagmagnagoagpagqagragsaafaeFagtaguagvaeFaaaagwagwagwacSagxagyagzagAagAagBagAagCagDagEagFagFagFafIafJafJafJafJafJafIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaagaafacoacoacoacoacoaafabUaafacoacoacoacoacoaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaafagGagHagIagJagGaafaaaaaaaaaaafaaaaaxaaxagKagLagMaaxagNagOagNabgabgabgabgagPagQagRagSagTagUagVaaxaafaewagXageagZagYahaagiahIaewaafahbahcahdaheahfahgahdahhahbaafaeEagtahiagvaeEagwagwahjahkacSacSacSahlahmahnahnahoahpahqahrahrahsahtafIafJafJafJafJafJahuacSacSacSaaaaafaaaaaaaaaaaaaaaaaiaaaaaaaaaaafaaaaaaaaaabUaaaaaaaafaaaaaaaafaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafahvahvahwahwahwahwahwagGahxahyahzagGaafaafaafaafaafaaaaaaaaxaaxagcaaxaaxaaxagcaaxaaxahAahBahCahDahEahFahGahHahHahHaecaecaewahKahJahMahLahNagiahOaewaafaedahPahQahRahSahTahUavjaedaafaeEagtahiagvaeEahWagwahXahYahZaiaacSaibahmahnaicaidaidaidaieahraifaigaihafJafJafJafJafJaiiaijaikacTaaaaafaafaafaafaafaafaagaafaafaafaafaafaaaaaaabUaaaaaaaaaaaaaaaaafaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaailaimahwainaioaipaiqagGairaisaitagGaiuaivaiuaiuaafaafaaaaaaaaaaafaaaaaaaaaaafaafaiwaixaiyaixaizaiAaiBaiCahHaOvaiEaiFaecaewaiGahVaiIaewaewajyaewaewaiJaedaedaiKaiLaiMaiNaiOaedaedaiJaiPaiQaiRaiSaeEagwagwaiTaiTaiUaiVacSaiWahmaiXaiYaiZaiZajaajbajcajdajeacTafJafJafJafJafJacTajfajgacTaaaaafaaaaafaaaajhajhajhajhajhajhajhaafaafaafabUaafaafaafaafaafaagaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafahvajiahvajjajkajlajmagGagGajnajoagGajpajqajraiuaiuaafaafaafaafaafaafaafaafaafaafajsahDahDahDahDajtajuajvahHajwajxajzaecbinakJajBajCajDajEajFajGaecajHajIajJajKajLajMajNajOajJajPajQaiPajRajSajTaeEajUaiTaiTajVaiTagwacSajAajXajYajZakaakaakbajbajgakcajeacTafJafJafJafJafJacTakdakeacTaafaafaafaafaafajhakfakgakhakiakfajhaafaaaakjakkakjaaaaaaaafaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaailaimahwainaioaipaiqagGairaisaitagGaiuaivaiuaiuaafaafaaaaaaaaaaafaaaaaaaaaaafaafaiwaixaiyaixaizaiAaiBaiCahHaOvaiEaiFaecaewaiGahVaiIaewaewajyaewaewaiJaedaedaiKaiLaiMaiNaiOaedaedaiJaiPaiQaiRaiSaeEagwagwajkaiTaiUaiVacSaiWahmaiXaiYaiZaiZajaajbajcajdajeacTafJafJafJafJafJacTajfajgacTaaaaafaaaaafaaaajhajhajhajhajhajhajhaafaafaafabUaafaafaafaafaafaagaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafahvajiahvajjajmajlaohagGagGajnajoagGajpajqajraiuaiuaafaafaafaafaafaafaafaafaafaafajsahDahDahDahDajtajuajvahHajwajxajzaecbinakJajBajCajDajEajFajGaecajHajIajJajKajLajMajNajOajJajPajQaiPajRajSajTaeEajUaiTaiTajVaiTagwacSajAajXajYajZakaakaakbajbajgakcajeacTafJafJafJafJafJacTakdakeacTaafaafaafaafaafajhakfakgakhakiakfajhaafaaaakjakkakjaaaaaaaafaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaahwaklbnhaknakoakpakqakraksaktakuaiuakvakwakxakyaiuaafaaaaaaaafaaaaaaaaaagwagwagwajsakzakAakBakCakDakEakFahHaiDajxakHaecakIakJakKakLakMakNakOakPakQakRakSakTakUakVakWakXakYakZalaalbalcaldalealfaeEalgalhalialjalkagwallalmahmalnaiYaloaiZalpajbalqajdalralsafJafJafJafJafJaltalualvalwalxalwaaaaafaaaajhalyalzakfalzalAajhaafaaaalBalCalBaaaaaaaafaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaahvalDahvalEalFalGalHahvalIalJalKalLalMalNalOalPaiuaafalQalQaivalQalQaaaagwalRalRajsalSalTalUalValWakmajWalXakGalZakGambamaamaamcamfamgamhamiamiamdamjameammamnamoampamqamramsamtamuamvamwamxamyaeEamzaiTaiTamAahYagwamBalmahmagFamCamDamEamFamGamHajdamIamJafJafJafJafJafJamKacSamLalwamMamNacnacnaafajhamOamPamQamRamSajhaafakjalBamTalBakjaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafahvamUamVamVamVamWamXahvamYamZanaaiuanbancandaneaiualQalQanfangakualQagwagwanhaniajsanjankanlanmannanoanpahHanqanransaecantanuanvanwanxanyanzanAahHanBanCanDamnanEanFboYanHanIanJanKaiPaiPanLaeEaeEagwagwagwanMagwagwagwanNanOagFagFanPanQanRanSanSanTamIamJafJafJafJafJafJamKanUanValwamNalwalwalxalwajhanWanXakfanYanZajhaafalBalBalCalBalBaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaobaaaaaaaoaaaaaoaaaaaaaaafaafaafaaaaaaaaaaaaaaaaafaaaaafaaaaafaaaahvaocaodaoeaofaogaohahvaoiamZaojalQaokaojaojaojaolalQaomaonaooaopalQaoqaoraosaotaouaovaowaoxaoyaozaoAaoBaecajDaoCajDaecaecaoDaoEaoDaecamlamkaoHaoIaoJanCaoKaoLamnaoMaoNaoOaoPanJaoQaoRaoSaoTaoUaoVanGaoWaoXaoYaoZaoXapaapbapcapdapdapeapfapgaphaphaphapiamJafJafJafJafJafJamKapjapkalwanVaplapmapnapoajhappapqaprapsaptajhaafapuapvapwapxapuaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaoaaafaafaoaaoaaoaaafaaaaoaaoaapyaoaaoaaaaaafalQalQaivalQaafaaaaafaafaafaafaafalQaivahvahvapzapAapBahvahvahvalIapCalKapDalMapEapFaojapGalQalIapHapIalQalQapJapKaoFapLajsajsajsahDahDapMapNapOapPapQapRapSapTapUapVanyaoGaecajFapWapYahHapZanCaqaaqbaqcaqdaqeboZaqganJaqhaqiaqiajJajJajJajJaqjagwagwagwagwagwaqkaqlapXaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqwaqwaqwaqwaqxaqfaqzalwapkapkapkapkaqAajhaqBaqCaqDaqEaqFajhaafapuaqGaqHaqIapuaaaaafaafaafacnaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaobaaaaaaaoaaaaaoaaaaaaaaafaafaafaaaaaaaaaaaaaaaaafaaaaafaaaaafaaaahvaocaodaoeaofaogaoWahvaoiamZaojalQaokaojaojaojaolalQaomaonaooaopalQaoqaoraosaotaouaovaowaoxaoyaozaoAaoBaecajDaoCajDaecaecaoDaoEaoDaecamlamkaoHaoIaoJanCaoKaoLamnaoMaoNaoOaoPanJaoQaoRaoSaoTaoUaoVanGauDaoXaoYaoZaoXapaapbapcapdapdapeapfapgaphaphaphapiamJafJafJafJafJafJamKapjapkalwanVaplapmapnapoajhappapqaprapsaptajhaafapuapvapwapxapuaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaoaaafaafaoaaoaaoaaafaaaaoaaoaapyaoaaoaaaaaafalQalQaivalQaafaaaaafaafaafaafaafalQaivahvahvapzapAapBahvahvahvalIapCalKapDalMapEaHoaojapGalQalIapHaLUalQalQapJapKaoFapLajsajsajsahDahDapMapNapOapPapQapRapSapTapUapVanyaoGaecajFapWapYahHapZanCaqaaqbaqcaqdaqeboZaqganJaqhaqiaqiajJajJajJajJaqjagwagwagwagwagwaqkaqlapXaqnaqoaqpaqqaqraqsaqtaquaqvaqwaqwaqwaqwaqwaqxaqfaqzalwapkapkaOoapkaqAajhaqBaqCaqDaqEaqFajhaafapuaqGaqHaqIapuaaaaafaafaafacnaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaqJaafaoaaafaqJaafaoaaoaaafaoaaoaaoaaoaaoaaaaaaaaaaalQaqKaqLalQaqMaqNaqNaqNaqNaqNaqOalQaomaqPalQaqQaqRalIaqmaqTalQaqUaqVaqWalQaokapHaqXaqYaqZalQaraapFarbalQarcapKahjardareagwarfajsargarhannapNapOaecariarjarkarlarlarmarnaroarpajFarqarrarsartaruarvarwarxaryarzarAarzarBarCarDarEarEarFarGajJaqjagwarHarIarJarKarKarKarKarKarLarMarNarKarKarKarKarKarOalwarParQarRalwalwapkalwarSarTarUapkarVarWarXarYarZasaasbajhalxapuascasdaseapuaaaaafaaaaaaacnaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaafaoaaafaoaaoaaoaapyaafaafaafaoaaoaaafaaaaafaafaivasfasgashasiasjasjasjasjasjaskaslasmasnasoaspasqasjasrassasjastasuagwagwagwagwagwagwagwagwagwagwasvagwaswagwagwagwagwagwagwajsasxasyannapNapOapPaszasAasBasCasDasEasFasGaoIajFasHasJasKasIasMasNasOasPasQasRasSasTasUasVaqiasWasXasWasYajJasZataatbatcaiTarKatdateatfatgathatiatjarKatkatlatmarKalwalwasLaqyatnapjalwapkalwarRapkatoapkalwatpatqajhajhatratsajhattapuapuatuatvapuatwalxatwatwatxatwaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaoaaoaaoaaoaaafaoaaoaaafaqJaoaaoaaafaafaafaafalQalQatyalQalQatzatAatAatAatAatAatBalQalQalQalQatCatDatEatEatEatNatFatGagwatHatIatJatKatLatMatPatOaubatQatRatSagwatTatUatUatUatVajuatWatXannatYatZauaanxavmanxaecaecaucaudanxaecaueaiHahHahHajJaufaugauhaufajJauiaujajJaukaqiaqiaulaulaulajJajJaumagwaiTaunauoarKaupauqaurausautauuauvauwauxauyauzarKauAalwauBauCauDauEalwapnalwalwalwauFalwalwauGauHauIajhajhajhajhapnapjapkauJauKatwauLauMauNatwanVatwaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaafaoaaoaaoaaoaaoaaoaaoaaoaaoaaoaaoaauOaoaaafaqJalQalQalQauPauQalQaafaafaafaafaafaafaafaafaafaafaafalQanfauRaojalIauSalIauTauUauVauWauXauYagwagwagwauZavaavaavaavbagwagwavcavdaveavfavcajuajuahDavgavhalYaviaviayhavkaviaviavlazsaviavnaviavoavpavqavravkavsavtaviaviaviavkaviavuajsavvavwavwavwavwahDaqjagwauoaiTaiTarKarKarKarKarKavxavyavzavAavBarKarKarKavCalwapjavDatoapkalwapkalwavEalwavFavGavHavIavJavKavLavMavNavOavPavQavNavRapkapkavDapkavSatxavTatxacnacnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaoaaoaaoaaoaaafaoaaoaaafaqJaoaaoaaafaafaafaafalQalQatyalQalQatzatAatAatAatAatAatBalQalQalQalQatCatDatEatEatEatNatFatGagwatHatIatJatKatLatMatPatOaubatQatRatSagwatTatUatUatUatVajuatWatXannatYatZauaanxavmanxaecaecaucaudanxaecaueaiHahHahHajJaufaugauhaufajJauiaujajJaukaqiaqiaulaulaulajJajJaumagwaiTaunauoarKaupauqaurausautauuauvauwauxauyauzarKauAalwauBauCbbHauEalwapnalwalwalwauFalwalwauGauHauIajhajhajhajhapnapjapkauJauKatwauLauMauNatwanVatwaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaafaoaaoaaoaaoaaoaaoaaoaaoaaoaaoaaoaauOaoaaafaqJalQalQalQauPauQalQaafaafaafaafaafaafaafaafaafaafaafalQanfauRaojalIauSalIauTauUauVauWauXauYagwagwagwauZavaavaavaavbagwagwavcavdaveavfavcajuajuahDavgavhalYaviaviayhavkaviaviavlazsaviavnaviavoavpavqavravkavsavtaviaviaviavkaviavuajsavvavwavwavwavwahDaqjagwauoajkaiTarKarKarKarKarKavxavyavzavAavBarKarKarKavCalwapjavDatoapkalwapkalwavEalwavFavGavHavIavJavKavLavMavNavOavPavQavNavRapkapkavDapkavSatxavTatxacnacnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaafaoaapyaoaaoaaoaaoaavUaafaoaaoaaoaaoaaoaaoaavVavWavVavXavYalQalQaafaaaaaaaaaaaaaaaaaaaaaaaaaafalQalQalQapFalIavZalIawaawbawcawdaweawfagwaaaaafaaaaaaaaaaaaaaaaafaaaawgawhawiawjawkawlavwawmawnawoawpawqawqawrawpawqawqawsazHawtawuawvawwawxawyawqawzawAawBawCawCawDawEawFawGawHawIawJawKawLawMahDaqjagwawNahjawOarKawPawQawRatgathatiawSarKawTateawUarKawValwalwalwauFalwalwapkalwaqzalwawWatwatwatpawXajhatwatwatwatwatwatwatwatwatwanUatwatwatwatwatwawYatwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaaoaaoaaoaaoaaoaaoaaoaaoaaoaaoaaafaoaaoaaoaaafalQalQalQawZawfaojalQaaaaxaaxbaxcaxbaxdaafaafaafaafalQaxealQaxfasjasjasjaxgaxhalQaxiaxjaxkagwaaaaxlaxlaxlaxlaxlaxlaxlaaaavcaxmaxnaxoavcajuajuahDaxpaxqaxraxsaxtaxuaxraxvaxtaxqaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxGaxJaxKaxLaxMaxNaxOaxPaxQaxRahDaqjaxSaxSaxSaxSaxSauzaxTaxUaxVaxWaxXauvaxYaxZayaauparKaybaycaydazIayfaADaygayeaBTayeayeayiayjaykaylaymaynayoaypayoayqayraysayraytatwatwatwayqayraytayuayuayoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaoaaoaaoaaoaaoaaoaaoaayvaoaaafaafaafaafalQalIawfaokaivaaaaywayxayyayxaywayzayzayzayAayAayAayAayBayAayAayCayCayCayCayDayCayEagwaafaxlayFayGayHayIayJaxlaaaavcayKayKayLavcaaaaaaayMayNayOayPahDayNayQayPahDayNayRayPahDaySajuayTahDajuayUayVajuajuayWayWayXayYayZayWayWazaahDahDahDahDahDaqjaxSazbazcazdaxSarKarKarKarKazeazfazgavAavBarKarKarKalwazhapjanUapkapkaziapkatwatwatwatwatwazjazkazlazmaznazoaznazpazqazrazqaZTayraztayrazuazqazrazqayuazvazwaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8481,14 +8494,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaoaaoaaoaaoaaoaaafaafaafaoaaoaaoaaaiaaaaafaafaafalQalQalIalIaJSaivaaaaaaaxcazzazzazzaxcayzaCjaCkaClaAVaATaCmaCnaCoayAaCpaCqaCraCsaCtayCayEagwaafaxlaCuaCvaCwaCxaCyaxlaaaavcaCzaCzaCzavcazTaCAabbaCBaCCaCDajsaCBaCCaCDajsaCBaCCaCDajsaCEaCFaCGajsajsayUaCHajsaCIayWaCJaCKaCLaCMaCNaCOazaaCPagwagwagwaCQagwaxSaCRaCSaxSaxSaCTaCUaCVaCWaCXaCYaCZavAaDaaDbatmarKaDcaDdatwaDeaDfaDgaDgaDhaDiazkaDjaDkaDlaDlaDlaDmaDnaDoaDpaDqaIKaIMaILaINaILaILaINaILaILaINaILaILaLwaoaayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaDraDsaDraagaaaaafaaaaafalQaDtaDuakuawfalQalQaaaaywaDvaDwaDxaywayzayzayzayAaDyaATaDzaCnaDAayAaDBaDCaDDaDEaDFayCayEagwaaaaxlaDGaDHaDIaDJaxlaxlaaaaDKaDLaDLaDLaDMaDNaDOaDNaDPaDQaDPaDRaDPaDQaDPaDSaDPaDQaDPaDTaDUaDVaDWaDXaDYaDZaEaajsavwazaaEbaEcaEdaEeaEfaEgazaaEhaxSaEiaEjaEkaElaElaEmaEnaEoaEpaEqaEraEsaEtaEuaEvauvaEwaExaEyaEzarKaMbavRatwaEAaEBaECaEDaEEaEFaEGaEHaEIaEJaEJaEJaEKaELaDoaDpaDqaoaaLyaoaaPUaoaaoaaPUaoaaoaaPUaoaaoaaSGaoaayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafaafaaaaDraEMaDraafaafaafaafaafalQaMzaojaojaEOaEPalQaaaaEQaxbaERaxbaESaafaafaafayzaETaEUaEVaEWaEXayAaEYaEZaMAaFbaFcayCayEagwaaaaafaaaaFdaFeaFfaaaaafaaaaDNazTazTazTaDNaDNaFgaFhaDVaFiaFjaFkaFlaFmaFmaFnaFmaFoaFlaFpaFqaFraFsaFtaFuaFvaFwajsavwazaazaaFxaFyazaaFzazaazaaCPaxSaxSaxSaFAaFBaFCaFDaFEaFFaFGaFHaFIaFJaFKaFKaFLaFMarKarKarKarKarKaIFaMBatwaFNaFOaFPaFQaFRaFSaFTaFUaFVaFWaFXaFYaFZaGaaDoaDpaDqaDqaLyaGbaaaaaaaaaaaaaGbaaaaaaaGbaoaaSGaafayoaGcaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaafaaaaDraDsaDraDraGdaGdaGdaDraDraDraDraDraGeaGfalQaaaaaaaaaaaaaaaaaaaaaaaaaafayzaGgaGhaGiaGjaGkayAaGlaGmayCayCayCayCaGnagwaGoaGpaGqaGraGsaGtaGuaGvaGoaDNaGwaGxaGxaGyaGzaGAaGBaGCaGDaGEaGFaGGaGHaGIaGJaGHaGKaGLaGMaGNaGOaGPaGQaGRaGSaGTajsavwaGUazaaGVaGWazaaGXaGYaoZaGZaxSaHaaHbaHcaHdaxSaHeaMEaHgaxSaHhaHiaHjaHkaHjaHlaHmaHnaHoaHpaHqarKaZxaOUatwaHraHsaHtaHuaHvaBZaHwaHxaFVaHyayoayoaHzaHAayoaDqaDqaDqaLyaaaaaaaaaaaaaaaaHBaaaaaaaaadeYaTNaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaDraDraHCaHDaHEaHFaHFaHGaHHaHIaHJaHKaDraDrawfalQaaacYLcYMcYMcYMcYMcYMcYNaafayAayAayAaHLaHMayAayAaHNaHOaHPaHQaHRaHSaHTaHUaHVaHWaHXaHYaHZaHXaIaaIbaIcaDNaIdaIeaIfaIgaIgaIhaIgaIgaIgaIgaIgaIgaIgaIgaIhaIgaIiaIjaIkaIlaImaImaInaInaInaInaInaImaIoaImaIpaIpaIpaIpaIqaIpaCPaxSaxSaxSaIraIsaxSaItaxSaIuaxSaIvaIwaIxavAaVHaWraIAavAaIBaICaIDarKaIEaIFatwayoayoayoayoayoaBZaIGaIHaFVaIIayoaIJdfadeZdfbdeZdfcaDqaLyaaaaaaaafaafaafaafaafaaaaaaaoaaSGaoaayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaobaobaobaobaobaobaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaafaaaaDraDsaDraDraGdaGdaGdaDraDraDraDraDraGeaGfalQaaaaaaaaaaaaaaaaaaaaaaaaaafayzaGgaGhaGiaGjaGkayAaGlaGmayCayCayCayCaGnagwaGoaGpaGqaGraGsaGtaGuaGvaGoaDNaGwaGxaGxaGyaGzaGAaGBaGCaGDaGEaGFaGGaGHaGIaGJaGHaGKaGLaGMaGNaGOaGPaGQaGRaGSaGTajsavwaGUazaaGVaGWazaaGXaGYaoZaGZaxSaHaaHbaHcaHdaxSaHeaMEaHgaxSaHhaHiaHjaHkaHjaHlaHmaHnbqPaHpaHqarKaZxaOUatwaHraHsaHtaHuaHvaBZaHwaHxaFVaHyayoayoaHzaHAayoaDqaDqaDqaLyaaaaaaaaaaaaaaaaHBaaaaaaaaadeYaTNaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaDraDraHCaHDaHEaHFaHFaHGaHHaHIaHJaHKaDraDrawfalQaaacYLcYMcYMcYMcYMcYMcYNaafayAayAayAaHLaHMayAayAaHNaHOaHPaHQaHRaHSaHTaHUaHVaHWaHXaHYaHZaHXaIaaIbaIcaDNaIdaIeaIfaIgaIgaIhaIgaIgaIgaIgaIgaIgaIgaIgaIhaIgaIiaIjaIkaIlaImaImaInaInaInaInaInaImaIoaImaIpaIpaIpaIpaIqaIpaCPaxSaxSaxSaIraIsaxSaItaxSaIuaxSaIvaIwaIxavAaVHaWraIAavAaIBaICaIDarKaIEaIFatwayoayoayoayoayoaBZaIGaIHaFVaIIayoaIJdfadeZbwZdeZdfcaDqaLyaaaaaaaafaafaafaafaafaaaaaaaoaaSGaoaayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaobaobaobaobaobaobaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaDraIOaIOaIOaHFaHFaHFaHFaHFaHFaIOaIOaIPaDrawfaivaaacYOcYPcYPcYPcYPcYPcYOaafaafaIQaIRaISaITaIUaIVaIWaIXaIYaIZaJaaJbaJcaJdaHSaJeaWIaJgaJhaJiaJjaJkaJlaJmaJnaJoaJpaJqaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaJraJsaJtaJuaImaJvaJwaJxaJyaJzaJAaJBaJCaJDaImaJEaJFaJGaJHaJIaIpaJJaxSaJKaJLaFBaIsaxSaJMaxSaJNaxSaJOaJPaJQaJRaJRaJRaJRaJRaJRaJRaJRaJRalwaXbatwaJTaJUaJVaJWayoaJXaEBaIHaJYaJZaKaaKbaKcaKdaKeaKfdfdaDqaLyaGbaafaafaKhaKiaKjaafaKkaaaaoaaSGapyayoazwaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaNiaNiaNiaNiaNiaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaDraKlaHFaHFaHFaHFaHFaHFaHFaHFaIOaIOaIOaKmaKnalQaaacYOcYPcYPcYPcYPcYPcYOaKoaIQaIQaKpaKqaKraKraKsaKtaKuaKvaKwaKxalQaKyalQalQalQalQaKzaKAaKBaKCaKDaKBaKAaKAaKAaKAaKEaaaaaaaKFaKFaKFaKFaKFaKFaKFaaaaaaaIgaKGaKHaKIaKJaKKaJBaKLaKMaKNaKOaKPaKQaKRaImaKSaKTaKUaKVaKWaIpaKXaxSaxSaxSaKYaKYaxSaxSaxSaxSaxSaKZaLaaLbaJRaLcaLdaLeaLfaLgaLhaLiaJRaLjaDdatwaJUaJUaLkaLlaLmaDfaLnaLoaLpaLqayoaLraLsaLtaLuaLvdffdfedfgaaaaaaaafcFGaLxaLzaafaaaaaadeYaTNaoaayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaobaobaobaobaobaobaOrbpcbpbaZAbpbbpdaQaaobaobaobaobaobaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaDraLAaHFaHFaHFaHFaLBaHFaLCaHFaHFaIOaLDaDraJSalQaaacYOcYPcYPcYPcYPcYPcYQaLEaLFaLEaLGaLHaLIaLJaLKaLLaLMaLNaLOaLPaLQaLRaLSaLTaLUaLTaLVaKAaLWaLXaLYaLZaMabbsaMcaMdaMeaMfaMgaMgaMhaMiaMjaMkaMlaMmaMmaMnaMoaMpaGLaJuaImaMqaJBaMraJBaMsaJBaMtaJBaJBaImaMuaMvaKUaMwaMxaIpaMybbtbdkbbGaMCaMDbgcaMFaMGaMHaMIaMJaMKaMLaJRaMMaMNaMNaMNaMOaMPaMQaJRaMRaDdatwaMSaMSaMTaKeaLmaFOaMUaMVaMWaMXaMYaMZaNaaNbaNcaNdaKgaDqaLyaaaaNeaafaNfaNgaNhaafaafaGbaoaaSGaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaNiaNiaNiaNiaNjaTObrkbpebhBbpebrnbeuaNjaNiaNiaNiaNiaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWlaaaaaaaGdaHFaHFaHFaHFaHFaHFaHFaHFaHFaHFaNkaDraDraNlalQaafcYOcYPcYPcYPcYPcYPcYRaNmaNnaNmaNoaLHaNpaNpaNqaNpaKuaNraNsaNtalQalQalQalQalQalQawfaKAaNuaNvaNwaNxaNyaNyaNyaNzaKEaaaaKFaNAaNBaNBaNBaNBaNBaNCaKFaaaaIgaNDaIjaIkaImaNEaNFaNGaJBaNHaJBaNIaNJaJBaNKaNLaNMaNNaNOaNPaIpaNQaNRaNSaNSaNSaNTaNUaNUaNVaNVaNWaNXaNYaNZaOaaObaOcaOcaOcaOdaOeaOfaJRaOgaDdatwaMSaOhaOiaOjayoaOkaEBaOlaFVaOmayoaOnaOoaOpaOpaOpaOqaDqaLyaaaaaaaafaafaafaafaafaaaaaaaoaaSGaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaVfaOsaOtaOtaOtaOtaOtbrobrobrpbrobroaOuaOuaOuaOuaOuaOwaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaDraLAaHFaHFaHFaHFaLBaHFaLCaHFaHFaIOaLDaDraJSalQaaacYOcYPcYPcYPcYPcYPcYQaLEaLFaLEaLGaLHaLIaLJaLKaLLaLMaLNaLOaLPaLQaLRaLSaLTbQCaLTaLVaKAaLWaLXaLYaLZaMabbsaMcaMdaMeaMfaMgaMgaMhaMiaMjaMkaMlaMmaMmaMnaMoaMpaGLaJuaImaMqaJBaMraJBaMsaJBaMtaJBaJBaImaMuaMvaKUaMwaMxaIpaMybbtbdkbbGaMCaMDbgcaMFaMGaMHaMIaMJaMKaMLaJRaMMaMNaMNaMNaMOaMPaMQaJRaMRaDdatwaMSaMSaMTaKeaLmaFOaMUaMVaMWaMXaMYaMZaNaaNbaNcaNdaKgaDqaLyaaaaNeaafaNfaNgaNhaafaafaGbaoaaSGaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaNiaNiaNiaNiaNjaTObrkbpebhBbpebrnbeuaNjaNiaNiaNiaNiaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWlaaaaaaaGdaHFaHFaHFaHFaHFaHFaHFaHFaHFaHFaNkaDraDraNlalQaafcYOcYPcYPcYPcYPcYPcYRaNmaNnaNmaNoaLHaNpaNpaNqaNpaKuaNraNsaNtalQalQalQalQalQalQawfaKAaNuaNvaNwaNxaNyaNyaNyaNzaKEaaaaKFaNAaNBaNBaNBaNBaNBaNCaKFaaaaIgaNDaIjaIkaImaNEaNFaNGaJBaNHaJBaNIaNJaJBaNKaNLaNMaNNaNOaNPaIpaNQaNRaNSaNSaNSaNTaNUaNUaNVaNVaNWaNXaNYaNZaOaaObaOcaOcaOcaOdaOeaOfaJRaOgaDdatwaMSaOhaOiaOjayoaOkaEBaOlaFVaOmayoaOncsdaOpaOpaOpaOqaDqaLyaaaaaaaafaafaafaafaafaaaaaaaoaaSGaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaVfaOsaOtaOtaOtaOtaOtbrobrobrpbrobroaOuaOuaOuaOuaOuaOwaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOyaOzaOAaaaaGdaHFaHFaHFaOBaHCaHFaOCaODaODaOEaOFaDranfawfalQaafcYOcYPcYPcYPcYPcYScYOaKoaIQaIQaOGaLHaOHaOIaOJaOKaOLaOMaONaOOaOPaOQaORaOSaOTalQbhDaKAaOVaNvaOWaOXaOYaOYaOZaPaaKEaaaaPbaPcaNBaPdaPeaPfaNBaPgaPbaaaaIgaIiaIjaIkaImaPhaPiaPjaPkaPlaPkaPmaPnaPoaImaPpaPqaPraPsaPtaIpaPuaPvaPwaPxaPyaPzaPAaPBaPCaPDaPEaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPPaJRapjaDdatwayoayoayoayoayoaBZaPQaPRaPSaPTayoayoaHzaHAayoaDqaDqaDqaLyaaaaaaaaaaafaaaaaaaaaaaaaaadeYaTNaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOraPVaPWaPXaPXaPXaPXaPXaPXaPYaPXaPXaPXaPXaPXaPXaPZaPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaQbcWsaQbaaZaDraHFaHFaHFaHFaHFaHFaHFaHFaHFaQdaQeaDraqUaQfalQaaacYOcYPcYPcYPcYPcYPcYTaNmaQhaNmaNoaLHaNpaNpaNqaNpaKuaKvaQiaQjaQkaQlaQmaQnaQoalQaQpaQqaQraNvaNvaQsaQtaNvaQuaQvaKEaaaaQwaQxaQyaQzaQAaQzaQyaQBaQCaaaaIgaIiaQDaQEaImaQFaQFaQFaQFaQGaQFaQFaQHaQFaImaIpaQIaQJaQKaIpaIpaQLaPvaPxaPyaQMaQNaPvaPwaPyaPyaPxaQOaQPaQQaQRaQSaOcaOcaQTaOdaQUaQVaJRaQWaQXatwaQYaQZaRaaRbaRcaRdaEBaOlaFVaReaRfaRgaRhaRiaDoaDpaDqaDqaLyaGbaaaaaaaGbaaaaaaaaaaaaaGbaoaaSGaafayoaGcaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOraPVaQaaaaaaaaaaaaaaaaaaaaPYaaaaaaaaaaaaaaaaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaQbcWsaQbaaZaDraHFaHFaHFcEtaHFaHFaHFaHFaHFaQdaQeaDraqUaQfalQaaacYOcYPcYPcYPcYPcYPcYTaNmaQhaNmaNoaLHaNpaNpaNqaNpaKuaKvaQiaQjaQkaQlaQmaQnaQoalQaQpaQqaQraNvaNvaQsaQtaNvaQuaQvaKEaaaaQwaQxaQyaQzaQAaQzaQyaQBaQCaaaaIgaIiaQDaQEaImaQFaQFaQFaQFaQGaQFaQFaQHaQFaImaIpaQIaQJaQKaIpaIpaQLaPvaPxaPyaQMaQNaPvaPwaPyaPyaPxaQOaQPaQQaQRaQSaOcaOcaQTaOdaQUaQVaJRaQWaQXatwaQYaQZaRaaRbaRcaRdaEBaOlaFVaReaRfaRgaRhaRiaDoaDpaDqaDqaLyaGbaaaaaaaGbaaaaaaaaaaaaaGbaoaaSGaafayoaGcaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOraPVaQaaaaaaaaaaaaaaaaaaaaPYaaaaaaaaaaaaaaaaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnnaQbcWFaQbbnnaDraLAaIOaHFaHFaHFaHFaHFaRkaHFaRlaRmaDraRnaxgalQaaacYOcYPcYPcYPcYPcYPcWMaRoaRpaRoaRqaLHaNpaRraRsaRtaRuaRvaKuaRwaRxaRyaRzaRAaRBalQaRCaKAaRDaNvaNvaREaRFaRGaQuaRHaKEaaaaKFaRIaRJaQyaRKaNBaRLaRMaKFaaaaIgaRNaKHaKIaROaRPaRQaRQaRQaJDaRQaRQaRRaRSaImaRTaRUaRVaRWaRXaRYaRWaRZaSaaSaaSbaScaSdaSeaSfaSgaShaSeaSiaSjaJRaSkaSlaSmaSnaSoaSpaSqaJRasLaSratwaSsaStaSuaSvaSwaSxaSyaSzaSAaSBaSCaSCaSDaSEaDoaSFaDqdfiaLyaoadfjaoaaoadfjaoaaoadfjaoaaoaaSGaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaobaOraPVaQaaaaaaaaaaaaaaSHaSHaSIaSHaSHaaaaaaaaaaaaaOraPVaQaaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaSJaSKaSLaSMaSJaDraHGaIOaSNaSOaSPaHFaHFaHFaHFaRlaSQaDrawfaSRaivaaacYOcYPcYPcYPcYPcYPcYOaKoaIQaIQaSSaLHaNpaNpaNqaNpaKuaRvaSTaSUaRxaSVaSWaSXaSYalQavYaKAaSZaTaaTaaTbaTcaNvaQuaTdaKEaafaKFaKFaKFaTeaTfaTgaKFaKFaKFaafaIgaKGaThaIkaTiaTjaRQaRQaRQaTkaRQaRQaTlaJDaTiaMCaTmaTnaToaPwaTpaPwaPvaPxaPwaTqaPwaTraPxaPyaPwaPyaPxaTsaTtaJRaTuaTvaTwaTxaTyaLhaMQaJRaTzaDdatwaTAaTBaTCaTDaTEaTFaTGaTHaTIaTJaTKaTKaTLaTMaDoaDpaDqaIKdfkaILdflaILaILdflaILaILdflaILaILdfmaafayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaTOaPVaQaaaaaaaaSHaSHaSHaSHaTPaTQaSHaSHaSHaaaaaaaOraPVaTRaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaSJaTSaTTaTUaTVaDraTWaIOaTXaTYaTZaIOaIOaIOaUaaUbaUcaDraUdaUealQaafcYVcYWcYPcYPcYPcYYcYXaafaafaIQaSSaUfaLIaLJaUgaUhaUiaUjaUkaUlaUmaUmaUmaUmaUmalQaUnaUoaUpaUqaUqaUraUsaUtaUuaUvaUwaaaaaaaaaaKFaKFaUxaKFaKFaaaaaaaaaaJraJsaUyaIkaUzaUAaJDaUBaUCaJDaJDaUDaUEaJDaUzaMCaUFaUGaUHaUIaUJaUIaUKaULaUMaUNaUIaUIaUIaUIaUIaUIaUOaUPaUQaJRaJRaJRaJRaURaJRaJRaJRaJRalwaDdatwaUSaUTaUTaRbaUUaUVaUWaUXaUYaUZaVaaVbaVcaVdaCfaVeayoaaaaafaafaaaaaaaaaaaaaafaaaaaaaafaafaoaazqayoazwaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaVfaVgaVhaViaVjaSHaSHaVkaVkaVlaVmaVnaVkaVkaSHaSHaVjaVoaVpaVqaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8496,7 +8509,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaWMaWNaWOaWPaWQaWRaWOaWSaWTaWUaWTaWVaWWaWTaWXaWYaWZaXabpaalQaaaaaacZecZdcZdcZdcZfaaaaafaVyaXcaSSaLHaNpaNpaXdaXeaKuaXfaXgaXhaXiaXjaXkaXlaXmalQawfaKAaKAaKAaKBaKBaXnaKEaXoaXpaKEaXqaXraXsaVRaXtaXuaXvaVRaXwaXxaXyaXzaXAaXBaXCaXDaXEaXFaXGaImaImaUzaXHaUzaImaImaTpaXIaXJaTpaXKaXLaXMaXNaXOaXPalwalwalwalwaXQalwalwalwalwalwalwaDdapjapkaXRaXRaXRaXRaXRaXRaXRaXSaXTaXUaXVaXSaXWaXXaXSaXYaXZaBZaBZaYaaYbaYcaznaYdaznaYeazqaYfazqayqayraYgayraytazqaYfazqayuazvaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOraPVaQaaaaaSHaSHaVkaYhaYiaYjaYkaYlaYmaYnaVkaSHaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaYoaYpaYqaYqaYraYqaYqaYqaYsaYtaYuaYvaYwaYwaYwaYxaYyaYzaYAalQaaaaaaaafaafaaaaaaaafaafaafaVyaYBaSSaLHaYCaNpaYDaYEaYFaYGaYHaYIaYJaYKaYLaYMaYNalQaYOaYPaYQaYRaYSaYTaYUaYVaYWaYXaYYaYZaZaaYZaZbaZcaZdaZeaZfaYZaZgaZhaZiaZjaZkaZlaZmaZnaZoaZpaZpaZpaZqaZraZpaZpaZsaZpaZtaZuaZpaZpaZpaZvaZwalwaZxaZyaZzbqTaZBaZCaZBaZDaZBaZEbrlbkcavRaqyapkaXRaZFaZGaZHaZIaZJaZKaXSaZLaZMaZMaZNaZMaZOaXSaZPaWwaZQaZRaZRaZRaZRaZRaZSayoaZTayraZUayrazuayoayoayoaZTayrazuayuayuayoaafaaaaaaaaiaagaaiaafaaiaagaagaaiaaiaagaagaagaaiaobaobaobaobaobaOraPVaQaaaaaSHaVkaVkaZVaZWaVkaZXaVkaZYaZZaVkaVkaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaYoaYobaaaYoaSJaYobabaYoaYpaYqbacbadaYobabaYobaebafbagbahalQalQalQalQaivaivaivalQalQalQaVybaibajbakbalbalbamaNpbanbaobapbaqaUmaUmaUmaUmbaralQalQbasalQalQbatbaubavbawbaxbaybazbawbaAbaBbaCbaybaDbawbawbawbaEbaFbaGbaHbaIbaJbaKbaLbawbawbawbawbaMbaNbawbawbazbaObaPbawbawbawbawbaQbaRbaSbaSbaSbaTbaSbaSbaSalwbaUalwaDdalwalwbaVbaVbaVbaVbaWbaXbaXbaYbaZbbaaXSbbbbbcbbdbbebbfbbgaXSbbhbbibbjaZRbbkbblbbmaZRbbnayoayoayoayoayoayoayobboayoayoayoayoayoaHAayoaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaobaOraPVaQaaaaaSHaVkbbpbbqbbrbskbtwbbubbvbbwbbxaVkaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaafaaaaafaaaaYobbyaYobbzbbzbbAbbBaYobbyaYoaYoaSJbbCbbDbbEasiasjbbFasjassasjbbHbbIaskbbJbbKbbLbbMbbNbbObbPbbQbbRbbSbbTbbUbbSbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbcgbchbchbcibcjbckbclbcmbcnbcobcpbcpbcpbcpbcpbcpbcpbcqbcrbcsbcsbcsbcsbcsbcsbcsbcsbctbcubcvbcwbcsbcxbctbcsbcsbcybczbcAbaSbcBbcCbcDbcEbcFbaSbcGbcHalwbcIalwaaabaVbcJbcKbaVbcLbcMbcNbcObcPbcQaXSbcRbcSbcTbcUbcVbcWaXSbcXbcYbcZaZRbdabdbbdcaZRbddaKeaKebdeaKebdfaKeaKeaKebdgaKebdhbdibdhbdiacnacnaafaaiaaiaobaobaobaobaaiaobaobaobaobaaiaobaobaobaqJaobaobaobaOraPVaQaaaaaSHaVkaVkbdjaZWaVkbxiaVkaZYbdlaVkaVkaSHaaaaOraPVaQaaobaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaafaaaaafaaaaYobbyaYobbzbbzbbAbbBaYobbyaYoaYoaSJbbCbbDbbEasiasjbbFasjassasjdfbbbIaskbbJbbKbbLbbMbbNbbObbPbbQbbRbbSbbTbbUbbSbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbcgbchbchbcibcjbckbclbcmbcnbcobcpbcpbcpbcpbcpbcpbcpbcqbcrbcsbcsbcsbcsbcsbcsbcsbcsbctbcubcvbcwbcsbcxbctbcsbcsbcybczbcAbaSbcBbcCbcDbcEbcFbaSbcGbcHalwbcIalwaaabaVbcJbcKbaVbcLbcMbcNbcObcPbcQaXSbcRbcSbcTbcUbcVbcWaXSbcXbcYbcZaZRbdabdbbdcaZRbddaKeaKebdeaKebdfaKeaKeaKebdgaKebdhbdibdhbdiacnacnaafaaiaaiaobaobaobaobaaiaobaobaobaobaaiaobaobaobaqJaobaobaobaOraPVaQaaaaaSHaVkaVkbdjaZWaVkbxiaVkaZYbdlaVkaVkaSHaaaaOraPVaQaaobaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaaaaYobabaYoaYoaYoaYoaYoaYobabaYoaaaaSJbdmbdnbdobdobdobdobdobdobdobdobzVbdqbbSbbSbdrbdsbdrbbSbbSbbSbdtbbSbdubdvbdwbdxbdybdzbdAbdBbdCbdDbdEbcdbdFbcfbdGbdHbdHbdIbdHbdJbdHbdKbdLbdKbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdMbdNbdNbdObdNbdNbdNbdNbdNbdNbdPbcfbdQbaSbdRbdSbdTbdUbdVbaSbdWbdXalwaDdalxaaabdYbdZbeabebbecbedbeebefbegbehaXSbeibejbekbekbelbemaXSbenbeobenaZRbepbeqberaZRbesayoayoayoayoayoayoayoayoayoaDqayoayoaZSayoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaobaaaaTOaPVaQaaaaaSHaSHaVkbetaZWaVkaVkaVkaZYaYnaVkaSHaSHaaaaOraPVbeuaNiaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabevbewbexbewbeybewbewbeybewbexbezbeAaSJbdmbeBbeCbeDbeEbeFbeGbeHbeIbdobeJbeKbeLbeMbeNbeObeNbeObePbeObeQbbSbeRbeSbeTbeUbeVbeWbeXbeYbeZbfabfbbfcbfdbfebffbdHbfgbfhbfibfjbdHbfkbflbfmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbdNbfnbfobfpbfqbfrbfsbftbdNbfubfvbfwbaSbfxbfybfzbfAbfBbaSalwalwalwbfCalwaaabaVbfDbfEbaVbfFbfGbfHbfIbfJbfKaXSbfLbfMbfNbfObfPbfQaXSaBZbfRaBZaZRbfSbfTbfUaZRbfVbfVbfVbnnbnnaafaafaafaafaafaafaafayobdiayoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaNiaNibfWbfXbfYbfZaViaVjaSHaSHaVkaWFbgabgbbABbgdbgeaWLaVkaSHaSHaVjaVobgfbggbghaOxaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabevbewbewbgibgjbgkbglbgmbgnbgobgpbgqbgkbgrbgsaYobdmbdnbgtbgubgvbgwbgxbgybgzbgAbgBbgCbgDbAMbAMbgEbgFbgGbbSbbSbbSbbSbgHbgIbgJbgKbgLbdrbgMbdBbdCbgNbgObgPbgQbcfbgRbdHbgSbgTbgUbgVbgWbgXbgYbgZaafaafbhabhbbhcbhdbhebhfbhbbhdbhebhfbhcbhcbhgaafaafbdNbhhbhibhjbhkbhjbhlbhmbdNbhnbcfbhobhpbaSbhqbhrbhsbaSbaSbhtbhualwbhvalwbhwbaVbaVbaVbaVaXRaXRaXRbhxbhyaXRaXSaXSaXSaXSaXSbhzbhAaXSbAObhCbAOaZRbhEbhFbhGaZRbhHbhIbhJbhKbhKbhLaaaaafaaaaaaaaaaafaafacnaafaafaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaafaafaafacnbhMbhNbhObhPbhQaWEaaaaaaaSHaSHaVkbhRbhSbhTbhUbhVbhWbhXaVkaSHaSHaaaaaabhYbhZaPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8504,22 +8517,22 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeybgkbgkbexbgkbidbiebidbkfbidbiebidbgkbifbigaYobkgbkhbkibkjbkkbklbkmbklbeCbeCbknbkobdtbbSbkpbkqbkrbksbktbkubkvbbSbkwbkxbktbgKbkybbSbkzbkAbkBbkCbkDbfcbgQbcfbgRbdHbkEbkFbkGbkHbdHbkIbkJbfmbhebkKbhebkLbkMbkNbkObkNbkPbkNbkObkNbkQbkRbhebkKbhebdNbkSbkSbkSbkTbkUbkVbkWbdNbkXbkYbkZblablbblcblbbldblbbleblbblbblbblfblbblgblhblibljblbblbblkbllblmblfblnblfbloblpblqbjFblrblsblsbltblublsblsblvblwblxblybjRbjRblzbhKbhKblAaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaPXaPXbfWblBblCaQaaaaaSHaSHblDblDblEblFblFbnyblEblEblEblHblHaSHaSHaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabicblIblIbicbgkbidbiebidbiebidbiebidbgkbifbigaYoblJblKblLblMblNblOblOblPblQbCAblRblSblTbbSblUblVblWblXblYblZbmabbSbmbbmcbmdbmebmfbbSbmgbmhbmibmjbmkbcdbmlbfvbmmbmnbmnbmnbmnbmnbdKbmobmpbdKbhebmqbmrbmsbkObkObkObkObmtbkObkObkObkObmubmvbmwbhebmxbmybmzbmAbmBbmCbmCbmDbdNbmEbmFbmGbmHbmIbmJbmIbmKbmIbmLbmIbmIbmMbmIbmIbmNbmObmIbmPbmMbmQbmRbmNbmKbmIbmSbmTbmUbmVbmWbmXbmYbmZbnabnbblxbncbncbndbnebnfbngbjFbjFbjFbjFbrraafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbnibnjbnkbnlbnmbnnbnobnpaTRbnqaSHbnrbnsbntblEbtZbnvbnwbnxbugblEbnzbnAbnBbnCaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnDbewbewbgibnEbgkbnFbgkbnGbnHbgkbnIbgkbgrbnJaYoblJbnKbnLbnMbnNbnObnPbnQbnRbnMbnSbnTbnUbbSbnVbdrbnWbnXbbSbbSbbSbbSbbSbdrbnYbnZbbSboabfcbobbocbfcbfcbodbatbcfboebmnbofbogbohbmnboibojbokbolbombonboobopboqborbosbotboubosbosbovboqbowboxboybhebdNbkSbkSbkSbozbkSbkSbkSbdNboAaXBboBboCboDboEboDboFboGboGboGboGboGboGalwalwboHalwalwalwboIboJalwalwalwboKboLboMboNboOboPboQboRboSboTbncboUboVboWbneboXbfVbjFbsDbrsbtIbsEaafaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaabpgbphbpiaafbpjbpkbplbpmbpnbpobppbpqbprbpsbptbpubpvbpwbpxbpybpzbpubpAbpBbpCbpDaSHaNiaTOaPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnDbewbpEbewbeybewbewbeybewbexbpFbpGaSJbpHbpIbpJbcdbpKbpLbpMbpLbpNbcdbpObpPbpQbpRbpSbpTbpUbpVbpWbpTbpXbpYbpTbpSbpSbpZbpSbqabqbbqcbqdbqebpSbqfbqgbqhbgRbqibqjbqkbqlbmnbfmbfmbfmbfmbhebqmbqnbqobqpbqqbqrbkObqsbqtbqubqvbqpbqwbqxbqybqzbdNbqAbqBbqCbqDbqEbkSbqFbdNbqGaXBbqHbqIbqJbqKbqLboFbqMbqNbqObqPbqQbqRbqSbDnbqUalwbqVbdWbqWbqXbqYalwattbqZalwbrabrbbrcbjQbrdbrdbrdbrebrfbncbncbrgbrhbribrjbtJbrmbtKbtMbtLbrtbrtbrtbrtbrubrtbrtbrubrtbrtbrtbrtbtNbrtbrubrtbrtbrtbrtbrtbrtbrubrvbrvbrwbrxbrybrybrzbrAbrBbrCbrDbrEbrFbrGbrHbrIbrJbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbrYaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnDbewbpEbewbeybewbewbeybewbexbpFbpGaSJbpHbpIbpJbcdbpKbpLbpMbpLbpNbcdbpObpPbpQbpRbpSbpTbpUbpVbpWbpTbpXbpYbpTbpSbpSbpZbpSbqabqbbqcbqdbqebpSbqfbqgbqhbgRbqibqjbqkbqlbmnbfmbfmbfmbfmbhebqmbqnbqobqpbqqbqrbkObqsbqtbqubqvbqpbqwbqxbqybqzbdNbqAbqBbqCbqDbqEbkSbqFbdNbqGaXBbqHbqIbqJbqKbqLboFbqMbqNbqOdfhbqQbqRbqSbDnbqUalwbqVbdWbqWbqXbqYalwattbqZalwbrabrbbrcbjQbrdbrdbrdbrebrfbncbncbrgbrhbribrjbtJbrmbtKbtMbtLbrtbrtbrtbrtbrubrtbrtbrubrtbrtbrtbrtbtNbrtbrubrtbrtbrtbrtbrtbrtbrubrvbrvbrwbrxbrybrybrzbrAbrBbrCbrDbrEbrFbrGbrHbrIbrJbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbrYaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaYobabaYoaYoaYoaYoaYoaYobabaYoaaaaSJbrZbsabsbbcdbscbsdbsebsdbsfbcdbsgbshbsibsjbDLbslbsmbsjbsjbsnbsobspbsqbsjbsjbsrbsjbsjbsjbssbstbsubsubsvbswbsxbsybmnbszbsAbsBbmnbsCbvEbuRbsFbsGbqvbsHbqqbsIbsJbsKbsLbsMbsLbsNbsObsPbsQbsRbsSbsTbdNbsUbsVbsWbsXbsYbdNbdNbdNbsZbtabtbboFbtcbtdbteboFbtfbtgbthbtibtjbtkbtlbtmbtnbtobtpbtqbtrbtsbttbtubtvbEbalwboMbtxbtybjFbtzbtAbtBbtCbtDbtEbtFbtGbtHbvFbjFbjFbvHbvGbvIaOxaafaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaabtObtPbpfaafbtQbtRbtSbtTbtUbtVbtWbtXbtYbuhbuabubbucbudbuebufbAQbubbASbuibujbukaSHbhYbulaPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaYoaafaaaaafaaaaYobumaYobunbuobbzbupaYobumaYoaYoaSJbdmbuqburbcdbusbsdbutbsdbuubcdbuvbuwbuxbuybuzbuAbuBbuCbuDbuEbuFbuGbuzbuzbuzbuHbuzbuIbuJbuBbuKbuzbuzbuLbuMbuNbsybmnbuObuPbuQbvJbuSbuTbuSbuSbsGbuUbuVbuWbuWbuWbuXbuYbuZbvabvbbuWbuWbuWbvcbvdbhebdNbvebvfbvgbvhbvibdNbvjbvkbvlbvmbtbboDbvnbvobvpboFbvqbvrbvsbvtboGboGalwalwbvualwalwalwbvvbvwalwalwbvxbvyalwbvzbtxbvAbjFbfVbfVbfVbfVbvBbfVbfVbvCbvDbxqbjFbxrbxsbjFbxtbjFaafaafaaaaaaaafaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbvKbvLbnkbvMbvNbnnaPZbnpaPWaPXaSHaSHaSHbvObvObvObvPbvQbvObvObvObvOaSHaSHaSHaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaYobaaaYoaSJaYobabaYobvRaWObvSbvTaYobabaYobvUbvVbvWbpIbpJbcdbvXbvYbpMbvYbvZbcdbwabwbbwcbcdbwdbwebwfbcdalQbwgalQbwhbwhbwibwjbwkbwibwhbwhbwhbwhbwhbwhbwlbwmbwnbwobwpbwqbwrbwsbwtbwsbwubwvbwwbwxbwybwzbwAbwBbwAbwAbwCbwDbwEbuWbuWbwFbuWbwGbwHbdNbwIbwJbwKbhjbwLbwMbdNbwNbdKbwOaXBbwPboFboFboFboFboFbwQbwRboGboGboGbwSbwTboGbwUbwVbwWalwavEbwXalwbwYbwZbxabxbbxcbxdbxebxfbxgbxhbEPbxjbxkbxlbfVbxmbxnbxobxpbxubxybxvbzpbyoacnaafaafaafaafaafaafaafaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaobaOrbnpaQaaaaaaabxwaSHbvObxxbDabxzbxAbxBbxCbxDbvOaSHbxwaaaaaaaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaYobaaaYoaSJaYobabaYobvRaWObvSbvTaYobabaYobvUbvVbvWbpIbpJbcdbvXbvYbpMbvYbvZbcdbwabwbbwcbcdbwdbwebwfbcdalQbwgalQbwhbwhbwibwjbwkbwibwhbwhbwhbwhbwhbwhbwlbwmbwnbwobwpbwqbwrbwsbwtbwsbwubwvbwwbwxbwybwzbwAbwBbwAbwAbwCbwDbwEbuWbuWbwFbuWbwGbwHbdNbwIbwJbwKbhjbwLbwMbdNbwNbdKbwOaXBbwPboFboFboFboFboFbwQbwRboGboGboGbwSbwTboGbwUbwVbwWalwavEbwXalwbwYdfnbxabxbbxcbxdbxebxfbxgbxhbEPbxjbxkbxlbfVbxmbxnbxobxpbxubxybxvbzpbyoacnaafaafaafaafaafaafaafaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaobaOrbnpaQaaaaaaabxwaSHbvObxxbDabxzbxAbxBbxCbxDbvOaSHbxwaaaaaaaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYobxEaWOaWQbxFbxGaWOaWObxHbxIaYtbxJbxKbxKbxKbxLbxMbxNbxObxPbxQbxRbxSbxTbxUbxVbxQbxWbxXbxYbxZbxZbyabxZbxZaombybbycbwhbydbyebyfbygbyhbwhbyibyjbwhbyibyjbwhbykbcfbgRbmnbylbymbynbDdbypbyqbyrbysbsGbytbyubuWbyvbywbyxbkObkObwHbyybyzbyAbuWbyBbyCbdNbyDbyEbyFbyGbyHbyIbyJbyKbdKbfubyLbyMboGbyNbyObyPbyQbyRbySbyTboGbyUbyVbyWbyXbyYbyZbzaalwalwalwalwalwalwbzbalwbzcbzdbzebzfbzgbzgbzgbzgbzgbzfbzfbzgbzhbzibzjbzkbzlbzmbznbzobzfbzfbzfaafaaaaaaaaaaafaaaaafaaaaafaaaaaiaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaobaOrbnpbeuaNiaaaaaaaSHbvObIobzqbzrbzsbztbzubzvbvOaSHaaaaaaaNiaNibnoaPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaYpaYqaYqbzwaYqbzxbzybzzbzzbzAbzzbzBbzCbzDbzEbzFbzGbzHbzIblMbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzTbzUbETbxZbzWbzXaoibwhbzYbzZbyfbygbyhbwhbAabAbbwhbAabAbbwhbAcbfvbmmbmnbmnbAdbmnbmnbmnbAebAfbmnbmnbAgbAhbAibkObsLbsLbAjbAkbAlbAmbAnbAobApbAqbArbAsbhjbAtbAubAvbAwbAxbdNbAybdKbAzaXBbAAbFQbyRbACbyRbADbyRbAEbyRbAFbAGbzabAHbAIbAJbAKbALbIpbInbIubAPbIvbARbIwalwbATbtxbAUbzfbAVbAWbAXbAYbAZbzfbBabBbbBcbBdbBebBfbBgbBhbBibBjbBkbBlbzfaafaafaafaafaafaafaafaaaaaiaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaobaVfbBobBpbBqaViaVjaSHbvObBrbBsbBtbBubBvbBwbBxbvOaSHaVjaVobBybggbggbBzaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaYoaYoaSJaYobaaaYoaSJaYoaYoaYoaSJaYoaSJaSJaSJbkgbkhalQbBAalQalQbBBbBCbBBbBDbBBbBBbBBbBBbxZbxZbBEbBFbxZbxZbxZbBGalIbwhbBHbBIbyfbBJbwhbwhbBKbwhbwhbBLbwhbwhbBMbcfbgRbBNbBObBPbBQbBRbBSbBPbBTbBUbBVbwHbBWbwAbBXbsLbBYbBZbCabCbbCcbsLbCdbuWbCebCfbdNbCgbChbhjbCibCjbCkbdNbClbdKbdPaXBbAAboGbCmbCnbCobCnbCpbCqbCrbCsbAGbzabCtbCubzabAGbCvbCwbCxbCybCzbJrbARbvyalwbCBbCCbCDbCEbCFbCGbCHbCIbCJbzfbCKbCLbCMbCNbBebCObCPbCQbCRbCSbCTbCUbzfaafbCVbCVbCVbCVbCVaafaaabBnaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaobaaabCWbCXaPVaQaaaaaSHbvObCYbCZbLpbDbbDcbLqbDebvOaSHaaaaOraPVaWEbhYbDfaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacZgcZhcZhcZicZhcZhcZhcZjcZhcZhcZkaafaYobDgbdmbDhalQbybauRbDibBBbDjbDkbDlbDmbKHbDobBBbKLbDpbDqbDrbDsbDtbxZbBGbDubwhbDvbDwbyfbygbDxbDybBIbDzbDAbDBbDCbwibwmbcfbgRbDDbDEbDFbDGbDGbDGbDGbDHbBVbDIbDJbDKbhebhebOfbDMbDNbDObDPbDQbOfbhebhebDRbDJbDSbdNbAsbdNbdNbdNbdObdNbDTbDUbDVbDWbAAbDXbDYbDYbDYbDZbDYbEabDYbFQbAGbAGbEcbAGbAGbzabEdbEebEfbEgbEhbEibARbzbalwbEjbCCbEkbElbEmbEnbEobEpbEqbErbEsbEtbEubEvbBebEwbExbEybEzbEAbEBbECbEDbEEbEFbEGbEHbEHbCVaafaaabBnaaabBmaaaaaiaaiaafaaiaagaagaaiaaiaagaagaagaagaagaaiaagaagaobaobaOraPVaQaaaaaSHbEIbEIbEIbEJbEKbEJbEIbEIbEIaSHaaaaOraPVaQaaobaobaobaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZgcZlcZncZmcZocZocZocZocZocZocZocZibELaYoaYobdmbEMalQbENbEObPpbBBbEQbDkbDlbERbESbPtbBBbEUbEVbEWbEXbxZbxZbxZbBGapHbwhbEYbEZbyfbygbyfbyfbyfbyfbyfbFabyfbwjbFbbFcbFdbFebFfbFgbFfbFhbFfbFgbFibFfbFjbFkbFlbFmbFnbFobFpbFpbFqbFrbFpbFsbFtbFubFvbFwbFxbFobFybFzbFobFAbFBbFobFCbFDbFEbFFbFGbFHbyRbFIbyRbFJbyRbFKbyRbFLbAGbAGbFMbAGbAGbFNbFObEebFPbANbEhbPTbARbzbalwbFRbFSbvAbCEbFTbEnbFUbEnbFVbFWbFXbFYbFZbGabBebGbbGcbGdbGebGfbGgbGhbBeaafbBebGibEHbGjbCVaafaaabBnaaabBmaaabBnaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaobaOraPVaQaaaaaSHbGkbGlbGmbEJbGnbEJbGobGlbGpaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZqcZpcZpcZpcZpcZpcZpcZpcZpcZpcZpcZrbGrbGsbGrbdmbGtalQbGubGvakubBBbGwbDkbDlbGxbDkbPWbBBbxZbGzbxZbDrbGAbGBbxZbQHbQrbwhbGCbDwbGDbGEbGFbGFbGFbGFbGFbGGbGFbGHbuMbGIbGJbGKbGLbGMbGLbGNbGObGPbGQbGLbGRbGSbGTbGUbGVbGUbGWbGWbGXbGYbGWbGZbHabHbbHcbHdbHebHfbHgbHhbHibHjbHkbHdbHlbHmbHnbHobHpbHqbHrbHsbHtbHtbHubHvbHrbHwbHxbHybHzbzabHAbzabHBbHCbHDbHEbHFbHGbHHbHIalwbHJbHKbHLbHMbHNbHObHPbHQbHRbBebHSbHTbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIfbIgbIhbEHbIibCVaafaaabBnaaabBmaaaaobaobaobaobaobaaiaobaobaobaobaaiaobaobaobaaiaobaagaobaOraPVaQaaaaaSHbIjbIkbIlbEJbEKbEJbIlbIkbImaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZqcZpcZpcZpcZpcZpcZpcZpcZpcZpcZpcZrbGrbGsbGrbdmbGtalQbGubGvakubBBbGwdfobDlbGxbDkbPWbBBbxZbGzbxZbDrbGAbGBbxZbQHbQrbwhbGCbDwbGDbGEbGFbGFbGFbGFbGFbGGbGFbGHbuMbGIbGJbGKbGLbGMbGLbGNbGObGPbGQbGLbGRbGSbGTbGUbGVbGUbGWbGWbGXbGYbGWbGZbHabHbbHcbHdbHebHfbHgbHhbHibHjbHkbHdbHlbHmbHnbHobHpbHqbHrbHsbHtbHtbHubHvbHrbHwbHxbHybHzbzabHAbzabHBbHCbHDbHEbHFbHGbHHbHIalwbHJbHKbHLbHMbHNbHObHPbHQbHRbBebHSbHTbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIfbIgbIhbEHbIibCVaafaaabBnaaabBmaaaaobaobaobaobaobaaiaobaobaobaobaaiaobaobaobaaiaobaagaobaOraPVaQaaaaaSHbIjbIkbIlbEJbEKbEJbIlbIkbImaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZtcZscZucZucZvcZvcZvcZvcZvcZvcZvcZiaYoaYoaYobdmbSXalQbLralQalQbBBbSYbIqbIrbDkbDkbDkbBBbIsbItbxZbSZbxZbxZbxZalIbBGbIxbBIbBIbFabIybIzbBIbBIbBIbBIbIAbIBbwibwmbICbIDbIEbIFbIGbIHbIIbIFbIFbIJbIJbIKbILbIJbIMbBVbINbIObIPbIQbIRbIObISbBVbIMbITbIUbIVbIWbITbITbIXbIYbIZbITbJabJbbJcbJdbJebJfbJgbJhbJgbJibJjbyRbyRbFQbEcbAGbJkbJlbJmbJlbHybJnbJobJpbJqbTabARbJsalwbJtbJubJvbznbJwbJxbJybJzbznbzobJAbJBbCSbJCbBebJDbJEbJFbJGbJFbJHbJIbBeaafbCVbCVbCVbCVbCVaafaaabBnaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobbLtbOFaQaaaaaSHbJJbIkbIkbJKbJLbJMbIkbIkbJNaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacZtcZhcZhcZicZhcZhcZhcZjcZhcZhcZwaafaYobJObdmbJPalQbBGapHbJQbBBbJRbDlbJSbJTbGybTbbBBbJUbJVbxZbUnbJWbJXbxZbUIbUBbwhbJYbJYbFabygbJZbJZbKabKbbKcbKdbwhbwhbFbbKebKfbIFbKgbKhbKibKjbKkbKlbKmbKnbKobKpbIJaafbDEbKqbIObIObKrbIObIObKsbKtaafbITbKubKvbKwbKxbITbITbITbITbITbKybdKbJcbKzbKAboGbKBbKCbDYbKDbKEbDYbKFboGbEcbKGbAGbAGbAGbAGbAGbUVbKIbKJbKKbUXbARbKMalwbKNbKObKPbzjbKQbKRbKSbKTbKUbKVbKWbKXbKYbKZbLabLbbLcbLdbLebLfbLgbLhbLibLjbEFbLkbLlbLlbCVaafaafbLmaafbLnaafbBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbOFaQaaaaaSHbLobLubMVbIkbMWbLsbMZbMXbLvaSHaaaaOraPVaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaYoaYoaSJaYobaaaYoaSJaYoaYoaYoaSJaYoaSJaSJaSJblJbLwbLxbLybLzbLAbBBbLBbLCbJSbLDbLEbLFbBBbxZbxZbxZbxZbxZbxZbxZbBGaoibwhbLGbLHbFabygbBIbBIbLIbBIbLJbLKbwhbLLbwmbcfbLMbIFbLNbLObLPbLQbLRbKlbLSbLTbLUbLVbLWaafbDEbLXbLYbLZbMabLYbLZbMbbKtaafbMcbMdbMebMfbMgbMhbMibMjbMkbITbMlbdKbMmbyLbMnbUZbMobMobMpbMqbMrbMsbMtbMobMubMobMvbMwbMxbMybMzbARbARbMAbARbARbARbJsbMBbMCbMDbMBbzfbzfbzfbzfbzfbMEbzjbMFbMGbMHbMIbMJbMKbMLbMMbMNbMObMPbMQbBeaafbBebMRbMSbMTbCVaafaaabBnaaabBmaaabMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbQibNaaVjaSHaSHbQjbQkbIkbMYbLsbQnbQmaSHaSHaVjaVobNbaOxaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYobNcbvVaWQbNdaWQaWOaWObNeaWObvVaWObNfbvVaWObvWbNgalQbNhalIapIbBBbNibNjbDkbDkbDkbNkbBBbNlbNmbNnbNobNpbNqalQbBGaqWbwhbNrbNsbFabNtbNubNubNvbBIbBIbNwbwhbNxbwmbcfbKfbIFbNybNzbNAbNBbNCbKlbNDbNEbNFbNGbIJbNHbNIbNHbNIbNIbNJbNIbNIbNHbNIbNHbITbNKbNLbNMbNNbNObNPbNQbNRbITbNSbdKbNTaXBbKAbMobNUbNVbNWbNXbNYbNZbNZbOabObbMobMobMobMobMobMobMobARbOcbOdbOebARbVpbMBbOgbOhbOibMBbOjbOkcXnbOlbzfbOmbOnbOobOpbOqbOrbOsbOtbOubOvbMObOwbOxbIebIfbIgbOybLlbOzbCVaafaaabBnaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbOFaQaaaabxwaSHbOAbIkbIkbOBbOCbODbOEaSHbxwaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaYpaYqaYqaYqaYqaYqbOGbOHbOIbzzbzzbOJbOKbOLbOMbONalQbdpaqSapIbBBbDmbOObDkbDkbOObOPbBBbOQaolaonbORbLAbNpalQbBGbOSbwhbOTbOUbOVbOWbBIbOXbOYbOZbPabPbbwhbPcbwmbcfbPdbIFbPebPfbPgbPhbKlbKlbPibPjbPkbPlbIJbPmbPnbPobWlbPqbPrbPsbWlbPubPvbPwbPxbPybNLbPzbPAbITbPBbPCbPDbITbPEbdKbPFaXBbPGbPHbPIbPJbPKbPLbPMbNWbNWbPNbPObMobPPbPQbPRbPQbPSbMobXPbPUbPVbYkbARbJsbMBbPXbPYbPZbMBatnapkapkbQabzfbOmbQbbQcbzgbQdbzgbQebQfbQgbEnbMObQhbMQbBeaafbCVbCVbCVbCVbCVaafaaaaaiaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbOFaQaaaabxwaSHbQocgObWXbQlciKcjAcjzaSHbxwaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaYoaYobQpbQpaYoaYoaYoaSJaYoaSJaYoaSJaSJalQbQqalQalQalQbdpaqWapIbBBbOPbZibQsbDkbQsbQtbBBbQuapFaojapHbQvanaalQbBGalIbwhbwhbwibQwbQxbwibwhbwhbwhbwhbQybwhbwhbAcbfvbQzbIFbQAbQBbQCbQDbQEbKlbQFbQGbPkcaCbQIbQJbQKbQLbQMbQNbQLbQObQLbQPbQQbQRbPxbQSbNLbQTbQUbQVbQWbQXbQYbITbQZbdKbRaaXBbKAbRbbRcbRdbRebRfbRgbRhbRdbPNbRibMobRjbRkbRlbRmbPSbMobRnbRobRpbRqbRrbRsbMBbRtbRubRvbMBbRwbRxbRybRzbzfbRAbRBbRCbRDbQdbREbRFbEnbOsbRGbRHbRIbLhbLibLjbEFbRJbRKbRLbCVaafaaabBnaaabBmaaabBnaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobbLtbOFaQaaaaaaaaSHaSHaSHaSHaSIaSHaSHaSHaSHaaaaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYobNcbvVaWQbNdaWQaWOaWObNeaWObvVaWObNfbvVaWObvWbNgalQbNhalIapIbBBbNibNjbDkdfobDkbNkbBBbNlbNmbNnbNobNpbNqalQbBGaqWbwhbNrbNsbFabNtbNubNubNvbBIbBIbNwbwhbNxbwmbcfbKfbIFbNybNzbNAbNBbNCbKlbNDbNEbNFbNGbIJbNHbNIbNHbNIbNIbNJbNIbNIbNHbNIbNHbITbNKbNLbNMbNNbNObNPbNQbNRbITbNSbdKbNTaXBbKAbMobNUbNVbNWbNXbNYbNZbNZbOabObbMobMobMobMobMobMobMobARbOcbOdbOebARbVpbMBbOgbOhbOibMBbOjbOkcXnbOlbzfbOmbOnbOobOpbOqbOrbOsbOtbOubOvbMObOwbOxbIebIfbIgbOybLlbOzbCVaafaaabBnaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbOFaQaaaabxwaSHbOAbIkbIkbOBbOCbODbOEaSHbxwaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaYoaYpaYqaYqaYqaYqaYqbOGbOHbOIbzzbzzbOJbOKbOLbOMbONalQbdpaqSapIbBBbDmbOObDkbDkbOObOPbBBbOQaolaonbORbLAbNpalQbBGbOSbwhbOTbOUbOVbOWbBIbOXbOYbOZbPabPbbwhbPcbwmbcfbPdbIFbPebPfbPgbPhbKlbKlbPibPjbPkbPlbIJbPmbPnbPobWlbPqbPrbPsbWlbPubPvbPwbPxbPybNLbPzbPAbITbPBbPCbPDbITbPEbdKbPFaXBbPGbPHbPIbPJbPKbPLbPMdfpbNWbPNbPObMobPPbPQbPRbPQbPSbMobXPbPUbPVbYkbARbJsbMBbPXbPYbPZbMBatnapkapkbQabzfbOmbQbbQcbzgbQdbzgbQebQfbQgbEnbMObQhbMQbBeaafbCVbCVbCVbCVbCVaafaaaaaiaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbOFaQaaaabxwaSHbQocgObWXbQlciKcjAcjzaSHbxwaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaYoaYobQpbQpaYoaYoaYoaSJaYoaSJaYoaSJaSJalQbQqalQalQalQbdpaqWapIbBBbOPbZibQsbDkbQsbQtbBBbQuapFaojapHbQvanaalQbBGalIbwhbwhbwibQwbQxbwibwhbwhbwhbwhbQybwhbwhbAcbfvbQzbIFbQAbQBdfqbQDbQEbKlbQFbQGbPkcaCbQIbQJbQKbQLbQMbQNbQLbQObQLbQPbQQbQRbPxbQSbNLbQTbQUbQVbQWbQXbQYbITbQZbdKbRaaXBbKAbRbbRcbRdbRebRfbRgbRhbRdbPNbRibMobRjdfrbRlbRmbPSbMobRnbRobRpbRqbRrbRsbMBbRtbRubRvbMBbRwbRxbRybRzbzfbRAbRBbRCbRDbQdbREbRFbEnbOsbRGbRHbRIbLhbLibLjbEFbRJbRKbRLbCVaafaaabBnaaabBmaaabBnaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobbLtbOFaQaaaaaaaaSHaSHaSHaSHaSIaSHaSHaSHaSHaaaaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaYobRMbbyaYoaaaaafaaaaaaaaaaafaaaaaaalQbRObRPbRQbRRbRSbRRbRTbBBbBBbBBbBBbRUbBBbBBbBBbRVaqSalIaojbRWbRXalQbRYbRZbwhbSabSbbScbSdbSebSfbSgbwhbShbSibSjbwhbwmbcfbSkbIFbLNbPfbSlbSmbLNbKlbSnbSobSpbSqbQIbSrbSsbStbSubSvbSwbSxbSsbSybSzbSAbPxbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbdKbSLaXBbKAbRbbSMbSNbSNbSObSPbSQbSRbSSbSTbMobSUbRkbSVbSWcbJbMoccRcgFceAchqbARbJsbMBbMBbMBbMBbMBbTcapkapkbTdbzfbRAbRBbRCbTebTfbREbTgbMNbThbRGbMObTibMQbBeaafbBebTjbTkbTlbCVaafaaabBnaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOrbOFaQaaaaaaaaaaaaabxwbxwbTmbxwbxwaaaaaaaaaaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaYobQpbQpaYoaafaafaafaafaafaafaafaafalQbToasjasjasjbzXapFapIalIanfauRaoibTpbTqaqWalQalQalQalQalQbTralQalQbBGapHbwhbTsbTtbTubTubSdbTvbTwbwhbTxbTybTzbwhbykbcfbTAbIFbLNbTBbTCbTDbLNbKlbTEbTFbTGbTHbQIbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbPxbTTbTUbTVbTWbNObTXbTXbTYbITbTZbdKbUaaXBbKAbMobUbbUcbUdbNWbUebUfbPLbUgbUhbUibUjbUkbUlbUmciRbMobARbARbARbARbARbUoalwbUpbQaaqzapkbUqaqybUrapkbzfbzfbUsbJBbRDbQdbUtbUubEnbOsbRGbMObUvbOxbIebIfbIgbUwbRKbUxbCVaafaaabBnaaabBmaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOraPVaQaaaaaaaaaaaaaaaaaaaaPYaaaaaaaaaaaaaaaaaaaOrbOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZxcZzcZycZAcZzcZAcZycZzcZycZAcZAcZycZBcZDcZCcZEcZycZAcZAcZycZFaaaaaaaaaalQalQalQalQbRXbUzasjbUAciTbUCbUDbUDbUDbUEbUFbUDciTciWbUGbUDbUHbQralIbBGbVFbwhbUJbUKbULbUMbDwbUNbUObwhbwhbwhbwhbwhbUPbcfbKfbIFbIFbUQbUQbURbIFbIHbIJbUSbUTbIJbIJbUUcjIbUWbNIbUUbUUbUUbNIbUYcjIbUUbITbITbITbITbITbITbVabVabVabIUbVbbdKbVcaXBbVdbVebVfbVfbVfbVgbVfbVfbVhbVibVfbVfbVfbVfbMobVjbVkbVlbVmbVnbVoapkclDbVqalwbRybVrbVsapkbVtapkapkanUbzfbVubFXbVvbzgbQdbzgbVwbEnbOsbVxbMObQhbMQbBeaafbCVbCVbCVbCVbCVaafaafbMUaafbLnaafaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaOraPVbeuaNiaNiaNiaNiaNiaNibVyaNiaNiaNiaNiaNiaNibnobOFaQaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8537,10 +8550,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZZcZYcZKdb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacZZcZYcZKdbXcZSdaidbZdbYdcacZSdccdcbcZKdcddcfdcecZKdcgdcidchdcjcZAaaaaaaaaaaaaaafaafaobaaackkaaaaafaaaaaaaafaaabVEbVEbVEbVEbVEbVEbVEbVEbVEcklckmckmcknckockockockockpckockockockqckrckscktckuckvckwckxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMcimcjscgXcjtcipckNckOckPckQckRckScipckTckUckVckWciAcfyckXckYcceciAckZclaclbclccldciCcjJcleclfclgcOgclhcliciCcljbVEbVEbVEbVEbVEalwalwalwcbQcbQcbQclkciLcllclmclnciLaafbCVcloclpclqbCVclrclscltbCVcluclvclwbCVaafaafaafaaabzfclxclyclzclAaaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadckcZzcZJdcldcldcmdclcZKdcodcndcqdcpcZKdcrdctdcscZKdcudcwdcvdcxcZKaaaaaaaaaaaaaafaaaaaiaaacgvaafaafaafaafaafaaabVEclBclCcyxclEcBecAcclHbVEcklckmclIclJclKclLclMckmclNclOclPckmclQclRclSclTclUclVclWclXclYclZcmacmbcmaclZcmacmccmdcikcmecmfcmgcmhcmicijcjscgXcjtciqcmjcmkcmlcmmcmncmocmpcmqcmrcmscmtciAcmucmvcmwcmxciAcmycmzcmAcmBcmCciCcjJcjJcmDcjJcjJcmEcmFciCciDbVEcmGcmHbVEcmIcmJcmKcmLcmMcmNalwcmOciLcmPcmQcmRciLaafbCVclocmSclobCVclrcmTclrbCVcmUcmVcmUbCVaafaaaaafaafclAcmWbEHcmXcmYaafaaiaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbycZGcZycZAcZAcZycZGcZycZAcZAcZycZGcZycZAcZycZGcZycZAcZAcZydbLaaaaaaaaaaaaaafaaaaobaaacgvaafaaaaaaaaaaafaaacmZcnacnbcnccndclFcnecBYbVEcklckmcngcnhcnicnjcnkcnlcnmcnncnockmcnpcnqcnrcnscntcnucnvcnwcnxcnycnzcnAcnAcnAcnBcnCcnDcnEcnFcmfcnGcnHcnIcimcnJcgXcnKcipcnLcnMcnNcnOcnPcnQcipcnRcnScnTcnUciAcnVcnWcnXcDdciAcnZcoacobcoccodciCciCcoecofcogcogciCcohciCcoicojcokcolbVEcomapkapkapkbZNconbVEcoociLcllcopclnciLaafbCVbCVbCVbCVbCVbCVbCVbCVbCVbCVbCVbCVbCVaafaafaafaaacmYbEHcoqbEHcoraaabBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaiaafcgvaafaaaaaaaaaaafaaacmZcoscnecnbcotclFcoubVEbVEcDDckmcowcoxcowcoycowckmcowcozcowckmcgHcoAcoBcoCcgHcgHcoDcoEcoFcoGcoGcoHcoIcoJcoGcoGcoKcimcoLcoMcoNcoOcimcimcoPcgXcoQcipcipcoRcoScoTcoUcoVcipcCYcFtcbzcbzciAcoXciAcoYciAciAcbzcoZcpacbzcbzcpbcpccpdcpecpfcpgcphcpiciCcKwbVEcpkcplbVEcpmbZNcdGbYmcpncpobVEcoociLcppcpqcprcpsaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaafaafcorbEHbEHbEHcmYaafbBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaobaaachLaaaaaaaaaaaaaafaaacmZcptcnbcpucpvclFcpwcpxbZRcklckmcpycpzcpAcpBcpCckmcpDcpEcpFckmcpGcpHcpIcpJcpKcpLcpMccxcpNcoGcpOcpPcpQcpRcpScoGcvCcimcpTcpUcpVcpWcpXcpYcpZcqacqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncqocepcqpcqqcqrcepcqscqtcqucepcqvcpbcqwcqxcqycqzcqAcqBcqCciCciDbVEbVEcqDbVEcqEcqFbZQbZQcqGcqHbVEcoociLciLcPIciLciLaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafaaaaafaaacorcmYclAbzfclAaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaiaafcgvaafaaaaaaaaaaafaaacmZcoscnecnbcotdfscoubVEbVEcDDckmcowcoxcowcoycowckmcowcozcowckmcgHcoAcoBcoCcgHcgHcoDcoEcoFcoGcoGcoHcoIcoJcoGcoGcoKcimcoLcoMcoNcoOcimcimcoPcgXcoQcipcipcoRcoScoTcoUcoVcipcCYcFtcbzcbzciAcoXciAcoYciAciAcbzcoZcpacbzcbzcpbcpccpdcpecpfcpgcphcpiciCcKwbVEcpkcplbVEcpmbZNcdGbYmcpncpobVEcoociLcppcpqcprcpsaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaafaafcorbEHbEHbEHcmYaafbBnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaobaaachLaaaaaaaaaaaaaafaaacmZcptcnbcpucpvdfscpwcpxbZRcklckmcpycpzcpAcpBcpCckmcpDcpEcpFckmcpGcpHcpIcpJcpKcpLcpMccxcpNcoGcpOcpPcpQcpRcpScoGcvCcimcpTcpUcpVcpWcpXcpYcpZcqacqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncqocepcqpcqqcqrcepcqscqtcqucepcqvcpbcqwcqxcqycqzcqAcqBcqCciCciDbVEbVEcqDbVEcqEcqFbZQbZQcqGcqHbVEcoociLciLcPIciLciLaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafaaaaafaaacorcmYclAbzfclAaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaafaaaaaaaaiaaacGPaafaaaaaaaaaaafaaacmZcmZcnbclFclFcnbcnbcqJbZRcklckmcqKcqLcqMcqNcqOckmcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqZccxccycoHcracrbcrccrdcrecoGcdGcimcrfcrgcrhcricrjcrkcrlcgXcrmcrncrocrpcrqcrrcrscrtcKycrvcrwcrxcrycrzcrAcrBcrCcrDcrEcrDcrFcrGcrHcrIcrJcrKcrLcrMcrNcrOcrPcrQcrRcrSbVEcrTcrUcrVbXicpnbZQbZQcrWcrXcmZcrYcrZciLcQociLcsbaafaaibBmbBmbBmbBmbBmbBmaaibBmbBnbBmbLnaafbBnaaaaafaaaaaaaafaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaafaaaaaaaobaaacfmaaaaaaaaaaaaaafaaacmZcsccnbcsdcnbcnbcoubVEbVEcsecsfcsgcqLcYBcqNcsicsjcskcslcsmcsncsocspcsqcsrcsscstcsucsvcfLcswcsxcsycszcsAcszcsBcsCcimcsDcsEcsFcsGcpXcrkcrlcgXcrmcsHcsIcsJcsKcsLcsMcsNcqjcsOcsPcsQcsRcsScsTcsUcsVceuceucsWcsXcsYcsZctactbctcctdctectfctgcthcticiCciDbVEctjctkctlcokctmcqGciEbZQctnbVEctoctpctqctrctqacnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaabBnaafaafaaibMUbMUbMUaaiaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaafaaaaaaaobaaacfmaaaaaaaaaaaaaafaaacmZcsccnbdfudftcnbcoubVEbVEcsecsfcsgcqLcYBcqNcsicsjcskcslcsmcsncsocspcsqcsrcsscstcsucsvcfLcswcsxcsycszcsAcszcsBcsCcimcsDcsEcsFcsGcpXcrkcrlcgXcrmcsHcsIcsJcsKcsLcsMcsNcqjcsOcsPcsQcsRcsScsTcsUcsVceuceucsWcsXcsYcsZctactbctcctdctectfctgcthcticiCciDbVEctjctkctlcokctmcqGciEbZQctnbVEctoctpctqctrctqacnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaabBnaafaafaaibMUbMUbMUaaiaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaobaaacgvaaaaaaaafaafaafaaacmZctsclFcncclFcttcdGcKAbVEcklckmctvctwctxctyctzckmctActBctCckmctDctEctFctGctHcpLctIccxctJcoGctKctLctMctNctOcoGctPcimcimctQcimcimcimcimctRctSctTcipcipcipcipcipctUcLycipciAciActWctXctYctZcuacubcuccuccuccuccudcuecufcudciCciCciCcugcuhcuicujciCciDbVEcrTcukbVEculcumcuncuocuocupbVEaafacnaaaaaaaaaacnaafaafaaibBnbBnbBnaaibBnbBnbBnaaibBnbMUbBnbBnaaaaaaaafaaaaaaaafaaaaafaafaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaobaafaaiaobaaaaaiaobaobaafaafaafcgvaafaafaafaaaaafaafcmZclFcttclFcMpcpncurcMFcutcuuckmcuvcuwcuxcuycuzckmcuAcuBcuCckmcuDcuEcuEcuEcuEcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcoGcuOcuPcuQcuRcMVcuTcdOcuUcuVcuWcuXcuYcuZcNtcvacvbcvccvdcvecNNcvgcvhcvicvjcvkcvlcvmcvncvocvpcvqcudcvrcvscvtcvucvvciCciCciCciCciCciCcvwbVEbVEbVEbVEbVEcmZbVEcmZbVEcmZbVEcvxacnacnacnacnacnaaaaaaaaaaafaaaaafaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvyaaaaaaaaaaafaaaaaaaaaaafaaaaaaaafaaachLaaaaaaaafaaaaafaaacmZcmZcmZcmZbVEcvzcvAbVEbVEcklckmckmckmckmckmckmckmckmcvBckmckmcvCbVEcvDcvEcvFcvGcsucvHcvIcoGcvJcvKcvLcvMcvMcvMcvMcvMcvMcvMcvNcvOcvNcvPcvQcvRcvScvTcNPcvVcOobVEcvXcvXcvYcvXcvXcvZcwacwbcvkcwccwdcwecwfcwgcwhcudcwicwjcwkcwlcwmcnWccechRbVEcwnciYcwobVEcwpccebVEaaaaafaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8552,11 +8565,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaafcxpcxqcxqcxqcxqcxrcgvcxscxtcxtcxtcxtcxuaafaqJaafaafaafaobaafaafaafaafaafaaabVEbVEbVEbVEbVEbVEbVEbVEbVEbVEbVEcyyccfcAgcAZcBacBbcBccBdcAgcPtcBfcBgcxFcBhcBicBjcvMcBkcBlcBlcBlcBmcvMcBncBocBpcBqcBrcBscBtcxTcBucyTcBvcBwcvXcBxcBycBzcxXcBAcBBcBCcBDcBEcBFcBGcBHcBIcBJcBKcBLcBJcBMcBNcAWbVEcBObVEcBPcBPcSLcBRcBScSUcBUaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcBVcBWcBVaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaafcyqcyqcyqcyqcyqaaacBXaafcyqcyqcyqcyqcyqaaaaobaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaafaaaaaabVEcFWcPycBZcCacCbcCccCdcCecCfcCgcChcCicxFcCjcCkcClcvMcCmcCncCocCpcCqcvMcCrcCscCscvNcCtcCucCvcCwcCxcCycCzcCAcvXcCBcCCcCDcCEcCFcCGcCHcCIcCJcCKcCLcCMcCMcCNcCOcCPcCQcCRcCScCTcCUcCVcCWcCXcSVcCZcCZcCZcDacDbaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcBWcBVcDccBVcBWaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaaaaafaaaaafaaaaafaaacGPaaaaafaaaaafaafaafaafaqJaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaabVEcgGcQgcAgcDecDfcDgcDhcDicDjcDkcDlcDmcxFcxFcDncxFcvMcvMcvMcvMcvMcvMcvMcDocvNcvNcDpcDqcvRcvScDrcDscDscDtcDucvXcDvcDwcDxcDycDzcDAcDBcDCcHDcDEcDFcDGcDHcDIcDJcDKcDLcDMcDNcDOcDPcDQcDRcDScDTcDUcDVcDWcDXcDbaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcDYcBWcDZcEacEbcBWcDYaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaacwqcwqcwqcwqcwqaafcEcaafcwqcwqcwqcwqcwqaafaobaaaaaaaaaaaiaafcEdcEdcEdcEecEdcEdcEdaaaaafaaaaaaaaaaafaaaaaabVEcEfcyycAgcEgcEhcQhcEicEjcAgcEkcElcEmcAgcEncEocEpcEqcErcEscErcEtcErcEucEvcEwcEqcExcjsccDcEycxTcEzcEAcEBcEzcECcECcECcECcECcEDctXcEEcAKcEFcEFcEGcEHcEIcEJcEKcELcEMcENcEOcAWcEPcEQcERcAKcEScDbcDbcBPcDbcBPaoaaafaaaaaaaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaafcBWcBWcETcEUcEUcEUcEVcBWcBWaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaacwqcwqcwqcwqcwqaafcEcaafcwqcwqcwqcwqcwqaafaobaaaaaaaaaaaiaafcEdcEdcEdcEecEdcEdcEdaaaaafaaaaaaaaaaafaaaaaabVEcEfcyycAgcEgcEhcQhcEicEjcAgcEkcElcEmcAgcEncEocEpcEqcErcEscErdfvcErcEucEvcEwcEqcExcjsccDcEycxTcEzcEAcEBcEzcECcECcECcECcECcEDctXcEEcAKcEFcEFcEGcEHcEIcEJcEKcELcEMcENcEOcAWcEPcEQcERcAKcEScDbcDbcBPcDbcBPaoaaafaaaaaaaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaafcBWcBWcETcEUcEUcEUcEVcBWcBWaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaafcxpcxqcxqcxqcxqcxrcgvcxscxtcxtcxtcxtcxuaafaobaaaaafaafaobaaacEdcEWcEXcEWcEYcEWcEdcEdcEecEdcEecEdcEdaafaafbVEchRcyycAgcAgcAgcAgcAgcAgcAgcEZcFacFbcFccFdcFecFfcEqcFgcFhcErcEvcErcFicFjcFkcEqcFlcjsccDcrmcsHcFmcFncFocFpcFqcFrcFscSWcFucFvcyZcwbcAWcAWcAWcAWcAWcAWcFwcFxcFycFzcFAcFBcAWbVEcBObVEcBPcFCcFDcFEcFFcFGaoaaoaaafaafaafaafaafaafaafaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcFHcFIcFHcEUcFJcEUcFKcFLcBVaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaafcyqcyqcyqcyqcyqaaacBXaaacyqcyqcyqcyqcyqaaaaqJaafaafaaaaobaafcEdcFMcFNcFOcFPcFMcFQcFRcFScFTcFUcFVcEdaaaaaabVEbVEcFWcFXcFXcFYcFXcFZcGacGbcGccGdcGecGfcGgcGhcGicGjcGkcGlcGkcGkcGmcGncGocGpcGqcGrcGscBscGtcGucGvcGwcGxcGycGycGycGzcGAcFuccIcyZcGBcAWcGCcGDcGEcGFcGGcGHcGGcGIcGJcGKcAWcnWcGLbYhccecBPcBPcBPcBPcBPcGMbnnaoaaafaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafcBWcBWcGNcEUcEUcEUcGOcBWcBWaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaaaaafaafaafaaaaaacGPaafaaaaaaaafaafaaaaaaaobaaaaaaaaaaaiaaacEdcGQcGRcGScGTcGQcGQcGUcGVcGWcGXcGYcEdaaaaaaaaacnWcnWcnWcnWcnWbVEcGZcAgcAgcHacHbcHccAgcHdcHecHfcEqcHgcEvcErcEvcErcHhcHicHjcHkcHlcHmcHncHocECcECcHpcHqcHrcHscHtcHucHvcFucHwcHxcHycDbcGCcGDcHzcHzcHAcHBcHCcHDcFzcHEcAWcfxcHFcaQbZQcHGbVEaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcDYcBWcHHcHIcHJcBWcDYaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaaaaaaaaaaaaaaaaaaaaacGPaaaaaaaaaaaaaafaaaaaaaqJaaaaaaaaaaobaafcEdcHKcHLcHMcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHWcHWcHVcHXcHYcHZcEdcIacIbcAgcIccIdcIecIfbVEbVEbVEbVEcEqcErcEvcErcIgcErcIhcIicIjcEqcIkcIlccDcjtcECcImcIncIocHscHscIpcIqcIrcFucIscItcIucAWcGCcGDcHzcIvcGGcIwcGGcIxcIycIzcAWcgGcgGcJvcgGcgGbVEaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcBWcBVcIBcBVcBWaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqJaaaaaaaaaaaaaaaaaaaaacGPaaaaaaaaaaaaaafaaaaaaaqJaaaaaaaaaaobaafcEdcHKcHLcHMcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHWcHWcHVcHXcHYcHZcEdcIacIbcAgcIccIdcIecIfbVEbVEbVEbVEcEqcErdfwcErcIgcErcIhcIicIjcEqcIkcIlccDcjtcECcImcIncIocHscHscIpcIqcIrcFucIscItcIucAWcGCcGDcHzcIvcGGcIwcGGcIxcIycIzcAWcgGcgGcJvcgGcgGbVEaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcBWcBVcIBcBVcBWaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaiaobaobaobaaaaaaaaacGPaaaaaaaaaaobaobaobaqJaobaafaafaaaaobaaacEecICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMcINcIOcIPcIQcIRcIScIEcITcIUcIVcIWcIXcIVcIYcIZcJacJbcJccJdcJecEqcEqcEqcEqcEqcEqcEqcJfcEqcEqbVEcJgccDcjtcECcJhcIncHscHtcHscJicJjcJkcJlcJmcJncJocJpcJqcJqcJqcJqcJqcJrcJqcJscJtcJucAWcwnciYcKxcKzcQObVEbVEaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcBVcBWcBVaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaobaafcJwaafaobaaaaaaaafaaaaaaaafaaaaafaafaafaaacEdcJxcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcEdcEecEecEecEdcJIcJJcJKcEdcJLcJMcAgcJNcJOcJPcJQbVEcJRcJScJTbVEcJUciVcJVcvWcvUcJWcJXczXciZcJYcJZcKacxScECcKbcKccKdcKdcKdcKecKfcKgcKhcKicKjcKkcKlcKmcKncKocKpcKqcKrcKscKtcKucKvcRtcRLcgGbZQcRMcKzcIAbVEbVEbVEacnaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaobaaaaafaaaaobaaaaaaaafaafaafaafaaaaaaaaaaafaafcEdcKBcKCcGQcKDcKBcKEcKFcKGcKHcKIcKJcEdcKKaaaaaacnWcnWcnWcnWcnWbVEcKLcAgcAgcAgcAgcAgbVEcKMcKNcKObVEcKPbVEbVEbVEbVEbVEbVEbVEbVEcvTcKQcKRcKScKTcKUcKVcKWcKXcKYcKZcHtcLacLbcLccLdcLecLfcLgcLhcLicLjcLkcLlcKschPcLmbVEbVEbVEbVEbVEcLncLocLpchMcLqchMcLraafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8565,8 +8578,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaacEdcNecNfcGQcNfcNecNgcNhcNicNjcNkcNlcEeaaaaaacNmbVEcNnbVEbVEbVEcNobVEbVEbVEbVEcNpcNqcNrcNscSocNrcNucNvcNwcNxcNycNzcNAcNBcNCcNDcNDcNEcNFcNGcNHcNIcNJciYciYcNKciYcNLciZcNMcSHcSJcSIcNMcNQciYcSKcNRcRtciYciYciYcNSbVEcNTcNUcNVcNbcNWcNXcNYcNbaafaafaafaafaafaafaafaafaafaafaafaafaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcEdcEdcEecEdcEecEdcNZcOacObcOccOdcOecEdaafaafcNmcOfcUBcNmcOhcOicOjcOkcOlcOmbVEbVEbVEbVEcOnbVEbVEbVEbVEbVEcTjcNycOpcNycOqcOrcOscNycOtcOucOvbVEbVEbVEbVEbVEbVEcyocOwcOxbVEcTkcTtcTlbVEcfyccfcOBbVEbVEbVEbVEbVEbVEbVEbVEbVEcqDcNbcOCcODcOEcNbaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaafaafaafcOFcOGcOHcOIcOJcOKcOLcOMcONcEdaaaaaacNmcOOcOPcNmcOQcORcOScOTcNmcNmcOUcOVcOWcOXcOYcOZcPacPbcPccPdcPecNycOpcNycPfcPgcPhcNycPicPjcPkcPlcPmcPncPocPpbVEcPqbVEbVEbVEcTucTwcTvbVEbVEbVEcmZbVEcPucPvcPwbVEcPxcTxcPzbVEcplcNbcPAcPBcPCcNbaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaafaaaaaacPDaafcPEcEdcEdcEdcEdcEdcEdcEdaaaaaacNmcPFcPGcNmcPHcWAcPJcPKcNmcPLcPMcPNcPOcPPcPQcPRcPScPScPTcPUcPVcPWcPXcPYcPfcPZcPhcNycOtcQacPfcQbcQccNycQdcQebVEcQfbVEaafaaacTycTzcTyaaaaaaaafaaabVEciEbZQbZQcQicfscQjcfscQkcQlcNbcQmcQncQmcNbaaaaafaaaaafaafaaaaaaaafaqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaafaafaafaaaaaaaaaaafaafaafaaaaaaaaaaafaaaaaaaaacNmcWIcQpcQqcQrcQscQtcQucNmcQvcNmcQwcQxcQycQzcQAcPOcPOcQBcQCcQDcQEcQEcQFcPfcQGcPhcNycOtcQHcQIcQJcQKcQLcQMcQNbVEcPqbVEaafaafcTycTAcTyaafaafaafaaabVEcQPbZQbZQcQQcQRbYicQSbVEcmZcNbcQmcQTcQmaafaaaaafaaaaaaaafaafaafaafaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaobaaaaafaaaaaacPDaafcPEcEdcEdcEdcEdcEdcEdcEdaaaaaacNmcPFcPGcNmcPHcWAcPJcPKcNmcPLcPMcPNcPOcPPcPQcPRcPScPScPTcPUcPVcPWcPXcPYcPfcPZcPhcNycOtcQacPfcQbcQccNycQdcQebVEcQfbVEaafaaacTycTzcTyaaaaaaaafaaabVEciEbZQbZQcQidfxcQjcfscQkcQlcNbcQmcQncQmcNbaaaaafaaaaafaafaaaaaaaafaqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaafaafaafaaaaaaaaaaafaafaafaaaaaaaaaaafaaaaaaaaacNmcWIcQpcQqcQrcQscQtcQucNmcQvcNmcQwcQxcQycQzcQAcPOcPOcQBcQCcQDcQEcQEcQFcPfcQGcPhcNycOtcQHcQIcQJcQKcQLcQMcQNbVEcPqbVEaafaafcTycTAcTyaafaafaafaaabVEcQPdfybZQcQQcQRbYicQSbVEcmZcNbcQmcQTcQmaafaaaaafaaaaaaaafaafaafaafaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacNmcPFcQUcNmcQVcQWcQXcQYcQZcRacNmcRbcRccRdcRecRfcRgcRhcPccPdcPhcNycRicRjcRkcRlcRmcQEcRncRocRpcRqcRqcRrcRscRqbVEacnaafaaaaaacTycTBcTyaaaaaaaafaafbVEcRucRvcRwbVEcRxcRycRwbVEaaaaafcQmcQncQmaafaaaaafaaaaaaaafaafaaaaaaaobaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaiaaaaaaaafaaiaagaaiaafaaiaaiaaiaafcOUcOUcOUcNmcNmcNmcNmcRzcRAcNmcNmcNmcRBcRCcRDcRecREcRFcRGcOUcOUcPhcNycNycNycPfcPgcPhcNycRHcRIcRJcRKaafaafaaaaaaaafacnaafaaacTOcTCcTPcTCcTQaaaaafaaabVEbVEbVEbVEbVEbVEbVEbVEbVEaaaaafaaacRPaaaaafaafaafaafaafaafaaaaaaaafaobaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaacRQcRRcRScOUcRTcRUcRVcRWcRXcRYcOUcRZcSacSbcSccRecRfcRgcRhcSdcOUcSecNycSfcSgcShcSicSjcSgcSkcNycSlcRqaaaaafaafaafaafaafaafaafcTCcTRcTTcTScTCaafaafaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaafaaacRPaaaaafaafaaaaaaaaaaafaaaaaaaaaaqJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index 0c7fe627d5b..b69c17a092d 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -347,7 +347,7 @@ "gI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/brig) "gJ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig) "gK" = (/obj/machinery/computer/security/wooden_tv,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; listening = 1; name = "Common Channel"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/brig) -"gL" = (/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/carpet,/area/security/brig) +"gL" = (/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/camera/autoname,/obj/item/weapon/folder/yellow,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/carpet,/area/security/brig) "gM" = (/obj/item/weapon/storage/secure/safe{pixel_x = 4; pixel_y = 26},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/security/brig) "gN" = (/obj/machinery/mineral/ore_redemption{input_dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/hallway/primary/central) "gO" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index e65e552ae3a..4b8c4b00b81 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -649,7 +649,7 @@ "amy" = (/obj/structure/bed/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "amz" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "amA" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) -"amB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"amB" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/security/prison) "amC" = (/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "amD" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "amE" = (/obj/structure/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bedsheet,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -980,7 +980,7 @@ "asR" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "asS" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/plating,/area/maintenance/fpmaint) "asT" = (/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"asU" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) +"asU" = (/obj/machinery/requests_console{department = "Detective's office"; pixel_x = -30; pixel_y = 0},/obj/structure/table/wood,/obj/item/device/camera/detective,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) "asV" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) "asW" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/security/detectives_office) "asX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/fitness) @@ -1181,7 +1181,7 @@ "awK" = (/obj/structure/table/glass,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "awL" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "awM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"awN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"awN" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison) "awO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/electrical) "awP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/electrical) "awQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Electrical Maintenance"; req_access_txt = "11"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/electrical) @@ -1920,7 +1920,7 @@ "aKV" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Kitchen Delivery"; req_access_txt = "28"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/kitchen) "aKW" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) "aKX" = (/obj/machinery/door/window/eastright{name = "Hydroponics Delivery"; req_access_txt = "35"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/hydroponics) -"aKY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"aKY" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aKZ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "Chapel Crematorium"; dir = 4},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) "aLa" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/chapel/office) "aLb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock{name = "Crematorium"; req_access_txt = "27"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) @@ -3269,7 +3269,7 @@ "bkS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central) "bkT" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bkU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) -"bkV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/power/apc{dir = 2; name = "Head of Personnel APC"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/heads) +"bkV" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "bkW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bkX" = (/obj/machinery/power/apc{dir = 4; name = "Conference Room APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/bridge/meeting_room) "bkY" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) @@ -3319,8 +3319,8 @@ "blQ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "blR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "blS" = (/obj/machinery/light/small{dir = 8},/obj/machinery/mass_driver{id = "trash"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal) -"blT" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "garbage"; name = "disposal coveyor"},/turf/simulated/floor/plating,/area/maintenance/disposal) -"blU" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/maintenance/disposal) +"blT" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"blU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/sleep) "blV" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/disposal) "blW" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/quartermaster/storage) "blX" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -6212,7 +6212,7 @@ "cpx" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engineering) "cpy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "Singularity"; name = "radiation shutters"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/engine/engineering) "cpz" = (/obj/structure/particle_accelerator/end_cap,/turf/simulated/floor/plating,/area/engine/engineering) -"cpA" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/engine/engineering) +"cpA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "cpB" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "cpC" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/engine/engineering) "cpD" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -6276,7 +6276,7 @@ "cqJ" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) "cqK" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft) "cqL" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cqM" = (/obj/structure/bed/chair,/turf/simulated/floor/plating,/area/maintenance/aft) +"cqM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "cqN" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel,/area/engine/engineering) "cqO" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil,/obj/item/weapon/electronics/airlock,/obj/item/weapon/electronics/airlock,/turf/simulated/floor/plasteel,/area/engine/engineering) "cqP" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -6782,6 +6782,25 @@ "cAv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area/space/nearstation) "cAw" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space/nearstation) "cAx" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/space/nearstation) +"cAy" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/electrical) +"cAz" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/office) +"cAA" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"cAB" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) +"cAC" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) +"cAD" = (/obj/structure/disposalpipe/segment{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/disposal) +"cAE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"cAF" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/disposal) +"cAG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/power/apc{dir = 2; name = "Head of Personnel APC"; pixel_y = -24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/crew_quarters/heads) +"cAH" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue) +"cAI" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "garbage"; name = "disposal coveyor"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/disposal) +"cAJ" = (/obj/structure/closet,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/disposal) +"cAK" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cAL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/mob/living/simple_animal/lizard{name = "Wags-His-Tail"; real_name = "Wags-His-Tail"},/turf/simulated/floor/plasteel,/area/janitor) +"cAM" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft) +"cAN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft) +"cAO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/engine/engineering) +"cAP" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) +"cAQ" = (/obj/structure/bed/chair,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6849,12 +6868,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcpwavTcpFaadaaaaadcpHcpHcpHaadaaaaadbsBcdPbJSaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaafaaaaafaaaaafaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcpHcpHcpHaadaaaclOcqIcrgcrfcmEaaaaadcpHcpHcpHaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaaiaakaajaalaajaalaajaamaaiaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclOcqIcrgcrfcmEaaaaaaaaaaaaaaaaaaaaaclOcqIcrgcrfcmEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaanaapaaoaaraaqaataasaavaauaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaiaawaayaaxaayaayaayaazaavaaAaaiaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaiaawaayaaxaayamBaayaazaavaaAaaiaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaaiaaBaaDaaCaaFaaEaataataavaaGaaiaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaiaaIaataataataataaJaataataaLaaKaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaMaaJaataataaOaaNaaJaataaQaaPaaiaafaaRaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaUaataataataaJaaWaaVaataataaYaaXaaiaaiaaZaafaafaafaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcabbabeabdabgabfaatabhaataataataataataataavaatabjabiaaZaaTaaTabYaaTaaTabYabYaaTadRabpaboabpaboabpabqabqabrabrabrabqabqaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcabbabeabdabgabfaatabhawNaataataataataataavaatabjabiaaZaaTaaTabYaaTaaTabYabYaaTadRabpaboabpaboabpabqabqabrabrabrabqabqaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafabsaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuabtabwabvabyabxaataatabAabzabBaatabDabCabEaatabGabFaaZaafaaaaaaaaaaaaaaaaaaaafaboabPabOabOabOabRabqabTabSabVabUabWabqaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafabXaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSabYabYabYabYaafaafaaaabZaaaaafaafaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuacaaccacbabyacdaceacdacdacdacfacdacdacdacgacdacdachaaZaaZaaZaaZaaZaaZaaZaaZaaZaaZacoabOacqacpabPabqacsacracuactabkabqaaaaafacwaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaaacxaaaacyaafaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaaabZaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuaczacBacAabyacCaatabKacdacEabMabLacdacHacJacDacdacKaaZabmabHabnabJabIabQabNaciaaZacOabOacqacPabPabracRacQacSacuacjabqaaaaafabpacUabpaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaafaaaaafaaaaaaacxaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6873,39 +6892,39 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaafaafaafajVajWajVaafaafaafaafaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajYajXajXajXajZaaaaafaiVakbakaakdakcakfakeakhakgakjakiaklajFajGakmaklajFakoakmaklakkakqakpakpakpakrahYaktaksakvakuakxakwakyakwakwakwajHajnajnajoahTaifaiAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaafaafaafaafadUaafaafaafaafaafaaSaaSaaSaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaajVakBajVaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakDakCakFakEakDaiUaiUakGakIakHakKakJaiXagjafKagjagjakMakOakNakQakPakRakNakQakPakTakSakQakUakVakQakXakWakQakYalaakZaiXalbalcajnaldajnaknajTajnajoahTaifaiAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaalgaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafajVajValhajVajVaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaealialialialialiaaaalkaljalmallaloalnalpalnakIalqalsalraiXafLafMafLagjalvalxalwagjalyalxalwagjalyalxalwagjalzalBalAalCaiGagjalxakzalEaiXalGalIalHalJalHaleakAajnajoahTaifaiAaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaalNaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaalPalOalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalRalQalTalSalRalUalUalUalUalUalUalUalUalUaaaaaaaaaaaaalialValXalWaliaaaakDalYamaalZakDaiUaiUaiUamcambameamdaiXafLafMafLagjamfalxamgagjamhalxamiagjamjalxamkagjamlamnammalCamoagjampalfamqaiXamramsamramtamralDamramrajoahTaifahnahnaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaamwamvamwaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaalPamxalPaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalRalQalTalSalRalUalUalUalUalUalUalUalUalUaaaaaaaaaaaaalialVaKYalWaliaaaakDalYamaalZakDaiUaiUaiUamcambameamdaiXafLafMafLagjamfalxamgagjamhalxamiagjamjalxamkagjamlamnammalCamoagjampalfamqaiXamramsamramtamralDamramrajoahTaifahnahnaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaamwamvamwaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaalPamxalPaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalRamyamAamzalRalFalFalUamDamCamEalUamFalUaaaaaaaaaaafalUamGamCamHalUaaaakDamIamIamJakDaaaaaaamKaiTaiUamMamLaiXafLafNafLaiXamQamRamRamSamRamRamRamSamRamRamRamSamTamVamUamXamWaiXaiXaiXaiXaiXamYamZamYajpamYanaamYajpajoalLalKandahnahnahnaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaamwaneamwaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaalPanfalPaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalRanganianhalRanjanlankanmamCannalUalUalUalialUalialialUanoanpanoalUaaaalkanqamIanrakDaiUaiUaiUantansanvanuaiVaiXaiXaiXaiXanwanwanwanxanwanwanwanyanwanwanwanxanwanwanwanzanzanBanAanAanAanCamYamZamYajpamYanaamYajpajoahTalManFanEanGanEaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafamwamwamvamwamwaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaalPanfalPaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaalRalRanIanHalRanJamCalUamCamCamCankamCamCanKamCalXamCamCamCamCanLaliaaaakDanMamIamIanOanNalpanNakIalqalsalqanPanzanzanzanQanzanzanRanzanzanzanzanzanzanzanSanzanzanzanTanzanzanzanzanzanzanUajpanWanVanYanXamuanVajpaoaanbamBaodaodaoeahnaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaofaohaogaoiaofaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafalPalPalPanfalPalPalPalPalPalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaalRalRanIanHalRanJamCalUamCamCamCankamCamCanKamCalXamCamCamCamCanLaliaaaakDanMamIamIanOanNalpanNakIalqalsalqanPanzanzanzanQanzanzanRanzanzanzanzanzanzanzanSanzanzanzanTanzanzanzanzanzanzanUajpanWanVanYanXamuanVajpaoaanbbkVaodaodaoeahnaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaofaohaogaoiaofaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafalPalPalPanfalPalPalPalPalPalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalUalUalUalUalUaafaafalUaojaolaokaomanlalUalUalialialUalUalUalUalialUalialialUaonamCaooalUaaaakDaopaopaopakDaiUaiUaoqaosaoraouaotaiTaovaovaovaovaovaoxaowaovaovaovaovaovaovaovaoyaozaozaozaoAaoBaozaoDaoCaoFaoEanCaoGaoHajoajoajoajoajoajoajoahTancahnaoKaoLahnaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaofaoNaoMaoOaofaafaaaaaaaafaaaaafaaaaafalPalOalPalOalPaoPanfanfanfanfanfanfaoQalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaqIaaaaaaaaaarCaaaaafaaaaaaaaaaaaaaaaaaaaaalUalUalUalUaoSaoRaoTalUaaaaaaalUamCaolanJamCaoUalUaoVaoVapQaoVaoVapQapQaaHaaHasCasCalUaoWamCaoXalUaaaaoZaoYaoYaoYapaaaaaafaiVaiUapbaiTapcapdapdapfapeapfapdapdapgaphaphaphapiaphaphapkapjapmaplaodapnaodaodaodaodapoaodaodaodaodaodapqappapsapraptaptanZanDapxapwapyahnaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafaofapAapzapBaofapCapCapCapCapCalOalOalOalPapDanfaoQalPalPanfalPalPalPalPapEalPalPaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapFapHapGaaaapIapKapJaafaaaaagaagaagaaaaaaaafalUapLapNapMamCapOamCalUalialialUapPaolanJapPalUalUalUalialialialUalUaaHatRapQapQaaHalUalUankalUalUaaaaaaaaaaaaaaaaaaaaaaafaiTapRalpaiTapSapdairapUapUapUapVapdaqZaphaobaocataaqbaphanwanzaqdaqcaqfaqeaqeaqeaqeaqeaqhaqgaqeaqeaqeaqeaqeaqiaqkaqjaqmaqlapuaoIahnaqpaqqahnaafaqraqsaqsaqtaqsaqsaquaafaafaaaaaaaaaaafalOaqvalOaaaapCaofaofaqwaqxaofaqyanfanfanfalPaqzanfaqAalPanfanfanfaqBalPanfalPaqDaqCalPanfaqEalPaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapFapHapGaaaapIapKapJaafaaaaagaagaagaaaaaaaafalUapLapNapMamCapOamCalUalialialUapPaolanJapPalUalUalUalialialialUalUaaHatRapQapQaaHalUalUankalUalUaaaaaaaaaaaaaaaaaaaaaaafaiTapRalpaiTapSapdairapUapUapUapVapdaqZaphaobaocataaqbaphanwanzaqdaqcaqfaqeaqeaqeaqeaqeaqhaqgaqeaqeaqeaqeaqeaqiaqkaqjaqmaqlapuaoIahnaqpaqqahnaafaqraqsaqsaqtaqsaqsaquaafaafaaaaaaaaaaafalOaqvalOaaaapCaofaofaqwaqxaofaqyanfanfanfalPaqzanfaqAalPanfanfanfaqBalPanfalPaqDaqCalPblTaqEalPaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaqFarDaqFaaaaqHcpKaqHaafaafaliaqJaliaaaaaaaafalUaqKaqLaomaqNaqMaqOalUaoXamCaqPamCaolanJamCamCamCamCamCamCamCamCalUalUalUapQaaHapQaaHaqQaqRaqQaaaaaaaaaaaaaaaaaaaaaaaaaafaiTapRaqSaiTaqTapdaqUaqWaqVaqYaqXapdaqZapharaarcarbareardanwanzanAaqcahTarfarfarfarfarfarhargarfarfarfarfarfarfarfarfarjapvahnapXarjarjarjarjarjarmaroaroaroaroaroarmarjaafaaaaaaaaaaafarpanfalOaaaapCarqarsarrartanfanfanfalPanfalParuanfanfalPanfarwarvarxapEanfalParzaryalPanfarAalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaqFcpLaqFarBaqHczKaqHarBaafarEamCaliaaaaaaalUalUalUalUalUankarFarGarGarIarHarJarHarLarKarNarMalUamCalUalUalUamCalUarOalUaaHapQaoVapQaqQaqRaqQaaaaaaaaaaaaaaaarParParParParParParParParQapdarRaqWarSarUarTapdaqZarWarVarYarXarZardanwanzasaaqcahTarfaqaapYaqnasdasgasfarfaqoasmariarfaskasmarkarjarlasbarnasrasqastassarjarmaroaroaroaroaroarmarjaafaafaafaafalOalOaqvalOalOapCasvanfaswanfaoPanfalPalPasxalPalPasyalPalParxasAaszanfalPanfasBasBasBasBasBasBasBasBasBatSatSatSatSaaHatSatSapQapQaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasEasDasGasFasEasHasJasIasEalUaliaqJalialialialUaseascascascascascascashasiatPalUalUalUalUamCalUalUamCasOalUarNamCalUalUalUalUaoVaoVaoVaqQaqRaqQaaaaaaaaaaafaafarPasQasParPasRasTasSarParQapdasUasWasjasnaslapdapWasoapZataatcataardanwanzatdaqcahTarfatfateathatgatjatiarfaspatoasuarfatmatoasLarjasMasVasNasNasNasNasXasZasYaroaroaroaroaroarmarjarjarjaaaaaaalOanfanfanfaqyapCatvarxaswanfatwatyatxapEanfanfanfanfatzanfanfasAatAanfatBanfasBatDatCatEasBatGatFatHasBapQaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasEasDasGasFasEasHasJasIasEalUaliaqJalialialialUaseascascascascascascashasiatPalUalUalUalUamCalUalUamCasOalUarNamCalUalUalUalUaoVaoVaoVaqQaqRaqQaaaaaaaaaaafaafarPasQasParPasRasTasSarParQapdasUasWasjasnaslapdapWasoapZataatcataardanwanzatdaqcahTarfatfateathatgatjatiarfaspblUasuarfatmatoasLarjasMasVasNasNasNasNasXasZasYaroaroaroaroaroarmarjarjarjaaaaaaalOanfanfanfaqyapCatvarxcpAanfatwatyatxapEanfanfanfanfatzanfanfasAatAanfatBanfasBatDatCatEasBatGatFatHasBapQaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasEasEatIasEasEasEatIasEasEatJaxkaAYatbatbatlatkatpatnatqatqatqatqatqatqatrauVavbaaHavUalUamCatTapParNatLalUatUamCamCamCatWaliaoVaoVapQaqQaqRaqQaaaaaaaaaarParParPaqRaqRarPaqRaqRaqRarPatXapdatYapUatsatKatuapdaqZaufaphauhaugauiaphaujanzanAaqcahTarfarfarfarfarfaulaukarfarfatQaunarfarfaupaunarjatVausaurautautauvauuauaatZaroaroaroaroaroauyauAauzauBaaaaaaalOanfanfauCanfapCauDanfauEauFauFauFauFauGauFauHanfanfanfanfanfanfanfanfalPatyasBauJauIauIasBauLauKauMasBaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasEauNauPauOasEauQauPauOasEaqOaucaubascascascaudaumaueaonauXauZauYavaalUatNauVaaHbNbavbaliamCasOalUalUalUalUalUalUalUavcatWaliapQaoVapQaqQaqRaqQaagaagaagavdaveavdaqRaqRarParPavfarParPatXapdapdapdauoauqapdapdavhaviaphaphaphaphaphavjanzavkaqcahTarfaqaapYauwasdauRauxauUauSavgauWavmavlavnavuavxavwausavyavzavzavAattavBauBaroaroaroaroaroauBavDavCauBaafaafalPanfanfalPalPapCapCapCapCapCapCapCapCapCalPavFavEalPalPalPalPalPalPalPalPanfavoasBauIauIavLavNauJavOasBaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafarBasEatIavParBasEavQavParBalUavpauValUalUalUalUavqaueamCavSbsUamCamCalUatNauVbOiapQbOialUamCavValUavWavXalUatUaqOatMatOatOatOavYavYavYavZawbawaavYavYavYavZawaavZavZawbavZawcawbawdawfaweawgawgawgavravsawgawgawhawiawgawgawgawgawjawlawkawkawmawnarfatfathathawoatjavtavGavvawpavRawsawqawvawtawzawyawAavyavzavzavAattawBauBaroaroaroaroaroauBawCavCarjaaaaaaalPawDanfanfawEalPawFaoQawGawHaoPalPauDaoPalPawIanfalPawJanfalPawLawKawMawxawxawxawQawPawTawRaxaawSawUasBatSatSaaHaaHatSatSatSatSapQapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWawVawVawVawXawVawVaxcaxGaxhaxIaxHawZawZaxbalUaxJaueaxeaxdaxfamCaxgalUatNaxKatOatOatOatOaxiatOatPamCaxfaxjamCamCaxlaxkaxnaxmaxoaxoaxoaxpaxoaxqaxoaxoaxsaxraxuaxtaxtaxtaxtaxtaxtaxvaxxaxwaxyaxyaxyaxyaxzaxyaxyaxzaxyaxAaxAaxAaxAaxAaxCaxBaxEaxDaxFarfarfarfarfarfaulaxLawrawuaxNaxMaxPaxOaxXaxVaxRaxQaxTaxSaxUaxUaxWattaxYatZaroaroaroaroaroaxZaybayaarjaaaaaaalPanfanfanfanfanfanfawNauFauFauFauFauFauFauFaycanfanfanfanfatBanfanfaygayeavIavHavKavJavMauIauIauIayjasBapQaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWawVawVawVawXawVawVaxcaxGaxhaxIaxHawZawZaxbalUaxJaueaxeaxdaxfamCaxgalUatNaxKatOatOatOatOaxiatOatPamCaxfaxjamCamCaxlaxkaxnaxmaxoaxoaxoaxpaxoaxqaxoaxoaxsaxraxuaxtaxtaxtaxtaxtaxtaxvaxxaxwaxyaxyaxyaxyaxzaxyaxyaxzaxyaxAaxAaxAaxAaxAaxCaxBaxEaxDaxFarfarfarfarfarfaulaxLawrawuaxNaxMaxPaxOaxXaxVaxRaxQaxTaxSaxUaxUaxWattaxYatZaroaroaroaroaroaxZaybayaarjaaaaaaalPanfanfanfanfanfanfcqMauFauFauFauFauFauFauFaycanfanfanfanfatBanfanfaygayeavIavHavKavJavMcAyauIauIayjasBapQaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWaykaylaykaymaylaylaynaykaylaypayoayqayqayralUaxJaueaysamCamCaytayualUayiayhasKasKasKasKasKaywauVayxamCalUatJatJauVayyalUayzayBayAayAayCayAayDayAayAayFayEayHayGayGayGayGayGayGayGayJayIayLayKayNayMayPayvayQayOaySayRayTazWayXayWayYanzayZahnanFarfaqaapYayVasdazcawwawrawrawrawuazbazaazeazdavxazjazlazkaznazmazoazfazhazgaroaroaroaroaroazparjarjarjalPalPalPaoPalPalPapEalPalPaswalPalPazralPalPapEalPaswawDalPalPapEalPanfawDaygaydasAasBaztawOazvazuazwawOazxasBapQaoVaoVaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasEawWazyawWazzaylaylazAawWazyawWazBazCaymazDalUaxJauealUalUalUalUazFazFazqaziazFazFazFazFazFatNaxKatOatOatOatOatOazGayyaoXayzaaaaafaaaazHaaaazIaaaaafaaaayEayHayGazKazJazMazLazNayGayJazOazQazPazPazsazUazEazEazEazSazRazRayUazYayWazZanzaAaahnanFarfatfathathaAbatjazTazVaAdaAgaAfaAiaAhaAhazXaAharjaAlaAkaAnaAmaApaAoarjazparoaroaroaroaroazpalParAanfayfaAqalPalPalParAanfalParAaswalPaAranfalPaAsanfalPaAuaAtalPaAvanfalPapEapEaygaAcapEasBaAyawOaAAaAzaAAawOaABasBapQapQapQaoVaoVaoVaoVaoVaoVaoVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaACarBaADauPawWaAFaAEaAHaAGawWauPaADawWarBaAIaAJalUaAjaAeaAMaAMauTaAwazFaAPaAKaAxaATaASaAUaAPazFaAVaANaALaAYaAYaAYaAYaAYaAOatJayzaafaBaaBaaBbaBaaBcaBaaBaaafayEayHayGaBeaBdaBgaBfaBeayGaBiaBhaBkaBjaAWaARaBoaBnaBqaBpaBsaBrazWazWazWaBtazZanzaBuahnanFarfarfarfarfarfaAXaukaAhaAhaAhaAhaAhaAhaBzaAZaBAaAharjarjarjarjaBCaBBarjazparoaroaroaroaroazpalPalPanfaBDaAqalPaBEalPanfanfalPanfaswalPanfanfalPanfanfalPaswatyalPanfanfalPaBFanfaygaydarxasBasBasBasBasBasBasBasBasBatSatSatSatSatSapQaoVaoVaoVaoVaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaACarBaADauPawWaAFaAEaAHaAGawWauPaADawWarBaAIaAJalUaAjaAeaAMaAMauTaAwazFaAPaAKaAxaATaASaAUaAPazFaAVaANaALaAYaAYaAYaAYaAYaAOatJayzaafaBaaBaaBbaBaaBcaBaaBaaafayEayHayGaBeaBdaBgaBfaBeayGaBiaBhaBkaBjaAWaARaBoaBnaBqaBpaBsaBrazWazWazWaBtazZanzaBuahnanFarfarfarfarfarfaAXaukaAhaAhaAhaAhaAhaAhaBzaAZaBAaAharjarjarjarjaBCaBBarjazparoaroaroaroaroazpalPalPanfaBDaAqalPaBEalPblTanfalPanfaswalPblTanfalPanfanfalPaswatyalPanfanfalPaBFanfaygaydarxasBasBasBasBasBasBasBasBasBatSatSatSatSatSapQaoVaoVaoVaoVaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWazyawWawWawWawWawWawWazyawWaaaarBaBHazDaBIaBKaBJaBIaBIaBIaBlazFaAPaBvaBmaBwaFPaBGaAPazFalUaBLaBQaBQaBQaBQaBQaBQaBNaBQaBRaaaaBaaBTaBSaBVaBUaBWaBaaaaayEayHayGaBeaBXaBZaBYaBeayGaqRakLayLaBOaCaaBPaCgaCbaBraCcaCiazWazWaCjazWaBtazZanzaAaahnanFarfaqaapYaCdasdazcaukaAhaCmaDOaCnaCnaAhaBzaCeaBAaAhaCqaCfaChaCraCtaBBaafaCuaCvaCvaCvaCvaCvaCwaaaalPanfaCxaCyalPalPalPalPalPalPaCzaCAalPalPalPalPalPalPaCBaCDaCCaCEaCEaCEaCFaCHaCkaClaCIaCoaCKaCNaCMaCEaCOaCQaCPaCRaCRaCRaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaCTaCSaCUaCSaCVaCVaCVaCVaCSaCUaCXaCWarBazzaCpaBIaCLaCsaCYaDcaDfaCZazFaAPaDaaAQaDgaAQaAQaAPazFaDhaDdaDbaDlaDkaDnaDmaDpaDeaDqaBRaafaBaaDsaDraluaDtaDvaBaaafayEayHayGaDjaDiaDxaDwaDyayGaqRaDzayLaDCaDBaDAazWaDDaDEaDFaDIafOaBtayWafPayWazZanzaAaahnanFarfatfateathaDKatjaDGaFgaDLaDQaDMaDMaDSaDUaDTaDPaAhaDRaDYaEcaEbaEAaBBaaaaafaaaaafaaaaafaaaaafaaaalPawDaDVaCGaDWaDXalPatwanfawDaswanfalPaaaalPayfaCGaCGaEBaEaaDZaDZaDZaDZaDZaEDaECaEeaEdaEfaEfaEfaEgaEiaEhaEkaEjaEmaElaEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCTaCSaCSaEpaEoaEraEqaEtaEsaEvaEuaEwaEraEyaExawWazzaEzaBIaEGaEEaEIaEHaEKaEJazFaEFaAQaAQaAQaAQaAQaAQaELaDoaDdaDoaDoaDoaDoaDoaDoaDeaDoaBRaaaaBaaENaEMaEMaEOaEPaBaaaaayEayHayGaERaEQaETaESaEUayGaqRaEVayLayLaDIaEWaEXaEYaFcayLayLazWazWayWaFbayWazZanzaAaahnanFarfarfarfarfarfaFeaFdaFhaFfaFiaGxaGxaGxaGxaGxaBxaAhaFlaFjaFkaCraCtaBBalPalPalPalPalPalPalPalPalPalPalPalPalPaFnalPalPalPalPayfaCJaFpaFoaFqaFoaFmaFraFtaFsaFvaFuaFuaFuaFuaFwaFyaFxaFwaFwaFwaFwaFwaFwaFwaFzaFBaFAaCRaCRaCRaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCVaFCaFCaFDaEraFEaEraFEaEraFEaEraFEaEraEyaFFawWazzaFGaBIaFIaFHaFKaFJaFMaFLazFaFNaAQaAQaAQaAQaAQaFOazFaFQaFRaFYaFSaDoaDoaDoaFUaFTaFZaBRaafaBaaGbaGaaGdaGcaGeaBaaafayEaFVayGaFXaFWaETaJhaGfayGaGhaGgayWaGoazWaGiaEZaGjazWaGqayWagmaioayWaEZayWaGtapjaGuahnanFanFanFanFanFaoaaulaukaAhaGkaGlaAhaGmaAhaGnaAhaGpaAhaGDaGraGwaGvaGzaGyaGIaGHaGKaGJaGAaGLaGLaGLaGLaGNaGBaGLaGLaGPaGRaGQaGSaCEaGCaGTaGWaGVaGXaGVaGFaGEaFubbEaGGaFuaHcaHbaHdaFwaGOaGMaFwaHfaGUaHgaGYaHiaHlaHkaHnaHmaHpaHoaHqaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacrycrxcrxcrxcrxcrxcrzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCVaEraEraHsaEraFEaEraFEaHtaFEaEraFEaEraEyaFFawWazzaHuaBIaBIaGZaHyaHaaHyaBIazFazFazFazFaHzaAQaBMaHAazFaHeaDdaDoaDoaDoaHDaDoaDoaDeaHEaBRaaaaBaaBaaHFaHGaHFaBaaBaaaaayEayHayGaHjaHhaHwaHvaHLayGaqRaHxayWaHNazWaHBaEZaHCazWaHOayWaBtaBtayWafPayWaHQaHPaHRahnaoaahnahnahnahnahnaHTaHHaAhaHUaByaAhaHVaAhaHWaAhaHXaAhaHZaHIaHKaCraIbaIaaIdaIcaIeaIeaHSaHMaIeaIgaIiaIhaIfaHYavIavIavIaIkaImaIjaIlaInanfaIpaIpaIpaIqaIoaFuaIraIuaIsaIwaIvaIxaFwaIBaIyaFwaIzaICaIAaIIaHiaIDaFzaFBaEjaIFaIEaHqaaaaaaaaaaaaaaaaafaaaaaaaaaaaacrycrOcrNcwFcrQcwFcwGcwHcrzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCVaIGaIGaIHaEraFEaEraFEaEraFEaEraFEaEraEyaFFawWazzaylaNhaIMaIJaIMaILaylaIOaIQaIPaIRazFaISaAQaAQaITazFaINaDdaDoaIXaIWaIZaIYaJbaIUaJcaBRaaaaafaaaaJdaJeaJdaaaaafaaaayEayHayGaJaaIVaHJaJhaJiayGaqRaqZayWaJjazWaEZaEZaEZaJfaJlayWaaaaaaaJnaJpaJoaJraJqaJtaJsaJuaJnaaaaaaaJwaJvaJyaJgaAhaJzaByaByaByaDNaByaByaByaAhaCraJkaCraCraCraBBaJDaJCaJCaJEaJxaJmaJCaJHaJIaJIaJAaQjaJKaJIaJLaIpaIpaJBaIqaIpaIpaIpaJOaJNaIqaIoaFubavaJQaJPaJSaJRaJFaFwaJJaJGaLoaJMaJUaJTaJWaJVaIDaFzaFBaEjaHpaKeaHqaaaaaaaaaaaaaaaaafaaaaaaaaaaaacwIcwKcwJcwLcwLcwLcwMcwNcwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKfaCSaCSaEpaKgaEraEraEraEraEraEraKhaEraEyaKiawWazzaylaKjaKkaJXaKkaJYaKkaKkaKkaKlaylazFaKnaKmaKnazFazFaKpaJZaKpaBQaBQaBQaBQaKpaKaaKsaBRaKuaKtaKtaKvaKwaKbaKtaKtaKxayEaKyayGaKcayGaKdaKAaKBayGarPapgayWayWayWaBtaEXaBtayWayWayWaJnaJnaJnaKEaJqaJqaJqaJqaJqaKFaJnaJnaJnaJwaKGaJyaKoaAhaAhaAhaAhaAhaAhaAhaAhaAhaAhaKJaMraKraKqaKNaKMaKPaKOaJCaKQaJxaKzaKSaKRaJIaKTaKCaQjaKVaJIaKXaKWaKHaKDaKKaKIaKIaKLaKUaLdaIqaIoaFuaLfaJQaLgaJSaJRaLhaFwaKZaKYaLbaLaaLeaLcaMXaFwaFwaTeaFBaEjaIFaIEaHqaaaaafaafaafaafaafaafaafaaaaaacwIcwPcwOcwRcwQcwLcwMcwScwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKfaCSaLsaCSaCVaCVaCVaCVaCSaCUaLuaLtarBaLvaylaLwaLyaLiaLzaLjaLAasEaLCaLBaylaLDaLFaLEaLEaLGaLEaLEaLkaLEaLEaLEaLEaLEaLEaLHaLKaLJaLMaLLaLNaLNaLPaLNaLNaLNaLNaLlaLnaLmaLpaLNaLqaLNaLTaHPaLIaLxaLWaLVaLXaJsaJsaJsaJraJqaJqaLYaJqaJqaMaaLZaMcaMbaMeaMdaMfaJqaJqaLYaMhaMgaMjaLOaLRaLQaMnaMmaJqaMoaJqaCraMqaMpaMraMraMraLSaMvaMuaMxaMwaJCaLUaMiaKRaMCaMBaJIaMDaKCaMkaMlaJIaJIaMGaMIaMsaMyaMtaMAaMzaMEaMNaIqaIoaFuaItaItaMHaMJaItaItaFwaMWaMKaFwaMXaMXaMXaMXaFwaMMaMLaLraEjaCRaCRaCRaMZaMZaMZaNaaNaaNaaafaafaaacrycwTcwUcwUcwVcwUcwXcwWcwUcwTcrzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWazyawWawWawWawWawWawWazyawWaaaarBaBHaNbaLwaNdaMOaNeaMPaNfasEaNgaLBaNiaNhaLFaNjaNlaNkaNnaNmaNoaLEaLEaLEaLEaLEaLEaLEaLKaLEaLFaLEaLEaLEaMRaMQaMSaMSaMSaMTaMUaMSaMVaMSaMYaMSaNpaNcaNraNqaNsaJqaJqaJqaJqaJqaJqaJqaJqaLYaJqaJqaNwaNvaNyaNxaNAaNzaNBaJqaJqaLYaJqaJqaJqaJqaJqaJqaJqaJqaJqaNCaJqaCraMraMraMraNtaNFaNFaNHaNGaNJaNIaJCaNuaNEaNDaJCaJCaJIaNMaKCaNKaMFaNOaJIaIpaIpaNLaIpaIpaIpaNQaNNaNQaIqaIoaFuaNSaItaItaNPaItaNVaFwaFwaFwaFwaFwaFwaFwaNWaFwaFzaFzbxmaEjaNYaNXaCRaNZaObaOaaOdaOcaNaaafaaaaaacwIcwYcwYcwYcrxcwZcwLcxacxccxbcrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKfaCSaCSaEpaKgaEraEraEraEraEraEraKhaEraEyaKiawWazzaylaKjaKkaJXaKkaJYaKkaKkaKkaKlaylazFaKnaKmaKnazFazFaKpaJZaKpaBQaBQaBQaBQaKpaKaaKsaBRaKuaKtaKtaKvaKwaKbaKtaKtaKxayEaKyayGaKcayGaKdaKAaKBayGarPapgayWayWayWaBtaEXaBtayWayWayWaJnaJnaJnaKEaJqaJqaJqaJqaJqaKFaJnaJnaJnaJwaKGaJyaKoaAhaAhaAhaAhaAhaAhaAhaAhaAhaAhaKJaMraKraKqaKNaKMaKPaKOaJCaKQaJxaKzaKSaKRaJIaKTaKCaQjaKVaJIaKXaKWaKHaKDaKKaKIaKIaKLaKUaLdaIqaIoaFuaLfaJQaLgaJSaJRaLhaFwaKZcAzaLbaLaaLeaLcaMXaFwaFwaTeaFBaEjaIFaIEaHqaaaaafaafaafaafaafaafaafaaaaaacwIcwPcwOcwRcwQcwLcwMcwScwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKfaCSaLsaCSaCVaCVaCVaCVaCSaCUaLuaLtarBaLvaylaLwaLyaLiaLzaLjaLAasEaLCaLBaylaLDaLFaLEaLEaLGaLEaLEaLkaLEaLEaLEaLEaLEaLEaLHaLKaLJaLMaLLaLNaLNaLPaLNaLNaLNaLNaLlaLnaLmaLpaLNaLqaLNaLTaHPaLIaLxaLWaLVaLXaJsaJsaJsaJraJqaJqaLYaJqaJqaMaaLZaMcaMbaMeaMdaMfaJqaJqaLYaMhaMgaMjaLOaLRaLQaMnaMmaJqaMoaJqaCraMqaMpaMraMraMraLSaMvaMuaMxaMwaJCaLUaMicAAaMCaMBaJIaMDaKCaMkaMlaJIaJIaMGaMIaMsaMyaMtaMAaMzaMEaMNaIqaIoaFuaItaItaMHaMJaItaItaFwaMWaMKaFwaMXaMXaMXaMXaFwaMMaMLaLraEjaCRaCRaCRaMZaMZaMZaNaaNaaNaaafaafaaacrycwTcwUcwUcwVcwUcwXcwWcwUcwTcrzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWazyawWawWawWawWawWawWazyawWaaaarBaBHaNbaLwaNdaMOaNeaMPaNfasEaNgaLBaNiaNhaLFaNjaNlaNkaNnaNmaNoaLEaLEaLEaLEaLEaLEaLEaLKaLEaLFaLEaLEaLEaMRaMQaMSaMSaMSaMTaMUaMSaMVaMSaMYaMSaNpaNcaNraNqaNsaJqaJqaJqaJqaJqaJqaJqaJqaLYaJqaJqaNwaNvaNyaNxaNAaNzaNBaJqaJqaLYaJqaJqaJqaJqaJqaJqaJqaJqaJqaNCaJqaCraMraMraMraNtaNFaNFaNHaNGaNJaNIaJCaNuaNEaNDaJCaJCaJIaNMcABaNKaMFaNOaJIaIpaIpaNLaIpaIpaIpaNQaNNaNQaIqaIoaFuaNSaItaItaNPaItaNVaFwaFwaFwaFwaFwaFwaFwaNWaFwaFzaFzbxmaEjaNYaNXaCRaNZaObaOaaOdaOcaNaaafaaaaaacwIcwYcwYcwYcrxcwZcwLcxacxccxbcrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaACarBawWauPawWaOfaOeaOhaOgawWauPawWawWarBazzaylaLwaOjaNRaNeaMPaNfasEaOkaLBaylaNhaLFaLEaOmaOlaOlaOlaOoaOnaOpaOlaOqaOlaOlaOlaOraOlaOsaOlaOlaOlaNUaNTaOtaOiaOiaOuaOwaOvaOyaOxaOAaOzaOCaOBbBoaODaJqaOEaOEaOEaOEaOEaOEaOEaOEaOFaOEaOEaOEaOEaOEaOEaOEaOEaOEaOEaOEaOGaOEaOEaOEaOEaOEaOEaOEaOEaJqaJqaJqaCraOHaOHaOHaOHaOHaOHaOJaKMaOLaOKaJCaJCaOOaJCaJCaOPaJIaOIaONaOMaMFaOTaJIaIpaOVaOQaOXaOWaOXaOXaORaOZaIqaIoaFuaPbaPbaYWaOSaPdaPdaPfaFuaPgaPiaPhaCRaPjaPlaPkaFzaFzaPnaPmaCRaPoaCRaPpaPraVXaOUaPsaNaaNaaNaaNacwIcxdcxecxecxfcwLcwLcwLcwLcxacwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafasEawWazyawWazzaylaylazAawWazyawWaPtaPvaPuaylaLwaPxaOYaLzaPaaLAasEaPyaLBaylaPzaPzaPzaPBaPAaPAaPAaPAaPAaPAaPCaPDaPAaPEaPAaPAaPAaPGaPFaPHaPFaPJaPIaPKaLEaLEaPLaPNaPMaLEaPcaPOaLEaPQaPQaJqaPeaLXaJnaJnaJnaJnaJnaJnaJnaJnaPRaPTaPSaPUaPSaPSaPSaPVaPSaPWaPSaPXaPRaJnaJnaJnaJnaJnaJnaJnaJnaJraJqaJqaJCaPZaPYaQbaQaaQbaQbaQcaKMaQeaQdaQgaPwaQiaPPaJIaJIaJIaJIaQkaQjaJIaJIaJIaJIaOXaQfaQmaQmaQmaQmaQhaOXaIqaIoaFuaQpaItaYWaOSaItaItaQqaFuaQraQtaQsaCRaFzaQvaQuaQwaQwaQyaQxaQAaQzaCRaQBaQCaTmaPqaPqaQFaQEaQEaQFcxgcxecxhcxhcrxcxicxkcxjcwLcxacrxaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawWaQGaylawVaPuaylaylaQHawVaylaQGaPuaylaylaylaQIaQJaQlaQoaQnaQDaQDaRdaQKaylaPzaQLaPzaQMaPAaQOaQNaQQaQPaQRaQNaQTaQSaQVaQUaQXaQWaPGaQYaRaaQZaPJaRbaPKaPKaRcaPKaPKaPQaPQaReaRfaPQaPQaPQaRhaJqaLXaJnaaaaaaaaaaaaaaaaaaaaaaPRaRjaRiaRlaRkaRnaRmaRpaRoaRraRqaRsaPRaaaaaaaaaaaaaaaaaaaaaaJnaJraJqaRtaJCaRuaQcaRwaRvaRvaRvaQcaKMaQeaRxaPYaQcaRzaRgaJIaRAaRCaRyaRDaRBaRGaRFaRHaJIaOXaREaRJaRJaRJaRJaRIaOXaIqaRKaFuaRNaRNaYWaOSaROaROaRPaFuaFuaRQaFuaCRaRRaPlaPkaRSaRSaPnaPmaCRaCRaCRaNaaRUaRLaNaaNaaNaaNaaNaaRWcxlcwUcwUcwUcxmcxjcxjcxjcwLcxacwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaawWaRXaRYaRYaRYaRYaRYaRYaRYaRYaRXaRYaRZaylaylaNhaylbcDaSbaylaSdaylaRMaSeaSfaPzaSgaPzaQMaPAaShaQNaQNaQNaQNaQNaQTaSjaQNaQNaQNaQWaPGaSkaRaaRaaPJaRbaPKaSlaSmaSmaSnaPQaRVaRTaScaSaaStaSsaJqaJqaLXaJnaaaaaaaaaaaaaPRaPRaPRaPRaSvaSuaSxaSwaSzaSyaSBaSAaSDaSCaSEaPRaPRaPRaPRaaaaaaaaaaaaaJnaJraJqaJqaOKaQcaQcaQcaQcaSoaSHaSGaSpaQeaQdaSqaQcaSFaQcaSIaVzaSKaSJaSMaSLaSOaSNaVzaSPaSRaSQaRJaSSaSTaRJaSUaOXaIqaIoaFuaItaItaYWaOSaItaItaItaTcaTbaItaTdaCRaTeaTgaTfaRSaRSaTiaThaTjaCRaTlaTkaQCaTmaPqaPqaTnaQEaQEaTocxncwLcxocwLcwLcwLcwLcwLcwLcxpcwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafarBarBawWawWawWawWawWawWawWawWarBarBasEaNhaTraTqaTqaTsaTqaTqaTqaTqaTtaTqaTqaPzaSgaTuaTvaPAaTwaQNaSVaTxaTAaTzaTCaTBaSiaQNaQNaTDaPGaTEaTGaTFaPJaRbaPKaTHaTJaTIaTKaPQaSWaTLaSXaSraTPaSsaJqaJqaLXaJnaJnaJwaTQaPRaPRaTRaTTaTSaTVaTUaTXaTWaTYaTXaTZaTXaTXaUaaUcaUbaUeaUdaPRaPRaTQaJwaJnaJnaJraJqaJqaJCaUfaQcaQcaQcaUgaUgaQcaQcaMxaSYaQcaSZaQcaTaaJIaVzaVzaTMaVGaTNaTOaVFaVzaUhaUiaVIaRJaUjaUkaRJaXoaUzaIqaIoaFuaUBaUBaYWaOSaUCaItaItaUDaItaUFaUEaCRaUGaUIaUHaRSaRSaUKaUJaFzaCRaULaPqaQCaTmaPqaPsaNaaNaaNaaNacwIcxkcwLcxqcxrcwLcxqcxrcwLcxscwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxucxucxvcxucxucxucxwcxucxucxxaaaawWaAFaymaUMaTqaUOaUNaUQaUPaUQaUlaUmaUQaTqaSgaSgaUSaUTaPAaUUaUnaUoaUVaUqaUpaUsaUraUuaUtaUvaQWaPGaPGaPGaPGaPJaRbaPKaPKaPKaPKaPKaPQaVaaSraUwaSraSraSsaJqaJqaLXaJsaJsaVbaVdaVcaPRaVeaVgaVfaViaVhaViaVjaVlaVkaVnaVmaVpaVoaVmaVqaVsaVraPRaVtaVdaVuaVvaJsaJraJqaJqaOKaQbaQcczOaQcaVxaVwaQcaQcaQeaVyaQcaQcaQcaQcaVAaVzaVzaVBaVEaVDaVGaVFaVHaJIaVJaVIaVKaRJaRJaRJaXoaVMaIqaUxaFuaFuaFuaYWaOSaVPaVQaItaVSaVRaLgaVTaCRaFzaTgaTfaRSaRSaVUaThaVVaCRaVWaPqaQCaTmaPqaPsaNaaaaaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxycxAcxzcxBcxBcxBcxBcxBcxBcxBcxvaWaawWawWazzaylaTqaUybaHaUAaUOaUWaURaUmaUQaTqaWjaWlaWkaPzaPAaWnaTyaUXaWoaWqaWqaUYaWqaWqaWqaWpaUZaPAaWuaWwaWvaVCaWxaWAaWzaWBaPzaWCaPQaWEaWDaWGaWFaWFaSsaJqaJqaJqaJqaJqaWHaWJaWIaWLaWKaWNaWMaWPaWOaWRaWQaWTaWSaWVaWUaWXaWWaWYaWMaXaaWZaXcaXbaXeaXdaXgaXfaXhaJqaJqaJCaXiaQcaQcaQcaRwaRvaQcaQcaQeaVyaXjaVyaXlaXkaJIaVzaVzaVzaXmaVzaVzaVFaXnaJIaOXaVIaRJaRJaRJaRJaXoaOXaIqaVLaVOaVNaVZaVYaWbaXuaXuaWdaYWaYWaYWaYWaWeaRSaRSaRSaRSaRSaWgaXzaXBaXyaXDaXCaXFaWhaOUaXGaNaaafaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxtcxycxAcxzcxBcxBcxBcxBcxBcxBcxBcxvaWaawWawWazzaylaTqaUybaHaUAaUOaUWaURaUmaUQaTqaWjaWlaWkaPzaPAaWnaTyaUXaWoaWqaWqaUYaWqaWqaWqaWpaUZaPAaWuaWwaWvaVCaWxaWAaWzaWBaPzaWCaPQaWEaWDaWGaWFaWFaSsaJqaJqaJqaJqaJqaWHaWJaWIaWLaWKaWNaWMaWPaWOaWRaWQaWTaWSaWVaWUaWXaWWaWYaWMaXaaWZaXcaXbaXeaXdaXgaXfaXhaJqaJqaJCaXiaQcaQcaQcaRwaRvaQcaQcaQeaVyaXjaVyaXlaXkaJIaVzcACaVzaXmaVzaVzaVFaXnaJIaOXaVIaRJaRJaRJaRJaXoaOXaIqaVLaVOaVNaVZaVYaWbaXuaXuaWdaYWaYWaYWaYWaWeaRSaRSaRSaRSaRSaWgaXzaXBaXyaXDaXCaXFaWhaOUaXGaNaaafaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxDcxCcxCcxCcxCcxCcxCcxCcxCcxCcxCcxEaXIauPaXIaylaylaTqaWmaWiaWraXLaXLaWsaWtaXNaTqaXPaSgaWkaXQaXQaXQaWyaXpaXQaXsaXraXvaXtaXwaXwaXAaXxaPAaYaaYcaYbaXJaXEaXMaXKaYhaYgaYgaYiaYiaYiaYiaYiaYjaPQaJqaJqaYlaYkaYnaYmaYpaYoaPRaYqaYsaYraYuaYtaYvaYvaYxaYwaYzaYyaYBaYAaYCaYraYDaYqaPRaYoaYpaYEaYFaYkaYGaJqaJqaOKaQcaQcaQcaQcaQcaQcaQcaQcaXOaPYaYIaPYaQcaQcaYKaYJaYLaVzaVzaVzaVzaYMaYNaJIaYPaYOaRJaYQaYQaYRaYOaYTaXSaXRbdpbdpaXTaYYaXUaYWaYWaXVaYWaYWaYWaYWaWeaXWaZfaZfaZfaZfaZfaZgaZhaZeaZjaZiaZlaZkaPqaZmaNaaaaaafaaacrxcxkcwLcxqcxrcwLcxqcxrcwLcxscrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxGcxFcxHcxHcxIcxIcxIcxIcxIcxIcxIcxvawWawWawWazzaWcaXXaWfaXYaXZaXZaXZaXZaYdaUOaTqaZraZsaWkaXQaZtaZvaYebaOaXQaYHaZxaYSaPAaZBaZAaYXaYUaPAaZDaZFaZEaYZaZEaZEaZaaZEaZEaZIaZHaZHaZHaZJaZHaZLaZKaLYaLYaZNaZMaZMaZMaZMaZMaZMaZOaZQaZPaYtaYxaZSaZRaZRaZTaZRaZRaZUaYzaYAaZVaZXaZWaZVaZVaZVaZVaZVaZVaZYaLYaLYaJCbaaaZZbacbabaQcaQcaQcbadaZbbaeaQcbagbaibahaJIaJIaJIbajbakbakbakaJIaJIaJIbalaRJaRJbambambanbapbamaIqaZcaYVbaraFubasbaubataVQaItbaxaUDaVQaZdaCRbazaFzbaAaRSaRSbaAaFzbaBaCRbaDbaCbaEaTmaPqaPsaNaaNaaNaaNacwIcxkcwLcxqcxrcwLcxqcxrcwLcxscwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxGcxucxucxvcxucxucxucxwcxucxucxJaaaawWbaFaPubaGaTqaUQbaHaUQaUObaJaUQaZnaUQaTqbaLbaNbaMaXQaXQaXQaZwaZoaXQaZxaZxaZxaPAaZBaZAaYXaYUaPAaZDaZFaZEaZpbaSbaSbfibaUaZEbaWbaVbaYbaXaZKaZKaZKaZKaJqaJqaYlaZMaZuaZqaZzaZybbXaZCbbibbhbbkbbjaZRaZRbbmbblbbmaZRaZRbbnbbpbbobafaZGbaqbaobbvbbubbwaZVaYGaJqaJqaJCaJCaJCaJCaJCbbxaOKbbxbbyaJCaJCaJCaJCaJCaJCaJIbbzbbzbbzbbzbbzbbzbbAbbzaJIbambbBbbBbamaYVaYVaYVaYVaIqaZcaYVbaraFuaFuaFubbDaFubbDaFubbDaFuaFuaCRaCRbbFbbFbbFbbFbbFbbFaCRaCRbbGaPqbbHaTmaPqaPqaToaQEaQEaTocxKcwLcxLcwLcwLcwLcwLcwLcwLcxpcwIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6915,13 +6934,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasEawWbeKawWazzaylaylazAawWbeLawWazBbeNbeMbeMbeObeQbePbeSbeRbeUbeTbdubdtbdBbdBbdDbdCaXQaXQaXQbfabfbaXQaPzaPzaPzaPzbfcaWvbfdbfeaWvbffaZFaZEbfgbaSbaSbdEbaSaZEbfjaZKbfkbbRbcUbbRbfnbfmbfoaJqaYlaZMbbXbfpbcabdFbdKbdIbcdbfrbfsaYvbfubftbfvbfvbfvbfwbfxaYBbfzbfybfBbfAbfCbbwbfDbbwbfEaZVaYGaJqaJqbfFbfFbfFbfFbfFbfFbfFbfHbfGbfGbfGbvkbfJbfHbfKbfKbfKbfKbfKbfLbfLbfLbdNbfLbfLbfLbfLbfOaYVbeEbfPbfSbdObdPaYVaYVaYVbfUbfUbfVbfVbfVbfVbfVbfWbfXbfXbfXbfYbfXbfZbgabfXbfXbgbbgcbgcbgcbgcbgebgdbggbgfaNaaafaaaaaacwIcxUcxUcxVcxVcwIcxccxacxacxScrxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaACarBaADauPawWaAFaAEbgibghawWauPaADawWarBaACasEbeObgkbgjbgjbgjbglbdQbdTbdRaWvaWvbeabdZaXQaZtbgrbfabgsaXQbgtbgtaSgbelbewaYbbgwbgxbgxbgxbgyaZEbgAbexbeDbeAckQbgBbgCaZKbgDbbRbeFbkMbeWbeVbkSbeXbgGaZMbgHaZPbgJbgIbgLbgKbcdbgMaZMaafbgObgNbgNbgNbgNbgNbijaafaZVbgSbgUbgTbgVbbwbgWbbwbgXaZVaYGaJqbgYbfFbhabgZbhcbhbbhdbfFbhfbhebhebhebiubhhbhhbhibhkbhjbhlbfKbhnbhmbeYblrbhmbhpbhqbfLbfSbhrbfSbfSbfSbPvbdPbfTbhtbfTbhubhubfVbhvbhxbhwbfVbhybhzbhybfVbhAbhBbhAbgcbhCbhDbhCbgcbhEbhFbgcbhHbhGaNaaNaaNaaafaafaaacxWcwVcxXcxXcxXcxXcxXcxXcxXcwVcxYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaafaafaafaafawWbeKawWawWawWawWawWawWbeLawWaafaafaafaaabeObhIbeObhJbgjbhLbeZbeOaSgaTubfhbfqbhObhQbhQbhQbhQbhQbhQbhSbhRbhTbfIbfMaZEaZEaZEaZEaZEaZEaZEbhWbhYaZEaZEaZEbhXbiabhZbfNboUbmiboUbfRbfQbgnbgmbidaZMbieaZPaZPaZPaZPbgKbcdbifaZMaafbgObgNbihbigbiibgNbijaafaZVbikbdkbilbimbbwbfDbbwbbwaZVaYGaJqaJqbfFbiobinbipbipbisbirbhhbitbhhbhhbiubhhbhhbhibixbiwbiybfKbizbhmbizbhobizbiBbhmbfLbiCbiCbiEbiDbfSbgobdPbiGbiIbiHbiJbiJbfVbiKbiMbiLbiObiNbiQbiPbfVbiRbgpbiSbgcbiUbiVbiUbiXbiWbiWbgcbiYbhGaaaaafaaaaafaaaaaaaaacxWcxZcxZcxZcxZcxZcxZcxZcxYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacybaaaaaaaaaaafaaaaaacyacydcyccyccyccyccyccyccyecybaaaaafaafaaabeObjbbjabjdbjcbjcbjebjfaYfbjgaPzbjibjhbjjbjjbjjbjkbjkbjkbjkbjkbjkbgqbjlaZEbjnbjmbjpbjobjrbjqbjtbguaZEbjubgzbgvaZKaZKbgEbbRbflbbRbbRaZKbfoaLxaYlbjzbjBbjAbjDbjCaZPbjEbcdaZMaZMaafbgObgNbigbgNbigbgNbijaafaZVaZVbjFbejbjGbbwbjIbjHbjJaZVaYGaJqaJqbfFbgFbinbgPbjObjRbjQbhhbjSbjUbjVbjTbgQbhgbhibjXbhsbjYbfKbizbhmbizbhobizbiBbkbbfLbkdbkcbkfbkebfSbPvbdPbkgbkhbkhbhMbhKbklbkkbkmbhPbiLbiLbiLbkobfVbkqbhUbkrbgcbksbiWbiWbhVbkvbibbgcbiYbhGbkybkybkybkyaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyfcygcybaaaaaaaafaafcyacyhcyicyicykcyjcyicyicyicyicylaaaaafaafaaabeObkzbeObkBbkAbkAbkCbeObkDbkDaPzbkFbkEbkFbkFbkFbkEbkFaPzaPzaZEaZEbhYbkGaZEbjrbjrbjrbjrbjrbjrbiqbicbiAbivbiTbiFbjsbkMbjvbkMbjwbbRbqsaZKbfobjxbBibkTbkWbkVbkYbkXaZPbgKbcdaZMaafaafbmubmvbiibkZbihbjybgRaafaafaZVblcblbaZVaZVaZVaZVbldaZVbleaJqaJqbfFblfbjKbjLbipbisblhbhhbliblkbljblmbllblnbfKblpbjMbjNbfKbizbhmbizbhobizbiBbhmbfLbfSbfSbfSbfSbfSbPvbdPblublwblvbjWbjPblAblzblCblBblBbnibiLblEbfVbjZbhUblHbgcblIblKblJbkablLbkibgcbiYblOblQblPblRblPaaaaaaaafaaaaafaaaaafaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyncybaaaaafcyacypcyhcyicyicyicyicyicyicyicyqcyrcyccybaafaaabeOblSbjablTbkAblVblUbeOaaaaaaaaacytcyscyscyscyscyscyuaaaaaablWblYbkjbkpbknbktbjrbjrbjrbjrbjrbjrbkubmgbmfboUbkwbkxbfQbkHbfmbmkaZKbmlaZKbmnbmmaLYbjzbmpbmobmobmobmobmqbmsbmraafaaabgObkIbgNbgNbgNbmwbijaaaaafbmxbmzbmybmBbmAbmCbmxbmDbmxbmEaJqbAibfFbmFbkKbkLbmGbmIbfFbmJbliblkbmKbmLbhhbmMbfKbmObmNbkObfKbmRbkPbkRbkQblabkUblablgbKHblobKHbKHbKHblqbdPbnbbiIblsblxbltblDblyblGblFblFblMblNbnjbfVbvxblXbnmbgcbnnbnpbnoblZbiWbmabgcbmdbmcbmebnsbnsbnsbnsbnsbnsbnuaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacybaaaaaaaaaaafaaaaaacyacydcyccyccyccyccyccyccyecybaaaaafaafaaabeObjbbjabjdbjccADbjebjfaYfbjgaPzbjibjhbjjbjjbjjbjkbjkbjkbjkbjkbjkbgqbjlaZEbjnbjmbjpbjobjrbjqbjtbguaZEbjubgzbgvaZKaZKbgEbbRbflbbRbbRaZKbfoaLxaYlbjzbjBbjAbjDbjCaZPbjEbcdaZMaZMaafbgObgNbigbgNbigbgNbijaafaZVaZVbjFbejbjGbbwbjIbjHbjJaZVaYGaJqaJqbfFbgFbinbgPbjObjRbjQbhhbjSbjUbjVbjTbgQbhgbhibjXbhsbjYbfKbizbhmbizbhobizcAEbkbbfLbkdbkcbkfbkebfSbPvbdPbkgbkhbkhbhMbhKbklbkkbkmbhPbiLbiLbiLbkobfVbkqbhUbkrbgcbksbiWbiWbhVbkvbibbgcbiYbhGbkybkybkybkyaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyfcygcybaaaaaaaafaafcyacyhcyicyicykcyjcyicyicyicyicylaaaaafaafaaabeObkzbeObkBcAFbkAbkCbeObkDbkDaPzbkFbkEbkFbkFbkFbkEbkFaPzaPzaZEaZEbhYbkGaZEbjrbjrbjrbjrbjrbjrbiqbicbiAbivbiTbiFbjsbkMbjvbkMbjwbbRbqsaZKbfobjxbBibkTbkWcAGbkYbkXaZPbgKbcdaZMaafaafbmubmvbiibkZbihbjybgRaafaafaZVblcblbaZVaZVaZVaZVbldaZVbleaJqaJqbfFblfbjKbjLbipbisblhbhhbliblkbljblmbllblnbfKblpbjMbjNbfKbizcAHbizbhobizbiBbhmbfLbfSbfSbfSbfSbfSbPvbdPblublwblvbjWbjPblAblzblCblBblBbnibiLblEbfVbjZbhUblHbgcblIblKblJbkablLbkibgcbiYblOblQblPblRblPaaaaaaaafaaaaafaaaaafaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyncybaaaaafcyacypcyhcyicyicyicyicyicyicyicyqcyrcyccybaafaaabeOblSbjacAIbkAblVcAJbeOaaaaaaaaacytcyscyscyscyscyscyuaaaaaablWblYbkjbkpbknbktbjrbjrbjrbjrbjrbjrbkubmgbmfboUbkwbkxbfQbkHbfmbmkaZKbmlaZKbmnbmmaLYbjzbmpbmobmobmobmobmqbmsbmraafaaabgObkIbgNbgNbgNbmwbijaaaaafbmxbmzbmybmBbmAbmCbmxbmDbmxbmEaJqbAibfFbmFbkKbkLbmGbmIbfFbmJbliblkbmKbmLbhhbmMbfKbmObmNbkObfKbmRbkPbkRbkQblabkUblablgbKHblobKHbKHbKHblqbdPbnbbiIblsblxbltblDblyblGblFblFblMblNbnjbfVbvxblXbnmbgcbnnbnpbnoblZbiWbmabgcbmdbmcbmebnsbnsbnsbnsbnsbnsbnuaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyncybcyacypcywcylcyxcyicyicyicyicyicyicyicyzcyycyAaafaaabeObnvbjabjabjabeObeObeOaaaaaaaaacyCcyBcyBcyBcyBcyBcyCaaaaaablWbnwbqmbmjbmhbmhbmhbmhbmhbmhbmhbmhbmhbmHbmtbmPbnEbmQbnGbfmbnIbbRbnJbnLbnKbfobnMbnNbjzbjzbmrbnPbnObnRbnQbnSbmraaaaaabgObnTbnVbnUbnVbnWbijaaaaaabmxbnYbnXbnZbmxboabmxbmDbmxbmEaJqbmSbfFbobbkKbmTbipbodbfFbofboebohbogboibhhbojbfKbhibokbmUbfKbfLbmVbfLbmWbmYbmXbmZbmZbmZbmZbmZbmZbmZbnabncbopblwblvbnebndbotbosboubouboubnibiLbovboxbozbowboyboBboAbngbnfbnkbnhbnlbgcbnrbnqbnxboFboFboFboFboFboHbhGbkybkybkyaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyvcyrcygcywcyicylcyxcyicyicyicyicyicyDcypcyccygcyEcybaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyCboIblWblWboJbqmbjrbjrboKboKboKboKbjrbjrbjrbjrbkJboNbuFbnybnAbnzboSboRboTbbRbbRbnKboWboVboYboXbpaboZbpcbpbbpebpdbpfbmraafaaabgObpgbphbphbphbpibijaaaaafbmxbpkbpjbplbmxbpmbmxbmDbmxbpnaJqbmSbfFbnBbkKbnDbnCbptbfFbpublibiubogbpwbpvbofbofbpybpxbnHbnFbolbocboobomboqbpEbpHbpGbpJbpIbpLbpKbonbPvboCborboEboDboLboGbfVbpRbouboubpTbnibiLbpUbpWboMboObpXboBbpZboQboPbpobiWbpqbppbprbgcbqebqebqebqebqebqebiYbhGbqhbqgbkybkyaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywcyLcyLcyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacypcyccyhcyicyicyicyMcygcyccyccyecyEcypcywcyicyOcyOcyPcylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyQbrJbrKbrJbrLbjrbjrbjrboKboKboKboKbjrbjrbrNbrMaZEbrObbRbtvbpBbqpbfmbqsbbRbbRbbRbqubmEbrTaJqbqvbqybrUbrWbqqbqqbqrbrZbmraafaafbsbbsabsdbscbsfbsebsgaafaafbshbsjbsibslbskbsnbsmbsobqHbspaJqbqNbqMbqRbqObqTbqSbqVbqUbsybqXbqYbsxbsxbsxbsxbsxbrgbrfbsxbsxbsxbrhbhgbribrjbpEbsKbrkbsLbsLbsNbpKbonbPvbdPbsObsQbsPbsRbsRbfVbsSbCIbsTboxbrlbiLbsWboxbsXbsZbrmbtbbtabrobrnbrpbtebthbrrbtjbrubrwbrvbrvbrvbrPbrybrQbhGbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacypcyccyhcyicyicyicyMcygcyccyccyecyEcypcywcyicyOcyOcyPcylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyQbrJbrKbrJbrLbjrbjrbjrboKboKboKboKbjrbjrbrNbrMaZEbrObbRbtvbpBbqpbfmbqsbbRbbRbbRbqubmEbrTaJqbqvbqybrUbrWbqqbqqbqrbrZbmraafaafbsbbsabsdbscbsfbsebsgaafaafbshbsjbsibslbskbsnbsmbsobqHbspaJqbqNbqMbqRbqObqTbqSbqVbqUbsybqXbqYbsxbsxbsxbsxbsxbrgbrfbsxbsxbsxbrhbhgbribrjbpEbsKbrkbsLbsLbsNbpKbonbPvbdPbsObsQbsPbsRbsRbfVbsSbCIbsTboxbrlbiLbsWboxbsXbsZbrmbtbbtabrobrnbrpbtebthbrrbtjbrubrwbrvbrvbrvbrPbrybrQbhGbtqbtpcAKbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcygcywcyicylcyicyicyicyicyicyicyicyicyMcyhcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyScyCboIblWblWbtrbjrbjrbjrbjrbjrbjrbjrbjrbjrbrNbtsaZEbttbtubjvbrRbkMbkNbkMbuIbbRbtybnKbtzbrTaJqbqvbqybmrbtBbrSbtDbtCbtEbmraaaaaaaafbgObtGbtFbtGbijaafaaaaaabshbtIbtHbtKbtJbtLbtLbtNbtMbtObAkaNrbrVbrXbLXbFDbrYbEebsqbEebEebssbsrbtXbtVbtVbtVbtZbhhbhhbhhbstbuabuabsubpEbpEbpEbsvbugbufbrebpKbonbdObdPbuhbuhbuhbuhbuhbfVboxboxboxboxbujbswbujboxbszcdXbsAbuobuobuobsCbsDbupbusbsEbuubsFbuwbuvbuvbsGbsIbsHbsMbsJbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcyccyccyccyccyccyccyccyEcybaaacyacypcywcyicyicyicylcyicyicyDcyccyccyecyKcyicyicylcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyTbrJbrKbrJbnwbuBbjrbjrbuCbjrbuBbjrbjrbjrbrNbuDaZEbuEbbRbtvbsVbbRbfmbbRbbRbbRbuJbnKbtzbrTaYlbqvbuKbmrbuMbsYbuObuNbnSbmraaaaaaaafbuPbuQbphbuSbuRaafaaaaaabshbtdbtcbuWbuVbuYbuXbuZbqHbvaaJqaJqbofbofbtfbJGbwzbBLbvjbvhbtgbtgbvhbvjbvhbvjbvhbvjbvhbvjbfJbfJbuabvnbsLbtkbtibpEbsvbtlbvsbvvbvubonbtmbtobtnbtxbtwbuobuobtAbuobuobtPbtSbtQbtUbvEbuobtWceXbvHbvJbvJbvJbvKbvKbvKbvKbvKbvMbtYbvObvNbvObvPbvObqebuzbhGbvQbrGbvRbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacypcywcyicyicyicyicyicyicyicyMcypcyccypcywcyicyicyicyicyUcyicyicylcyVcyWcyicylcyicyicyRcyicyicyicyXcyYcyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyZbvSbvTbvSbvVbvUbvVbvVbvVbvVbvVbubbvXbjrbrNbvYaZEbvZbbRbucbwcbudbwebwdbwdbwdbwebwebwfbrTaKFbwgbqybmrbwibuebwkbwjbwlbmraaaaaaaafbwmbwnbscbwpbwoaafaaaaaabshbwrbwqbwtbwsbuYbuXbuZbqHbwuaJqaJqbwvbwxbuibJGbwybwAbvjbwCbDRbukbwDbwGbwFbwIbwHbwIbwJbvjbhhbhhbuabwLbsLbumbulbuqbunbutburburbuxbuGbuybuLbuHbuUbuTbxdbvbbxdbxdbvcbxdbxdbvebxebxdbxdbxfbvgbvfbvJbCkbxjbxibxlbxkczPbvKbxobxnbxqbxpbxrbxnbxsbqebuzbhGbxtbtpbtpbkyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6931,7 +6950,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczjcygcyccyccyccyccyccyccyccygczkaaacz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczjcygcyEcyKczrcylcyicyicyMcyecyccyccywcyicyicylcyXcyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczscztcztcztczuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxubASbydbycbylbygbynbymbGmbyybyGbGmbyJbyHbyTbyObBfbwebBhbBgbBibBibBibBjbBibBibBkbBibBlaJqbyVbyUaJqaMhbBqbBpbBsbBrbBubBtaXfaXfbBvaXfbBxbyWaXfbBybBAbBzbBBaJqaJqbvjbyZbyYbzbbvhbvhbvjbvhbzcbvhbvjbvjbvjbvjbvjbvjbvjbvjbhhbhhbhhbBJbzdbBLbBKbBNaFabBPbBObBQbBNbzgbnabzkbyfbBTbBSbBVbBUbBXbBWbyfbBYbCabBZbCcbCbbykbzEbzBbzAbvKbCfbChbCgbCjbCiaGsbytbzObzObzObClbzObzObzObqebuzbrEbCmbrGbrIbkyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczjcypcyccyhcyicyicyicyicyicyicyicyicyicylcyXcyicyicyicyicylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxubxubxxbxxbxxbxxbxubxubCobBabvIbzFbwebwebwebwebwebwebCrbCqaJwaJwaJwaJwbCsbCsbCsbCsbCsbCsbCsbCsbCsbCsbCuaHPbzGbCvbCvbCvbCvbCvbCxbCvbCvbCvbCvbzsbCzbzsaJvaKGbCAbvjbzIbzHbzKbCDbzSbvjbCGbDRbzUbCQbzWbzVbCMbCLbCObCNbCQbzXbhhbhhbhhbhhbhhbwzbEibCYbCZbCYbDabBNbLSbPvbDbbDbbDbbDbbDbbDbbDbbDbbDbbDcbDcbDcbDcbDcbDcbDdbAabzZbvKbvKbvKbvKbvKbvKbvKbytbqebqebqebqebqebqebqebqebuzbhGbDhbDgbkybkyaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyfcycczvcyvcyHcyicyicyicyicyicyicyIcyiczwcylcyXcyiczxcyicyDcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDiaaaaaaaaaaafaaaaaabxybDkbAbbAmbAcbAcbAnbAxbAobAJbAIbAKbCqaaaaaaaafaaabCsbDvbDxbDwbDzbDybAMbALbFabCsbAObANbAPbCvbATbDHbDKbDJbDMbAUbDLbAVbDPbDObDQbzsbzsbzsbzsbvjbAXbAWbBbbAYbBcbvdbBdbDZbBebDWbDZbDZbDZbxObDRbEabEdbBmbtVbtVbBnbtTbBCbBwbEibEhbEkbEjbElbBNbLSbPvbDbbEmbEmbEmbEnbEmbEmbEmbDbbEobEobEpbEobEobDcbEqbBEbBDbEtbEsbEvbEubExbEwbBFbEybEBbEAbEDbECbEFbEEbEGbEGbEIbEHbEsbEsbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyvcyrcyEcyEcyEcyecyccyccyRcyRcyRcygcyccyKczycyDcypczkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajYbEJajXbEJajZaaaaafaaabxybxybEKbzYbBGbGmbBIbBHbTEbTEbCebCdbCnbDtaafbEUbEWbEVbEYbEXbFabEZbFabFbbFabFabFabCsbFdbQgbCpbCvbDLbFfbFibCtbCwbFgbFkbCvbCvbFlbFnbFmbFpbFobCCbCBbCFbCEcpGbCHbCJbFubFwbCKbCSbCPbCTbzfbDRbDRbDRbFAbofbofbofbofbofbCUbCVbJGbEibCWbFGbCYbFHbBNbLSbPvbDbbEmbEmbEmbEmbEmbEmbEmbDbbFIbDebCXbDjbDfbJRbDlbDmbBDbDnbGcbFUbFUbFUbFUbFUbFUbFWbFVbFXbECbkybFYbGabFZbFZbGbbGdbGcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbGebGfbGeaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyvcyrcyEcyEcyEcyecyccyccyRcyRcyRcygcyccyKczycyDcypczkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajYbEJajXbEJajZaaaaafaaabxybxybEKbzYbBGbGmbBIbBHbTEbTEbCebCdbCnbDtaafbEUbEWbEVbEYbEXbFabEZbFabFbbFabFabFabCsbFdbQgbCpbCvbDLbFfbFibCtbCwcALbFkbCvbCvbFlbFnbFmbFpbFobCCbCBbCFbCEcpGbCHbCJbFubFwbCKbCSbCPbCTbzfbDRbDRbDRbFAbofbofbofbofbofbCUbCVbJGbEibCWbFGbCYbFHbBNbLSbPvbDbbEmbEmbEmbEmbEmbEmbEmbDbbFIbDebCXbDjbDfbJRbDlbDmbBDbDnbGcbFUbFUbFUbFUbFUbFUbFWbFVbFXbECbkybFYbGabFZbFZbGbbGdbGcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbGebGfbGeaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvczzczkczjcypcyhcyicyicyiczAcyicyicyicyicyMcyEcypczkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakDbGgbGhbGgakDbGibGibGibxybGjbyEbBabDobyEbGnbxybCqbGobCqbCqbGqbGpaaabGrbGtbGsbGubFabFabGvbFabGwbGybGxbFabCsbFdbQgbDpbCvbDqbGBbGEbGDbDrbFgbDsbCvbAwbGHbGJbGIbGJbDubDAbCPbDBbFvbDCbDRbukbvjbDDbFybDEbvjbGRbDRbDRbDRbDRbGSbofbGTbGVbGUbDFbCRbDNbDIbDUbDSbCYbGZbHbbHacbQbDVbDbbEmbEmbEmbEmbEmbEmbEmbDbbHebDYbDXbEcbEbbEgbEfbErbBDbEzbHmbFUbFUbFUbFUbELbFTbFTbFTbFTbEMbEObENbHsbHrbHubHtbHvbGcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbGfbGebHwbGebGfaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyoczzczkaaaaaaczjcypcyKczBcyicyicyicyicyicyiczycyrczkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXamIbHxamIajXbGibHzbHybxybHAbyEbEQbyEbyEbGnbxybHDbHCbHEbCqbGqbGpaafbGrbHGbHFbHIbHHbHJbHHbHHbERbFcbETbETbFebFjbFhbFqbCvbCvbCvbCvbCvbCybFsbCvbCvbHVbHUbHXbHWbHZbFtbFxbvjbFBbFzbIdbIcbFCbvjbFJbFFbFKbvjbIjbIibIlbIkbInbImbofbIobIpbqQbIrbqQbFMbFLbFObFNbFPbFEbIwbBNbLSbPvbDbbDbbIxbEmbEmbIybIxbDbbDbbIzbIBbIAbIAbICbDcbFQbFRbBDbFSbGcbFUbFUbGlbGkbGzbFUbFUbGAbGFbGCbGKbGGbGLbISbIVbIUbIWbGcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbIXbGfbIYbJabIZbGfbIXaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyEczkaaaaaaaaaaaaczjcygcyEcyKcyiczCcyicyicyDcycczkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakDamIamIamIbJcbJbbyEbyEbJdbHAbyEbGMbyEbyEbGnbxybJebHEbJfbCqbGqbGpaaabGrbJhbJgbJibFabFabJjbFabJkbJmbJlbJnbCsbJpbGNbGObJqbJsbJsbJsbJsbGPbJtbJsbJsbJwbJvbJybJxbJAbGQbGWbvdbvdbvdbvdbvdbvdbvdbvdbvdbvdbJCbJCbJCbJCbJCbJCbJDbJEbofbofbofbofbGXbtRblibBNbBNbBNbBNbBNbBNbLSbPvbDbbJHbJJbJIbJLbJKbJMbJHbJNbIzbIBbIAbIAbGYbDcbHcbHfbBDbJTbEsbJVbJUbJXbJWbJZbJYbFUbHgbKabECbKcbKbbKdbEsbKfbKebKebEsaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbGfbGfbKhbKgbKgbKgbKibGfbGfaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6947,30 +6966,30 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVaoVbVwapQapQbVxaoVbCqbCqbCqbCqbCqbCqbCqbCqbCqbCqbHEbHEbHEbHEbHEbHEbHEbUtbUsbUvbUubUxbUwbUwbUwbUwbNgbUzbUzbUzbUAbUzbUBbEPbEPbUDbCqbSAbLZbQgbUEbUGbUFbUHbTPbTPbUIbUJbTPbTPbUKbUMbULbOdbUNbUPbUObUQbOdbUSbURbUTbQyapQbQAbUVbUUbUWbOhbVubPnbUYbUXbUXbUXbUZbNcbVabOrbNibNhbNkbNjbWjbWjbWjbNlbNcbLTbDbbJNbJNbJNbJNbVibVjbTcbVkbVibJNbJNbJNbJNbJNbVlbVnbWrbQXbNmbXrbXrbXrbXrbNqbPKbUpbUpbVsbQZbVtbTqbTrbkybkybkyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZmbVzbVzbVzbVzcafcbjcbjcbkbVybVBbVAbVDbVCbVFbVEbCqbVGbLvbLvbLvbLvbLvbLvbLvbLvbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVLbVMbCqbSAbLZbQgbUEbVObVNbVQbVPbRAbVRbVSbRAbRAbVTbVVbVUbVXbVWbVZbVYbWabOdbUSbWbbWcbRIbVvbPjbWdbTWbTWbOhbVubPnbWebzsbzsbzsbPvbNcbWfbOrbOrbWgbNUbNsbWkbWjbWkbNWbNcbLTbDbbRTbRUbRUbWlbRVbMibRXbRZbWmbWnbEmbEmbEmbJNbWobWqbWpbWrbNXbWrbQXbQXbNZbOkbPNbUpbUpbUpbQZbVtbTqbTrbtpbtpbkyaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVapQbVwaoVapQaoVaoVbLvbLvbLvbHEbWwbWybWxbWAbWzbCqbHEbLvaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBbWDbWCbWFbWEbWGbWBbWIbWHbOobOlbVJbVJbVMbCqbWLbLZbQgbWMbWObWNbWNbWPbWQbWQbWQbWQbWQbWRbWSbMKbMKbMKbWTbOdbUObOdbUSbURbWUbQyapQbOhbOhbOhbOhbOhbVubPnbWebWVbAwbAwbPvbOjbWXbWWbWZbWYbXbbXabXcbWjbXcbXdbNcbLTbDbbEmbXebEmbXfbTabMibTcbMibTdbXgbEmbXebEmbJNbXhbXjbXibXlbTfbOwbOvbOvbOybOBbPKbXsbXrbXtbQZbUpbTqbXubkybtpbkybkybkyaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVapQbVwbVwbVwbVwbVwbXvbHEbXvbHEbXwbXxbWybXybHEbCqbHEbLvaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBbXAbXzbXCbXBbXDbWBbXFbXEbODbOCbOMbVJbVMbCqbSAbLZbQgbXJbXKbLKbXMbXLbWQbOObXPbXObWQbXQbSIbXRbMKbXSbWabOdbVZbXTbXUbTTbXVbPhbRKbPjbXXbXWbXYbOhbVubzsbWebzsbBRbXZbPvbNcbOPbYabYdbYcbWibYabYebWjbYebPubPwbLTbDbbEmbEmbEmbYgbYfbRZbUfbMibUgbYhbRUbRUbUibDbbQZbYjbYicaZbQZbQZbYkbYmbZdbPsbPbbPLbPFbPMbUpbUpbTqbTrbkybYrbkybYsbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVapQbVwbVwbVwbVwbVwbXvbHEbXvbHEbXwbXxcAMbXybHEbCqbHEbLvaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBbXAbXzbXCbXBbXDbWBbXFbXEbODbOCbOMbVJbVMbCqbSAbLZbQgbXJbXKbLKbXMbXLbWQbOObXPbXObWQbXQbSIbXRbMKbXSbWabOdbVZbXTbXUbTTbXVbPhbRKbPjbXXbXWbXYbOhbVubzsbWebzsbBRbXZbPvbNcbOPbYabYdbYcbWibYabYebWjbYebPubPwbLTbDbbEmbEmbEmbYgbYfbRZbUfbMibUgbYhbRUbRUbUibDbbQZbYjbYicaZbQZbQZbYkbYmbZdbPsbPbbPLbPFbPMbUpbUpbTqbTrbkybYrbkybYsbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVapQapQbLvbLvbLvbYubYtbYwbYvbYxbHEbYybHEbLvaoVaoVaoVaoVaoVaoVaoVbESbVHbVIbYzbYBbYAbXCbYCbYzbYzbXFbYDbQbbPQbQdbVJbVMbCqbSAbLZbYIbYHbYHbYJbYLbYKbYNbQebYPbQqbWQbOdbSIbYQbYRbXSbYSbOdbVZbXTbUSbURbYTbQyapQbQAbYVbYUbYWbOhbVubzsbWebzsbHZbHZbPvbNcbNdbYXbYYbNdbYZbNdbNdbNdbNdbNdbNcbLTbDbbJNbJNbJNbJNbVibZabTcbZbbVibJNbJNbJNbJNbDbbTlbZcbTlcbabTlbQZbYkbYmbYlbYobQGbQIbWrbZhbQZbUpbTqbTrbkybtpbtpbtpbZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbLvbZkbZjbZjbZlbWzbLubCqbLvbLvaoVcceaoVaoVaoVaoVaoVbGpbVHbVIbYzbYzbZnbZpbZobYzbZqbZsbZrbZvbQKbQPbVJbVMbCqbZxbQQbDGbYHbZzbRicewbRjbRmbRkbRSbRobWQbZFbZGbXRbMKbXSbZHbOdbZIbXTbUSbZJbZKbRIbVvbPjbZLbXWbXWbOhbVubPnbWebZMbzsbZNbPvbZObTZbTZbZPbNdbZRbZQbZSbzsbZUbZTbLSbLTbDbbRTbRUbRUbZVbRVbMibRXbRZbZWbZXbEmbEmbEmbDbbZYbTlbTlbTlbTlbQZbZZbZZcaacabbPNbPNbWrbPNbQZbPNbTqbTrbkycadcaccaebZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhbVubPncaJcaIbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhbVubPnbAwcbJbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhbVubzsbzsbWeccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhbVubzsbAwcdEcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpbtpbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhbVubzsbAwcdEcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhbVubzscaKceCceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQbVucfjcfjcfjcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQaoVcfVcfUcfXcfWcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQaoVcfjchhchjchichlchkchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQaoVcfjciyciAcizciCciBciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUczVczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQaoVcfjciyciAcizciCciBciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQapQcfjcjpcjrcjqcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVapQckfckecjrckgckickhckkckjcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVaoVcfjcldclfcleclhclgcljclicfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQapQcfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVaoVaoVaoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVaoVaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpbtpbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVaoVaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcpAcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVaoVaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcqGccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcqMcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 35bc1270beb..207c7d435cb 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -97,10 +97,10 @@ Passive gate is similar to the regular pump except: if(stat & (BROKEN|NOPOWER)) return ui_interact(user) -/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 400, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 335, 115) ui.open() /obj/machinery/atmospherics/components/binary/passive_gate/get_ui_data() @@ -158,7 +158,7 @@ Passive gate is similar to the regular pump except: on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("pressure") - switch(params["set"]) + switch(params["pressure"]) if ("max") target_pressure = MAX_OUTPUT_PRESSURE if ("custom") diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 5b2241598e8..90d7fff5d92 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -105,10 +105,10 @@ Thus, the two variables affect pump operation are set in New(): return ui_interact(user) -/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 400, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 335, 115) ui.open() /obj/machinery/atmospherics/components/binary/pump/get_ui_data() @@ -166,7 +166,7 @@ Thus, the two variables affect pump operation are set in New(): on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("pressure") - switch(params["set"]) + switch(params["pressure"]) if ("max") target_pressure = MAX_OUTPUT_PRESSURE if ("custom") diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 35a904c8163..0d5dfd6d139 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -102,10 +102,10 @@ Thus, the two variables affect pump operation are set in New(): return ui_interact(user) -/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 400, 115) + ui = new(user, src, ui_key, "atmos_pump", name, 310, 115) ui.open() /obj/machinery/atmospherics/components/binary/volume_pump/get_ui_data() @@ -164,7 +164,7 @@ Thus, the two variables affect pump operation are set in New(): on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("transfer") - switch(params) + switch(params["rate"]) if ("max") transfer_rate = MAX_TRANSFER_RATE if ("custom") diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index d1c0dafc97b..db33cde75e0 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -166,10 +166,10 @@ Filter types: return ui_interact(user) -/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_filter", name, 450, 145) + ui = new(user, src, ui_key, "atmos_filter", name, 430, 140) ui.open() /obj/machinery/atmospherics/components/trinary/filter/get_ui_data() @@ -189,7 +189,7 @@ Filter types: on=!on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("pressure") - switch(params["set"]) + switch(params["pressure"]) if("max") target_pressure = MAX_OUTPUT_PRESSURE if("custom") diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index fe603aac976..d20cd9c2109 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -129,10 +129,10 @@ return ui_interact(user) -/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_mixer", name, 450, 175) + ui = new(user, src, ui_key, "atmos_mixer", name, 330, 165) ui.open() /obj/machinery/atmospherics/components/trinary/mixer/get_ui_data() @@ -153,7 +153,7 @@ on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("pressure") - switch(params["set"]) + switch(params["pressure"]) if("max") target_pressure = MAX_OUTPUT_PRESSURE if("custom") diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index 9674aa921e1..a3697d2ac3c 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -110,10 +110,10 @@ return ui_interact(user) -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "cryo", name, 410, 550, state = notcontained_state) + ui = new(user, src, ui_key, "cryo", name, 400, 550, state = notcontained_state) ui.open() /obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data() @@ -152,11 +152,6 @@ data["isOpen"] = state_open data["cellTemperature"] = round(air_contents.temperature) - data["cellTemperatureStatus"] = "good" - if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celcius) - data["cellTemperatureStatus"] = "bad" - else if(air_contents.temperature > 225) - data["cellTemperatureStatus"] = "average" data["isBeakerLoaded"] = beaker ? 1 : 0 var beakerContents[0] @@ -171,17 +166,18 @@ return switch(action) - if("open") - open_machine() - if("close") - close_machine() + if("power") + if(on) + on = FALSE + else if(!state_open) + on = TRUE + if("door") + if(state_open) + close_machine() + else + open_machine() if("autoeject") autoEject = !autoEject - if("on") - if(!state_open) - on = 1 - if("off") - on = 0 if("ejectbeaker") if(beaker) beaker.loc = get_step(loc, SOUTH) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 2aa4dc062fd..809f9da7a0f 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -277,7 +277,7 @@ welded = 0 update_icon() pipe_vision_img = image(src, loc, layer = 20, dir = dir) - return 1 + return 0 else return ..() diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 65bdcf2c5e8..4aaae1ba502 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -309,7 +309,7 @@ welded = 0 update_icon() pipe_vision_img = image(src, loc, layer = 20, dir = dir) - return 1 + return 0 if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!(stat & NOPOWER) && on) @@ -321,4 +321,4 @@ return !welded #undef SIPHONING -#undef SCRUBBING \ No newline at end of file +#undef SCRUBBING diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index b4547824db6..6bbc0924dbe 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -24,8 +24,7 @@ if(update) update = 0 reconcile_air() - - return + update = air.react() var/pipenetwarnings = 10 diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 2701a64da59..3937282472f 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -152,3 +152,8 @@ #define PARENT2 parents[2] #define PARENT3 parents[3] #define PARENT_I parents[I] + +//Tanks +#define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3) +#define TANK_MIN_RELEASE_PRESSURE 0 +#define TANK_DEFAULT_RELEASE_PRESSURE 16 diff --git a/code/__DEFINES/nano.dm b/code/__DEFINES/nano.dm deleted file mode 100644 index 96bc05691a6..00000000000 --- a/code/__DEFINES/nano.dm +++ /dev/null @@ -1,15 +0,0 @@ - /** - * NanoUI Defines - * - * Contains all NanoUI state definitions. - * - * /tg/station user interface library - * thanks to baystation12 - * - * modified by neersighted - **/ - -#define NANO_INTERACTIVE 2 // Green/Interactive -#define NANO_UPDATE 1 // Orange/Updates Only -#define NANO_DISABLED 0 // Red/Disabled -#define NANO_CLOSE -1 // Closed \ No newline at end of file diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm new file mode 100644 index 00000000000..5ba0096d1be --- /dev/null +++ b/code/__DEFINES/tgui.dm @@ -0,0 +1,4 @@ +#define UI_INTERACTIVE 2 // Green/Interactive +#define UI_UPDATE 1 // Orange/Updates Only +#define UI_DISABLED 0 // Red/Disabled +#define UI_CLOSE -1 // Closed \ No newline at end of file diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 6aaf2fea7b1..4a32ac96510 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -127,12 +127,11 @@ var/const/tk_maxrange = 15 var/resolved = target.attackby(I, user, params) if(!resolved && target && I) I.afterattack(target,user,1) // for splashing with beakers - - else apply_focus_overlay() focus.throw_at(target, 10, 1,user) last_throw = world.time + user.changeNext_move(CLICK_CD_MELEE) return /proc/tkMaxRangeCheck(mob/user, atom/target, atom/focus) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 21bb4ef7d24..360f9833591 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -36,8 +36,8 @@ var/datum/subsystem/air/SSair /datum/subsystem/air/New() NEW_SS_GLOBAL(SSair) - plasma_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="plasma"}() - sleeptoxin_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="sleeping_agent"}() + plasma_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="plasma";appearance_flags=RESET_COLOR}() + sleeptoxin_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="sleeping_agent";appearance_flags=RESET_COLOR}() /datum/subsystem/air/stat_entry(msg) msg += "C:{" diff --git a/code/controllers/subsystem/nano.dm b/code/controllers/subsystem/nano.dm deleted file mode 100644 index e7ccd7f66dd..00000000000 --- a/code/controllers/subsystem/nano.dm +++ /dev/null @@ -1,30 +0,0 @@ -var/datum/subsystem/nano/SSnano - -/datum/subsystem/nano - name = "NanoUI" - wait = 10 - priority = 16 - display = 6 - - can_fire = 1 // This needs to fire before round start. - - var/list/open_uis = list() // A list of open NanoUIs, grouped by src_object and ui_key. - var/list/processing_uis = list() // A list of processing NanoUIs, not grouped. - var/html // The HTML template used by new UIs; minus initial data. - - -/datum/subsystem/nano/New() - html = file2text('nano/assets/nanoui.html') // Read the HTML from disk. - - NEW_SS_GLOBAL(SSnano) - -/datum/subsystem/nano/stat_entry() - ..("O:[open_uis.len]|P:[processing_uis.len]") // Show how many interfaces we have open/are processing. - -/datum/subsystem/nano/fire() // Process UIs. - for(var/thing in processing_uis) - var/datum/nanoui/ui = thing - if(ui && ui.user && ui.src_object) - ui.process() - continue - processing_uis.Remove(ui) diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm index ed73d3bfdd9..09cddb6daef 100644 --- a/code/controllers/subsystem/shuttles/emergency.dm +++ b/code/controllers/subsystem/shuttles/emergency.dm @@ -102,18 +102,21 @@ G.dom_attempts = min(1,G.dom_attempts) if(SHUTTLE_DOCKED) - if(time_left <= 0 && SSshuttle.emergencyNoEscape) - priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority") - sound_played = 0 - mode = SHUTTLE_STRANDED - if(time_left <= 50 && !sound_played) //4 seconds left - should sync up with the launch - sound_played = 1 + + if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch + sound_played = 1 //Only rev them up once. for(var/area/shuttle/escape/E in world) E << 'sound/effects/hyperspace_begin.ogg' + + if(time_left <= 0 && SSshuttle.emergencyNoEscape) + priority_announce("Hostile environment detected. Departure has been postponed indefinitely pending conflict resolution.", null, 'sound/misc/notice1.ogg', "Priority") + sound_played = 0 //Since we didn't launch, we will need to rev up the engines again next pass. + mode = SHUTTLE_STRANDED + if(time_left <= 0 && !SSshuttle.emergencyNoEscape) //move each escape pod to its corresponding transit dock for(var/obj/docking_port/mobile/pod/M in SSshuttle.mobile) - if(M.z == ZLEVEL_STATION) //Will not launch from the mine/planet + if(M.z == ZLEVEL_STATION) //Will not launch from the mine/planet(for some reason) M.enterTransit() //now move the actual emergency shuttle to its transit dock for(var/area/shuttle/escape/E in world) diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm new file mode 100644 index 00000000000..5b40ebbcacb --- /dev/null +++ b/code/controllers/subsystem/tgui.dm @@ -0,0 +1,30 @@ +var/datum/subsystem/tgui/SStgui + +/datum/subsystem/tgui + name = "tgui" + wait = 10 + priority = 16 + display = 6 + + can_fire = 1 // This needs to fire before round start. + + var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key. + var/list/processing_uis = list() // A list of processing UIs, not grouped. + var/basehtml // The HTML template used by new UIs; minus initial data. + + +/datum/subsystem/tgui/New() + basehtml = file2text('tgui/tgui.html') // Read the HTML from disk. + + NEW_SS_GLOBAL(SStgui) + +/datum/subsystem/tgui/stat_entry() + ..("O:[open_uis.len]|P:[processing_uis.len]") // Show how many interfaces we have open/are processing. + +/datum/subsystem/tgui/fire() // Process UIs. + for(var/thing in processing_uis) + var/datum/tgui/ui = thing + if(ui && ui.user && ui.src_object) + ui.process() + continue + processing_uis.Remove(ui) diff --git a/code/datums/beam.dm b/code/datums/beam.dm index 042882c0b22..6153e052217 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -19,13 +19,9 @@ /datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam) endtime = world.time+time origin = beam_origin - origin_oldloc = origin.loc - if(isarea(origin_oldloc)) - origin_oldloc = origin + origin_oldloc = get_turf(origin) target = beam_target - target_oldloc = target.loc - if(isarea(target_oldloc)) - target_oldloc = target + target_oldloc = get_turf(target) if(origin_oldloc == origin && target_oldloc == target) static_beam = 1 max_distance = maxdistance @@ -38,9 +34,11 @@ /datum/beam/proc/Start() Draw() while(!finished && origin && target && world.time < endtime && get_dist(origin,target)" + html += "[name] = \"[html_encode(value)]\"" else if (isicon(value)) #ifdef VARSICON @@ -405,7 +405,7 @@ body html += "" else - html += "[name] = [value]" + html += "[name] = [html_encode(value)]" html += "" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 915bf455b66..1ee1a3d01ea 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -63,7 +63,7 @@ /datum/mind/proc/transfer_to(mob/new_character) if(current) // remove ourself from our old body's mind variable current.mind = null - SSnano.on_transfer(current, new_character) + SStgui.on_transfer(current, new_character) if(key) if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours @@ -1576,5 +1576,4 @@ /mob/living/simple_animal/hostile/construct/mind_initialize() ..() mind.assigned_role = "[initial(name)]" - mind.special_role = "Cultist" - + mind.special_role = "Cultist" diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 10e43124d7f..f49079389da 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -20,9 +20,12 @@ user.say(message) else user.whisper(message) + var/my_message = "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]" for(var/mob/M in mob_list) - if(iscultist(M) || (M in dead_mob_list)) - M << "[(ishuman(user) ? "Acolyte" : "Construct")] [user]: [message]" + if(iscultist(M)) + M << my_message + if(M in dead_mob_list) + M << "(F)[my_message]" log_say("[user.real_name]/[user.key] : [message]") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 425a946adf8..a62e1726d33 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -461,8 +461,7 @@ continue //Dead mob, ghost abandoned else if(D.can_reenter_corpse) - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (This shouldn't appear.)\n" - continue //Lolwhat + continue //Adminghost, or cult/wizard ghost else msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n" continue //Ghosted while alive diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 6dbe8cb927c..96d454e6f6b 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -358,7 +358,7 @@ if(ganger.current && (ganger.current.z <= 2) && (ganger.current.stat == CONSCIOUS)) ganger.current << ping for(var/mob/M in dead_mob_list) - M << ping + M << "(F)[ping]" log_game("[key_name(user)] Messaged [gang.name] Gang: [message].") diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 3c638048061..6b1041d2d2e 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -111,7 +111,7 @@ module_name = "AI Turret Upgrade" mod_pick_name = "turret" description = "Improves the power and health of all AI turrets. This effect is permanent." - cost = 50 + cost = 30 one_time = 1 power_type = /mob/living/silicon/ai/proc/upgrade_turrets @@ -298,7 +298,7 @@ mod_pick_name = "overload" description = "Overloads an electrical machine, causing a small explosion. 2 uses." uses = 2 - cost = 15 + cost = 20 power_type = /mob/living/silicon/ai/proc/overload_machine @@ -327,7 +327,7 @@ mod_pick_name = "override" description = "Overrides a machine's programming, causing it to rise up and attack everyone except other machines. 4 uses." uses = 4 - cost = 15 + cost = 30 power_type = /mob/living/silicon/ai/proc/override_machine @@ -605,4 +605,23 @@ if(AM.mod_pick_name == href_list["showdesc"]) temp = AM.description src.use(usr) - return \ No newline at end of file + return + + +/datum/AI_Module/large/eavesdrop + module_name = "Enhanced Surveillance" + mod_pick_name = "eavesdrop" + description = "Via a combination of hidden microphones and lip reading software, you are able to use your cameras to listen in on conversations." + cost = 30 + one_time = 1 + + power_type = /mob/living/silicon/ai/proc/surveillance + +/mob/living/silicon/ai/proc/surveillance() + set category = "Malfunction" + set name = "Enhanced Surveillance" + + if(eyeobj) + eyeobj.relay_speech = TRUE + src << "OTA firmware distribution complete! Cameras upgraded: Enhanced surveillance package online." + verbs -= /mob/living/silicon/ai/proc/surveillance \ No newline at end of file diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 9d9457f7d7b..79a0ea87150 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -270,9 +270,13 @@ var/text = stripped_input(user, "What do you want to say your thralls and fellow shadowlings?.", "Hive Chat", "") if(!text) return + var/my_message = "\[Shadowling\] [user.real_name]: [text]" for(var/mob/M in mob_list) if(is_shadow_or_thrall(M) || (M in dead_mob_list)) - M << "\[Shadowling\] [user.real_name]: [text]" + M << my_message + if(M in dead_mob_list) + M << "(F)[my_message]" + /obj/effect/proc_holder/spell/self/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index c27fb9ecb99..29ab749d9c3 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -187,10 +187,10 @@ else if (!shorted) ui_interact(user) -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "air_alarm", name, 480, 660) + ui = new(user, src, ui_key, "air_alarm", name, 390, 590) ui.open() /obj/machinery/alarm/get_ui_data(mob/user) @@ -358,9 +358,9 @@ var/list/thresholds = list() var/list/gas_names = list( - "oxygen" = "O2", - "nitrogen" = "N2", - "carbon dioxide" = "CO2", + "oxygen" = "Oxygen", + "nitrogen" = "Nitrogen", + "carbon dioxide" = "Carbon Dioxide", "plasma" = "Toxin", "other" = "Other") for (var/g in gas_names) @@ -401,51 +401,50 @@ if (usr.has_unlimited_silicon_privilege && src.aidisabled) return + var/device_id = params["id_tag"] switch(action) - if("toggleaccess") + if("lock") if(usr.has_unlimited_silicon_privilege && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) locked = !locked - if("adjust") - var/device_id = params["id_tag"] - switch(params["command"]) - if("set_external_pressure") + if( + "power", + "co2_scrub", + "tox_scrub", + "n2o_scrub", + "widenet", + "scrubbing" + ) + send_signal(device_id, list("[action]" = text2num(params["val"]))) + if("excheck") + send_signal(device_id, list("checks" = text2num(params["val"])^1)) + if("incheck") + send_signal(device_id, list("checks" = text2num(params["val"])^2)) + if("external_pressure") + switch(params["pressure"]) + if("reset") + send_signal(device_id, list("set_external_pressure" = ONE_ATMOSPHERE)) + else if("custom") var/input_pressure = input("Enter target pressure:", "Pressure Controls") as num|null if(isnum(input_pressure)) - send_signal(device_id, list(params["command"] = input_pressure)) - if("reset_external_pressure") - send_signal(device_id, list("set_external_pressure" = ONE_ATMOSPHERE)) - if( - "power", - "adjust_external_pressure", - "co2_scrub", - "tox_scrub", - "n2o_scrub", - "widenet", - "scrubbing" - ) - send_signal(device_id, list (params["command"] = text2num(params["val"]))) - if ("excheck") - send_signal(device_id, list ("checks" = text2num(params["val"])^1)) - if ("incheck") - send_signal(device_id, list ("checks" = text2num(params["val"])^2)) - if("set_threshold") - var/env = params["env"] - var/varname = params["var"] - var/datum/tlv/tlv = TLV[env] - var/newval = input("Enter [varname] for [env]:", "Alarm Triggers", tlv.vars[varname]) as num|null - if (isnull(newval)) - return - if (newval<0) - tlv.vars[varname] = -1 - else if (env=="temperature" && newval>5000) - tlv.vars[varname] = 5000 - else if (env=="pressure" && newval>50*ONE_ATMOSPHERE) - tlv.vars[varname] = 50*ONE_ATMOSPHERE - else if (env!="temperature" && env!="pressure" && newval>200) - tlv.vars[varname] = 200 - else - newval = round(newval,0.01) - tlv.vars[varname] = newval + send_signal(device_id, list("set_external_pressure" = input_pressure)) + if("threshold") + var/env = params["env"] + var/varname = params["var"] + var/datum/tlv/tlv = TLV[env] + var/newval = input("Enter [varname] for [env]:", "Alarm Triggers", tlv.vars[varname]) as num|null + if (isnull(newval)) + return + if (newval<0) + tlv.vars[varname] = -1 + else if (env=="temperature" && newval>5000) + tlv.vars[varname] = 5000 + else if (env=="pressure" && newval>50*ONE_ATMOSPHERE) + tlv.vars[varname] = 50*ONE_ATMOSPHERE + else if (env!="temperature" && env!="pressure" && newval>200) + tlv.vars[varname] = 200 + else + newval = round(newval,0.01) + tlv.vars[varname] = newval if("screen") screen = text2num(params["screen"]) if("mode") diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 3d0cb1bd520..20eac90dae2 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -273,10 +273,10 @@ update_flag return ui_interact(user) -/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "canister", name, 470, 470, state = physical_state) + ui = new(user, src, ui_key, "canister", name, 405, 405, state = physical_state) ui.open() /obj/machinery/portable_atmospherics/canister/get_ui_data() @@ -304,7 +304,7 @@ update_flag switch(action) if("relabel") - if (can_label) + if(can_label) var/list/colors = list(\ "\[N2O\]" = "redws", \ "\[N2\]" = "red", \ @@ -320,7 +320,7 @@ update_flag src.icon_state = colors[label] src.name = "canister: [label]" if("pressure") - switch(params["set"]) + switch(params["pressure"]) if("custom") var/custom = input(usr, "What rate do you set the regulator to? The dial reads from [CAN_MIN_RELEASE_PRESSURE] to [CAN_MAX_RELEASE_PRESSURE].") as null|num if(custom) @@ -334,13 +334,13 @@ update_flag release_pressure = Clamp(round(release_pressure), CAN_MIN_RELEASE_PRESSURE, CAN_MAX_RELEASE_PRESSURE) if("valve") var/logmsg - if (valve_open) - if (holding) + if(valve_open) + if(holding) logmsg = "Valve was closed by [key_name(usr)], stopping the transfer into the [holding]
" else logmsg = "Valve was closed by [key_name(usr)], stopping the transfer into the air
" else - if (holding) + if(holding) logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the [holding]
" else logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the air
" @@ -356,7 +356,7 @@ update_flag valve_open = !valve_open if("eject") if(holding) - if (valve_open) + if(valve_open) investigate_log("[key_name(usr)] removed the [holding], leaving the valve open and transfering into the air
", "atmos") holding.loc = loc holding = null diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 8ae89897c73..cae5d5e445d 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -68,8 +68,10 @@ if(C) if ((get_dist(user, src) > 1 || user.machine != src || user.eye_blind || !( C.can_use() )) && (!istype(user, /mob/living/silicon/ai))) + user.unset_machine() if(!C.can_use() && !isAI(user)) src.current = null + return 0 else if(isAI(user)) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 8282a682489..55bfc93bc04 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -13,10 +13,10 @@ add_fingerprint(user) ui_interact(user) -/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) - SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/item/weapon/electronics/airlock/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) + SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "airlock_electronics", name, 975, 415, state = hands_state) + ui = new(user, src, ui_key, "airlock_electronics", name, 975, 420, state = hands_state) ui.open() /obj/item/weapon/electronics/airlock/get_ui_data() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index e231a84906a..366c3f56479 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -146,10 +146,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. for(var/mob/living/silicon/ai/master in masters) if(masters[master] && speaker != master) - raw_message = master.lang_treat(speaker, message_langs, raw_message, spans) - var/name_used = speaker.GetVoice() - var/rendered = "Holopad received, [name_used] [raw_message]" - master.show_message(rendered, 2) + master.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans) /obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) var/obj/effect/overlay/holo_pad_hologram/h = new(T)//Spawn a blank effect at the location. diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 698983bc823..c8471e64002 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -132,7 +132,7 @@ C.add_fingerprint(usr) user.visible_message("\The [user] inserts a power cell into \the [src].", "You insert the power cell into \the [src].") - SSnano.update_uis(src) + SStgui.update_uis(src) else user << "The hatch must be open to insert a power cell!" return @@ -150,16 +150,13 @@ /obj/machinery/space_heater/attack_hand(mob/user) interact(user) -/obj/machinery/space_heater/attack_paw(mob/user) - interact(user) - /obj/machinery/space_heater/interact(mob/user) ui_interact(user) -/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "space_heater", name, 490, 340, state = physical_state) + ui = new(user, src, ui_key, "space_heater", name, 400, 305, state = physical_state) ui.open() /obj/machinery/space_heater/ui_act(action, params) @@ -174,41 +171,24 @@ update_icon() if("mode") setMode = params["mode"] - if("temp") + if("target") if(panel_open) var/value - if(params["set"] == "custom") + if(params["target"] == "custom") value = input("Please input the target temperature", name) as num|null if(isnull(value)) return value += T0C else - value = targetTemperature + text2num(params["set"]) + value = targetTemperature + text2num(params["target"]) var/minTemp = max(settableTemperatureMedian - settableTemperatureRange, TCMB) var/maxTemp = settableTemperatureMedian + settableTemperatureRange targetTemperature = dd_range(minTemp, maxTemp, round(value, 1)) - if("ejectcell") - if(panel_open && cell) - if(usr.get_active_hand()) - usr << "You need an empty hand to remove \the [cell]!" - return - cell.updateicon() - usr.put_in_hands(cell) - cell.add_fingerprint(usr) - usr.visible_message("\The [usr] removes \the [cell] from \the [src].", "You remove \the [cell] from \the [src].") + if("eject") + if(cell) + cell.loc = get_turf(src) cell = null - if("installcell") - if(panel_open && !cell) - var/obj/item/weapon/stock_parts/cell/C = usr.get_active_hand() - if(istype(C)) - if(!usr.drop_item()) - return - cell = C - C.loc = src - C.add_fingerprint(usr) - usr.visible_message("\The [usr] inserts \a [C] into \the [src].", "You insert \the [C] into \the [src].") - add_fingerprint(usr) return 1 /obj/machinery/space_heater/process() diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 5e6a85914ed..f0c0e0c01b4 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -11,11 +11,14 @@ origin_tech = "syndicate=4;magnets=4" var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null + var/saved_appearance = null + /* var/saved_item = /obj/item/weapon/cigbutt var/saved_icon = 'icons/obj/clothing/masks.dmi' var/saved_icon_state = "cigbutt" var/saved_overlays = null var/saved_underlays = null + */ /obj/item/device/chameleon/dropped() disrupt() @@ -32,14 +35,13 @@ if(istype(target,/obj/item) && !istype(target, /obj/item/weapon/disk/nuclear)) playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6) user << "Scanned [target]." - saved_item = target.type - saved_icon = target.icon - saved_icon_state = target.icon_state - saved_overlays = target.overlays - saved_underlays = target.underlays + var/obj/temp = new/obj() + temp.appearance = target.appearance + temp.layer = initial(target.layer) // scanning things in your inventory + saved_appearance = temp.appearance /obj/item/device/chameleon/proc/toggle() - if(!can_use || !saved_item) return + if(!can_use || !saved_appearance) return if(active_dummy) eject_all() playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) @@ -53,11 +55,8 @@ qdel(T) else playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6) - var/obj/O = new saved_item(src) - if(!O) return var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc) - C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, saved_underlays, src) - qdel(O) + C.activate(usr, saved_appearance, src) usr << "You activate \the [src]." var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' @@ -89,18 +88,11 @@ name = "" desc = "" density = 0 - anchored = 1 var/can_move = 1 var/obj/item/device/chameleon/master = null -/obj/effect/dummy/chameleon/proc/activate(obj/O, mob/M, new_icon, new_iconstate, new_overlays, new_underlays, obj/item/device/chameleon/C) - name = O.name - desc = O.desc - icon = new_icon - icon_state = new_iconstate - overlays = new_overlays - underlays = new_underlays - dir = O.dir +/obj/effect/dummy/chameleon/proc/activate(mob/M, saved_appearance, obj/item/device/chameleon/C) + appearance = saved_appearance M.loc = src master = C master.active_dummy = src diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 46aebec6018..c1c8fef41a7 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -17,11 +17,14 @@ var/is_cyborg = 0 // It's 1 if module is used by a cyborg, and uses its storage var/datum/robot_energy_storage/source var/cost = 1 // How much energy from storage it costs + var/merge_type = null // This path and its children should merge with this stack, defaults to src.type /obj/item/stack/New(var/loc, var/amount=null) ..() if (amount) src.amount = amount + if(!merge_type) + merge_type = src.type return /obj/item/stack/Destroy() @@ -208,19 +211,19 @@ S.add(transfer) /obj/item/stack/Crossed(obj/o) - if(istype(o, src.type) && !o.throwing) + if(istype(o, merge_type) && !o.throwing) merge(o) return ..() /obj/item/stack/hitby(atom/movable/AM, skip, hitpush) - if(istype(AM, src.type)) + if(istype(AM, merge_type)) merge(AM) return ..() /obj/item/stack/attack_hand(mob/user) if (user.get_inactive_hand() == src) if(zero_amount()) return - var/obj/item/stack/F = new src.type( user, 1) + var/obj/item/stack/F = new src.type(user, 1) . = F F.copy_evidences(src) user.put_in_hands(F) @@ -234,7 +237,7 @@ return /obj/item/stack/attackby(obj/item/W, mob/user, params) - if(istype(W, src.type)) + if(istype(W, merge_type)) var/obj/item/stack/S = W merge(S) user << "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s." @@ -268,4 +271,4 @@ src.max_res_amount = max_res_amount src.time = time src.one_per_turf = one_per_turf - src.on_floor = on_floor \ No newline at end of file + src.on_floor = on_floor diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 125ba5e8d48..3eb2d6aa3b7 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -60,13 +60,6 @@ AI MODULES user << "Upload complete. [reciever]'s laws have been modified." reciever.show_laws() reciever.law_change_counter++ - if(isAI(reciever)) - var/mob/living/silicon/ai/A = reciever - for(var/mob/living/silicon/robot/R in A.connected_robots) - if(R.lawupdate) - R << "From now on, these are your laws:" - R.show_laws() - R.law_change_counter++ var/time = time2text(world.realtime,"hh:mm:ss") lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [reciever.name]([reciever.key]).[law2log ? " The law specified [law2log]" : ""]") diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 9d09a3b0cf8..21eed445b28 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -145,15 +145,9 @@ step_towards(W,my_target) if(!W || !W.reagents) return W.reagents.reaction(get_turf(W)) - for(var/atom/atm in get_turf(W)) + for(var/A in get_turf(W)) if(!W) return - W.reagents.reaction(atm) - if(isliving(atm)) //For extinguishing mobs on fire - var/mob/living/M = atm - M.ExtinguishMob() - if(istype(atm,/obj/item)) - var/obj/item/Item = atm - Item.extinguish() + W.reagents.reaction(A) if(W.loc == my_target) break sleep(2) diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 0d1c1723f68..8339ed98c7c 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -59,7 +59,7 @@ /obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up update_mob() - explosion(src.loc,-1,-1,-1, flame_range = range) // no explosive damage, only a large fireball. + explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. qdel(src) /obj/item/weapon/grenade/iedcasing/examine(mob/user) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index deabe13233d..e36882889e3 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -439,7 +439,7 @@ return /obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle - desc = "A large dufflebag containing a M90gl, a magazine, and a stimpack." + desc = "A large dufflebag containing an M90gl, a magazine, four additional grenades, and a pack of Syndicate cigarettes." /obj/item/weapon/storage/backpack/dufflebag/syndie/m90glbundle/New() ..() diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 586e3a47ddc..aa55051c783 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -14,7 +14,7 @@ name = "oxygen tank" desc = "A tank of oxygen." icon_state = "oxygen" - distribute_pressure = 16 + distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE force = 10 @@ -156,7 +156,7 @@ slot_flags = SLOT_BELT w_class = 2 force = 4 - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD + distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE volume = 3 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index f3d5ead1b88..11770f8fcf1 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -1,7 +1,3 @@ -#define TANK_MAX_RELEASE_PRESSURE (ONE_ATMOSPHERE*3) -#define TANK_MIN_RELEASE_PRESSURE 0 -#define TANK_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE*O2STANDARD) - /obj/item/weapon/tank name = "tank" icon = 'icons/obj/tank.dmi' @@ -119,10 +115,10 @@ add_fingerprint(user) ui_interact(user) -/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "tanks", name, 525, 210, state = inventory_state) + ui = new(user, src, ui_key, "tanks", name, 400, 200, state = inventory_state) ui.open() /obj/item/weapon/tank/get_ui_data() @@ -144,14 +140,12 @@ if(istype(location)) var/mask_check = 0 - if(location.internal == src) // if tank is current internal mask_check = 1 data["valveOpen"] = 1 else if(src in location) // or if tank is in the mobs possession if(!location.internal) // and they do not have any active internals mask_check = 1 - if(mask_check) if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) data["maskConnected"] = 1 @@ -163,7 +157,7 @@ switch(action) if("pressure") - switch(params["set"]) + switch(params["pressure"]) if("custom") var/custom = input(usr, "What rate do you set the regulator to? The dial reads from 0 to [TANK_MAX_RELEASE_PRESSURE].") as null|num if(isnum(custom)) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 14ad3320de6..a79e01c5011 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -74,6 +74,7 @@ m180.Turn(180) animate(H, transform = m180, time = 3) H.pixel_y = H.get_standard_pixel_y_offset(180) + qdel(G) return user << "You can't use that on the spike!" return diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm index 010200185ee..d10ffe89303 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm @@ -35,8 +35,11 @@ //for junctions, just swap the diagonals with each other if(split_text.len == 3 && split_text[3] != "Pass") split_text.Swap(2,3) + else if(length(split_text[1]) == 2 && length(split_text[2]) == 2) //diagonals + split_text[1] = copytext(split_text[1],1,2) + copytext(split_text[2],2,3) + split_text[2] = copytext(split_text[2],1,2) + ((copytext(split_text[2],2,3) == "E") ? "W" : "E") //for curves, swap the diagonal direction that is not in the same axis as the cardinal direction - else + else if(split_text[1] == "N" || split_text[1] == "S") split_text[2] = copytext(split_text[2],1,2) + ((copytext(split_text[2],2,3) == "E") ? "W" : "E") else diff --git a/code/hub.dm b/code/hub.dm index 69b90bd6782..f0005818f18 100644 --- a/code/hub.dm +++ b/code/hub.dm @@ -1,7 +1,11 @@ /world hub = "Exadv1.spacestation13" +#ifdef PUTONHUB + hub_password = "kMZy3U5jJHSiBQjr" +#else hub_password = "SORRYNOPASSWORD" +#endif name = "/tg/ Station 13" /* @@ -13,4 +17,4 @@ If not, let us know on the main tgstation IRC channel of irc.rizon.net #tgstatio hub_password = "kMZy3U5jJHSiBQjr" name = "Space Station 13" -*/ \ No newline at end of file +*/ diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index eac7551efc3..d5c56e5e5b0 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -145,8 +145,8 @@ var/global/BSACooldown = 0 body += "Coffee | " //body += "Parrot | " //body += "Poly | " - body += "\[ Construct: Armored , " - body += "Builder , " + body += "\[ Construct: Juggernaut , " + body += "Artificer , " body += "Wraith \] " body += "Shade" body += "
" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f7598a88a69..8c42eb8261b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -46,7 +46,7 @@ message_admins("[key_name_admin(usr)] tried to create changelings. Unfortunately, there were no candidates available.") log_admin("[key_name(usr)] failed to create changelings.") if("3") - if(!src.makeRevs()) + if(src.makeRevs()) message_admins("[key_name(usr)] started a revolution.") log_admin("[key_name(usr)] started a revolution.") else diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c7adcf4693e..855b63efa69 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -71,6 +71,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(targetselected && !hascall(target,procname)) usr << "Error: callproc(): target has no such call [procname]." return + else + var/procpath = text2path(procname) + if (!procpath) + usr << "Error: callproc(): proc [procname] does not exist. (Did you forget the /proc/ part?)" + return var/list/lst = get_callproc_args() if(!lst) return diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 18c0b2a4b8d..aabbbf8f3f0 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -114,12 +114,14 @@ for(var/mob/living/carbon/human/applicant in player_list) if(ROLE_REV in applicant.client.prefs.be_special) if(applicant.stat == CONSCIOUS) - if(applicant.mind) - if(!applicant.mind.special_role) - if(!jobban_isbanned(applicant, ROLE_REV) && !jobban_isbanned(applicant, "Syndicate")) - if(temp.age_check(applicant.client)) - if(!(applicant.job in temp.restricted_jobs)) - candidates += applicant + var/turf/T = get_turf(applicant) + if(T.z == ZLEVEL_STATION) + if(applicant.mind) + if(!applicant.mind.special_role) + if(!jobban_isbanned(applicant, ROLE_REV) && !jobban_isbanned(applicant, "Syndicate")) + if(temp.age_check(applicant.client)) + if(!(applicant.job in temp.restricted_jobs)) + candidates += applicant if(candidates.len) var/numRevs = min(candidates.len, 3) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index e39dcaa34e6..c7a1bb0ebc5 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -32,6 +32,7 @@ var/death = TRUE var/flavour_text = "The mapper forgot to set this!" var/faction = null + var/list/implants = list() density = 1 /obj/effect/landmark/corpse/initialize() @@ -105,6 +106,11 @@ W.registered_name = M.real_name W.update_label() M.equip_to_slot_or_del(W, slot_wear_id) + + for(var/I in implants) + var/obj/item/weapon/implant/X = new I + X.implant(M) + if(ckey) M.ckey = ckey M << "[flavour_text]" @@ -270,7 +276,7 @@ -/////////////////Officers////////////////////// +/////////////////Officers+Nanotrasen Security////////////////////// /obj/effect/landmark/corpse/bridgeofficer name = "Bridge Officer" @@ -298,6 +304,21 @@ corpseidjob = "Commander" corpseidaccess = "Captain" +/obj/effect/landmark/corpse/nanotrasensoldier + name = "Nanotrasen Private Security Officer" + corpseuniform = /obj/item/clothing/under/rank/security + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseshoes = /obj/item/clothing/shoes/combat + corpsegloves = /obj/item/clothing/gloves/combat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas/sechailer/swat + corpsehelmet = /obj/item/clothing/head/helmet/swat/nanotrasen + corpseback = /obj/item/weapon/storage/backpack/security + corpseid = 1 + corpseidjob = "Private Security Force" + corpseidaccess = "Security Officer" + + /obj/effect/landmark/corpse/commander/alive death = FALSE roundstart = FALSE @@ -350,4 +371,4 @@ mobname = "???" mob_species = /datum/species/abductor corpseuniform = /obj/item/clothing/under/color/grey - corpseshoes = /obj/item/clothing/shoes/combat \ No newline at end of file + corpseshoes = /obj/item/clothing/shoes/combat diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index 5b43288d109..d6d72ba061f 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -1,31 +1,31 @@ //Academy Areas /area/awaymission/academy - name = "\improper Academy Asteroids" + name = "Academy Asteroids" icon_state = "away" /area/awaymission/academy/headmaster - name = "\improper Academy Fore Block" + name = "Academy Fore Block" icon_state = "away1" /area/awaymission/academy/classrooms - name = "\improper Academy Classroom Block" + name = "Academy Classroom Block" icon_state = "away2" /area/awaymission/academy/academyaft - name = "\improper Academy Ship Aft Block" + name = "Academy Ship Aft Block" icon_state = "away3" /area/awaymission/academy/academygate - name = "\improper Academy Gateway" + name = "Academy Gateway" icon_state = "away4" /area/awaymission/academy/academycellar - name = "\improper Academy Cellar" + name = "Academy Cellar" icon_state = "away4" /area/awaymission/academy/academyengine - name = "\improper Academy Engine" + name = "Academy Engine" icon_state = "away4" //Academy Items @@ -102,7 +102,7 @@ /obj/structure/academy_wizard_spawner/proc/summon_wizard() var/turf/T = src.loc - + var/mob/living/carbon/human/wizbody = new(T) wizbody.equipOutfit(/datum/outfit/wizard/academy) var/obj/item/weapon/implant/exile/Implant = new/obj/item/weapon/implant/exile(wizbody) @@ -110,7 +110,7 @@ wizbody.faction |= "wizard" wizbody.real_name = "Academy Teacher" wizbody.name = "Academy Teacher" - + var/datum/mind/wizmind = new /datum/mind() wizmind.name = "Wizard Defender" wizmind.special_role = "Academy Defender" @@ -118,13 +118,13 @@ wizmind.objectives += O wizmind.transfer_to(wizbody) ticker.mode.wizards |= wizmind - + wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt) wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile) wizmind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball) current_wizard = wizbody - + give_control() /obj/structure/academy_wizard_spawner/proc/update_status() diff --git a/code/modules/awaymissions/mission_code/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm index b6496fe4718..1b6ffd1d0bf 100644 --- a/code/modules/awaymissions/mission_code/blackmarketpackers.dm +++ b/code/modules/awaymissions/mission_code/blackmarketpackers.dm @@ -1,22 +1,22 @@ //Packer Ship Areas /area/awaymission/BMPship - name = "\improper BMP Asteroids" + name = "BMP Asteroids" icon_state = "away" luminosity = 0 /area/awaymission/BMPship/Aft - name = "\improper Aft Block" + name = "Aft Block" icon_state = "away1" requires_power = 1 /area/awaymission/BMPship/Midship - name = "\improper Midship Block" + name = "Midship Block" icon_state = "away2" requires_power = 1 /area/awaymission/BMPship/Fore - name = "\improper Fore Block" + name = "Fore Block" icon_state = "away3" requires_power = 1 \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index 1625b3da847..724dcf434e3 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -5,7 +5,7 @@ icon_state = "away" /area/awaymission/challenge/main - name = "\improper Danger Room" + name = "Danger Room" icon_state = "away1" requires_power = 0 diff --git a/code/modules/awaymissions/mission_code/researchbase.dm b/code/modules/awaymissions/mission_code/researchbase.dm new file mode 100644 index 00000000000..0149a5cdf08 --- /dev/null +++ b/code/modules/awaymissions/mission_code/researchbase.dm @@ -0,0 +1,64 @@ +//Research Base Areas//-- + +/area/awaymission/research + name = "Research Outpost" + icon_state = "away" + luminosity = 0 + lighting_use_dynamic = DYNAMIC_LIGHTING_ENABLED + +/area/awaymission/research/interior + name = "Research Inside" + requires_power = 1 + icon_state = "away2" + +/area/awaymission/research/interior/cryo + name = "Research Cryostasis Room" + icon_state = "medbay" + +/area/awaymission/research/interior/clonestorage + name = "Research Clone Storage" + icon_state = "cloning" + +/area/awaymission/research/interior/genetics + name = "Research Genetics Research" + icon_state = "genetics" + +/area/awaymission/research/interior/engineering + name = "Research Engineering" + icon_state = "engine" + +/area/awaymission/research/interior/security + name = "Research Security" + icon_state = "security" + +/area/awaymission/research/interior/secure + name = "Research Secure Vault" + +/area/awaymission/research/interior/maint + name = "Research Maintenance" + icon_state = "maintcentral" + +/area/awaymission/research/interior/dorm + name = "Research Dorms" + icon_state = "Sleep" + +/area/awaymission/research/interior/escapepods + name = "Research Escape Wing" + icon_state = "exit" + +/area/awaymission/research/interior/gateway + name = "Research Gateway" + icon_state = "start" + +/area/awaymission/research/interior/bathroom + name = "Research Bathrooms" + icon_state = "restrooms" + +/area/awaymission/research/interior/medbay + name = "Research Medbay" + icon_state = "medbay" + +/area/awaymission/research/exterior + name = "Research Exterior" + icon_state = "unknown" + diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index bbf5856959f..eeca2c33add 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -1,37 +1,37 @@ //Snow Valley Areas//-- /area/awaymission/snowdin - name = "\improper Snowdin Tundra Plains" + name = "Snowdin Tundra Plains" icon_state = "away" requires_power = 0 luminosity = 1 lighting_use_dynamic = DYNAMIC_LIGHTING_ENABLED /area/awaymission/snowdin/post - name = "\improper Snowdin Outpost" + name = "Snowdin Outpost" requires_power = 1 /area/awaymission/snowdin/igloo - name = "\improper Snowdin Igloos" + name = "Snowdin Igloos" icon_state = "away2" /area/awaymission/snowdin/cave - name = "\improper Snowdin Caves" + name = "Snowdin Caves" icon_state = "away2" luminosity = 0 /area/awaymission/snowdin/base - name = "\improper Snowdin Main Base" + name = "Snowdin Main Base" icon_state = "away3" requires_power = 1 /area/awaymission/snowdin/dungeon1 - name = "\improper Snowdin Depths" + name = "Snowdin Depths" icon_state = "away2" luminosity = 0 /area/awaymission/snowdin/sekret - name = "\improper Snowdin Operations" + name = "Snowdin Operations" icon_state = "away3" requires_power = 1 @@ -237,6 +237,7 @@ obj/item/weapon/paper/crumpled/snowdin/shovel icon_state = "sleeper" roundstart = FALSE death = FALSE + implants = list(/obj/item/weapon/implant/exile) faction = "syndicate" flavour_text = {"You are a syndicate operative recently awoken from cyrostatis in an underground outpost. Monitor Nanotrasen communications and record infomation. All intruders should be disposed of swirfly to assure no gathered infomation is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as yourself."} diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm index 9b9a70d220a..b8906c8011d 100644 --- a/code/modules/awaymissions/mission_code/spacebattle.dm +++ b/code/modules/awaymissions/mission_code/spacebattle.dm @@ -1,33 +1,33 @@ //Spacebattle Areas /area/awaymission/spacebattle - name = "\improper Space Battle" + name = "Space Battle" icon_state = "away" requires_power = 0 /area/awaymission/spacebattle/cruiser - name = "\improper Nanotrasen Cruiser" + name = "Nanotrasen Cruiser" /area/awaymission/spacebattle/syndicate1 - name = "\improper Syndicate Assault Ship 1" + name = "Syndicate Assault Ship 1" /area/awaymission/spacebattle/syndicate2 - name = "\improper Syndicate Assault Ship 2" + name = "Syndicate Assault Ship 2" /area/awaymission/spacebattle/syndicate3 - name = "\improper Syndicate Assault Ship 3" + name = "Syndicate Assault Ship 3" /area/awaymission/spacebattle/syndicate4 - name = "\improper Syndicate War Sphere 1" + name = "Syndicate War Sphere 1" /area/awaymission/spacebattle/syndicate5 - name = "\improper Syndicate War Sphere 2" + name = "Syndicate War Sphere 2" /area/awaymission/spacebattle/syndicate6 - name = "\improper Syndicate War Sphere 3" + name = "Syndicate War Sphere 3" /area/awaymission/spacebattle/syndicate7 - name = "\improper Syndicate Fighter" + name = "Syndicate Fighter" /area/awaymission/spacebattle/secret - name = "\improper Hidden Chamber" \ No newline at end of file + name = "Hidden Chamber" \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index dc2cdd22470..7a4bcc86671 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -7,30 +7,30 @@ //Wild West Areas /area/awaymission/wwmines - name = "\improper Wild West Mines" + name = "Wild West Mines" icon_state = "away1" luminosity = 1 requires_power = 0 /area/awaymission/wwgov - name = "\improper Wild West Mansion" + name = "Wild West Mansion" icon_state = "away2" luminosity = 1 requires_power = 0 /area/awaymission/wwrefine - name = "\improper Wild West Refinery" + name = "Wild West Refinery" icon_state = "away3" luminosity = 1 requires_power = 0 /area/awaymission/wwvault - name = "\improper Wild West Vault" + name = "Wild West Vault" icon_state = "away3" luminosity = 0 /area/awaymission/wwvaultdoors - name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power + name = "Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power icon_state = "away2" requires_power = 0 luminosity = 0 diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 90ea1fd4781..4219bafe595 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -22,6 +22,7 @@ var/global/list/potentialSpaceRuins = generateMapList(filename = "config/spaceRu var/file = file(map) if(isfile(file)) maploader.load_map(file) + smooth_zlevel(world.maxz) world.log << "away mission loaded: [map]" map_transition_config.Add(AWAY_MISSION_LIST) @@ -66,7 +67,7 @@ var/global/list/potentialSpaceRuins = generateMapList(filename = "config/spaceRu potentialMaps.Add(t) - return potentialMaps + return potentialMaps /proc/seedRuins(z_level = 1, ruin_number = 0, whitelist = /area/space, list/potentialRuins = potentialSpaceRuins) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 66384199db2..6e73a0bfd97 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -173,10 +173,10 @@ You can set verify to TRUE if you want send() to sleep until the client has the //DEFINITIONS FOR ASSET DATUMS START HERE. -/datum/asset/simple/nanoui +/datum/asset/simple/tgui assets = list( - "nanoui.css" = 'nano/assets/nanoui.css', - "nanoui.js" = 'nano/assets/nanoui.js' + "tgui.css" = 'tgui/assets/tgui.css', + "tgui.js" = 'tgui/assets/tgui.js' ) /datum/asset/simple/pda diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b142bc28df4..377c8767062 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -27,7 +27,8 @@ var/list/preferences_datums = list() var/UI_style = "Midnight" - var/nanoui_fancy = TRUE + var/tgui_fancy = TRUE + var/tgui_lock = TRUE var/toggles = TOGGLES_DEFAULT var/chat_toggles = TOGGLES_DEFAULT_CHAT var/ghost_form = "ghost" @@ -325,7 +326,8 @@ var/list/preferences_datums = list() dat += "
" dat += "

General Settings

" dat += "UI Style: [UI_style]
" - dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" + dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"]
" + dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"]
" dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"]
" dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"]
" dat += "Ghost ears: [(chat_toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" @@ -1011,8 +1013,10 @@ var/list/preferences_datums = list() else UI_style = "Midnight" - if("nanoui") - nanoui_fancy = !nanoui_fancy + if("tgui_fancy") + tgui_fancy = !tgui_fancy + if("tgui_lock") + tgui_lock = !tgui_lock if("hear_adminhelps") toggles ^= SOUND_ADMINHELP diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ceea9a220fe..74923c210bf 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -102,7 +102,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(current_version < 12) ignoring = list() - //should this proc get fairly long (say 3 versions long), //just increase SAVEFILE_VERSION_MIN so it's not as far behind //SAVEFILE_VERSION_MAX and then delete any obsolete if clauses @@ -165,14 +164,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["ooccolor"] >> ooccolor S["lastchangelog"] >> lastchangelog S["UI_style"] >> UI_style - S["nanoui_fancy"] >> nanoui_fancy - S["be_special"] >> be_special + S["tgui_fancy"] >> tgui_fancy + S["tgui_lock"] >> tgui_lock if(islist(S["be_special"])) - S["be_special"] >> be_special + S["be_special"] >> be_special else //force update and store the old bitflag version of be_special needs_update = 11 - S["be_special"] >> old_be_special + S["be_special"] >> old_be_special S["default_slot"] >> default_slot S["chat_toggles"] >> chat_toggles @@ -193,7 +192,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro"), initial(UI_style)) - nanoui_fancy = sanitize_integer(nanoui_fancy, 0, 1, initial(nanoui_fancy)) + tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy)) + tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock)) default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) toggles = sanitize_integer(toggles, 0, 65535, initial(toggles)) ghost_form = sanitize_inlist(ghost_form, ghost_forms, initial(ghost_form)) @@ -213,7 +213,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["ooccolor"] << ooccolor S["lastchangelog"] << lastchangelog S["UI_style"] << UI_style - S["nanoui_fancy"] << nanoui_fancy + S["tgui_fancy"] << tgui_fancy + S["tgui_lock"] << tgui_lock S["be_special"] << be_special S["default_slot"] << default_slot S["toggles"] << toggles diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm index 69cbccb4d99..b9f6cc3fbd3 100644 --- a/code/modules/food&drinks/drinks/drinks.dm +++ b/code/modules/food&drinks/drinks/drinks.dm @@ -8,7 +8,7 @@ icon_state = null flags = OPENCONTAINER var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it. - possible_transfer_amounts = list(5,10,25) + possible_transfer_amounts = list(5,10,15,20,25,30,50) volume = 50 burn_state = FIRE_PROOF diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food&drinks/drinks/drinks/bottle.dm index e97d65fdea7..9b9bccc986e 100644 --- a/code/modules/food&drinks/drinks/drinks/bottle.dm +++ b/code/modules/food&drinks/drinks/drinks/bottle.dm @@ -7,6 +7,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle amount_per_transfer_from_this = 10 volume = 100 + throwforce = 15 item_state = "broken_beer" //Generic held-item sprite until unique ones are made. var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets) var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it diff --git a/code/modules/mining/lavaland/weather.dm b/code/modules/mining/lavaland/weather.dm index 35eb9a821ff..2d24616df50 100644 --- a/code/modules/mining/lavaland/weather.dm +++ b/code/modules/mining/lavaland/weather.dm @@ -36,9 +36,9 @@ if(M.z == target_z) M << start_up_message - sleep(start_up_time) - stage = MAIN_STAGE - weather_main() + spawn(start_up_time) + stage = MAIN_STAGE + weather_main() /datum/weather/proc/weather_main() diff --git a/code/modules/mining/lavaland/weather_types.dm b/code/modules/mining/lavaland/weather_types.dm index e32fbf4dc7a..89308d4437c 100644 --- a/code/modules/mining/lavaland/weather_types.dm +++ b/code/modules/mining/lavaland/weather_types.dm @@ -47,12 +47,13 @@ duration_overlay = "" overlay_layer = 10 -/datum/weather/advanced_darkness/advanced_darkness/update_areas() - ..() +/datum/weather/advanced_darkness/update_areas() for(var/area/A in impacted_areas) if(stage == MAIN_STAGE) + A.invisibility = 0 A.opacity = 1 else + A.invisibility = 100 A.opacity = 0 //Ash storms diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index e918518c5bc..65643040b5c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -86,7 +86,7 @@ Works together with spawning an observer, noted above. if(key) if(!cmptext(copytext(key,1,2),"@")) // Skip aghosts. var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc. - SSnano.on_transfer(src, ghost) // Transfer NanoUIs. + SStgui.on_transfer(src, ghost) // Transfer NanoUIs. ghost.can_reenter_corpse = can_reenter_corpse ghost.key = key return ghost @@ -156,7 +156,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients usr << "Another consciousness is in your body...It is resisting you." return - SSnano.on_transfer(src, mind.current) // Transfer NanoUIs. + SStgui.on_transfer(src, mind.current) // Transfer NanoUIs. mind.current.key = key return 1 diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 5a1746e5ed2..e36f8e3eaac 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -11,8 +11,10 @@ var/message_a = say_quote(message, get_spans()) var/rendered = "Hivemind, [shown_name] [message_a]" for(var/mob/S in player_list) - if((!S.stat && S.hivecheck()) || (S in dead_mob_list)) + if(!S.stat && S.hivecheck()) S << rendered + if(S in dead_mob_list) + S << "(F)[rendered]" /mob/living/carbon/alien/humanoid/royal/queen/alien_talk(message, shown_name = name) shown_name = "[shown_name]" diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 27d29ef4e50..40727647cd7 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -39,7 +39,10 @@ var/global/posibrain_notif_cooldown = 0 spawn(askDelay) //Seperate from the global cooldown. notified = 0 update_icon() - visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + if(brainmob.stat == CONSCIOUS && brainmob.client) + visible_message("The positronic brain pings, and its lights start flashing. Success!") + else + visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") return //Code for deleting personalities recommended here. @@ -127,7 +130,6 @@ var/global/posibrain_notif_cooldown = 0 return /obj/item/device/mmi/posibrain/New() - brainmob = new(src) brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","ANNS","KOS","TKRG","XAL","STLP","CBOS","DNCN","FXMC","DRSD"))]-[rand(100, 999)]" brainmob.real_name = brainmob.name @@ -137,7 +139,6 @@ var/global/posibrain_notif_cooldown = 0 brainmob.silent = 0 dead_mob_list -= brainmob ping_ghosts("created") - ..() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 752e796573f..5cfa976e679 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -21,8 +21,6 @@ t_has = "have" t_is = "are" else - if(icon) - msg += "\icon[src] " //note, should we ever go back to runtime-generated icons (please don't), you will need to change this to \icon[icon] to prevent crashes. switch(gender) if(MALE) t_He = "He" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 88a4581e713..27a76f7eec2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -306,6 +306,8 @@ if(head) if(head.flags & BLOCK_GAS_SMOKE_EFFECT) . = 1 + if(NOBREATH in dna.species.specflags) + . = 1 return . /mob/living/carbon/human/proc/handle_embedded_objects() for(var/obj/item/organ/limb/L in organs) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index a95d8be0c5d..7bb35fd2d27 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -208,7 +208,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) log_say("[mind.changeling.changelingID]/[src.key] : [message]") for(var/mob/M in mob_list) if(M in dead_mob_list) - M << msg + M << "(F)[msg]" else switch(M.lingcheck()) if(2) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 45525ee11a0..9a4875bfe9a 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -842,4 +842,10 @@ var/list/ai_list = list() //get_turf_pixel() is because APCs in maint aren't actually in view of the inner camera if(M && cameranet && !cameranet.checkTurfVis(get_turf_pixel(M)) && !apc_override) return - return 1 \ No newline at end of file + return 1 + +/mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) + raw_message = lang_treat(speaker, message_langs, raw_message, spans) + var/name_used = speaker.GetVoice() + var/rendered = "Relayed Speech: [name_used] [raw_message]" + show_message(rendered, 2) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index f3569d4c503..d03587fd26d 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -6,9 +6,10 @@ /mob/camera/aiEye name = "Inactive AI Eye" + invisibility = 100 var/list/visibleCameraChunks = list() var/mob/living/silicon/ai/ai = null - + var/relay_speech = FALSE // Use this when setting the aiEye's location. // It will also stream the chunk that the new loc is in. @@ -78,7 +79,6 @@ if (user.camera_light_on) user.light_cameras() - // Return to the Core. /mob/living/silicon/ai/proc/view_core() @@ -104,3 +104,7 @@ return //won't work if dead acceleration = !acceleration usr << "Camera acceleration has been toggled [acceleration ? "on" : "off"]." + +/mob/camera/aiEye/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) + if(relay_speech && speaker && ai && !radio_freq && speaker != ai && near_camera(speaker)) + ai.relay_speech(message, speaker, message_langs, raw_message, radio_freq, spans) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index 50c188ca629..9f11d34359b 100644 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -17,3 +17,10 @@ src.laws_sanity_check() src.laws.show_laws(who) + if(!everyone) + for(var/mob/living/silicon/robot/R in connected_robots) + if(R.lawupdate) + R.lawsync() + R.show_laws() + R.law_change_counter++ + diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 90ba92dd0f6..5333e8b9623 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -13,12 +13,14 @@ var/message_a = say_quote(message, get_spans()) var/rendered = "Robotic Talk, [name] [message_a]" for(var/mob/M in player_list) - if(M.binarycheck() || (M in dead_mob_list)) + if(M.binarycheck()) if(istype(M, /mob/living/silicon/ai)) var/renderedAI = "Robotic Talk, [name] ([desig]) [message_a]" M << renderedAI else M << rendered + if(M in dead_mob_list) + M << "(F)[rendered]" /mob/living/silicon/binarycheck() return 1 diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 75e71a6ed77..fa0f4d29a38 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -161,4 +161,19 @@ corpseuniform = /obj/item/clothing/under/color/lightpurple corpsesuit = /obj/item/clothing/suit/wizrobe corpseshoes = /obj/item/clothing/shoes/sandal - corpsehelmet = /obj/item/clothing/head/wizard \ No newline at end of file + corpsehelmet = /obj/item/clothing/head/wizard + + +/obj/effect/landmark/mobcorpse/nanotrasensoldier + name = "Nanotrasen Private Security Officer" + corpseuniform = /obj/item/clothing/under/rank/security + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseshoes = /obj/item/clothing/shoes/combat + corpsegloves = /obj/item/clothing/gloves/combat + corpseradio = /obj/item/device/radio/headset + corpsemask = /obj/item/clothing/mask/gas/sechailer/swat + corpsehelmet = /obj/item/clothing/head/helmet/swat/nanotrasen + corpseback = /obj/item/weapon/storage/backpack/security + corpseid = 1 + corpseidjob = "Private Security Force" + corpseidaccess = "Security Officer" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index c4e5c7efb8c..afced5e62b3 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -2,13 +2,13 @@ name = "Guardian Spirit" real_name = "Guardian Spirit" desc = "A mysterious being that stands by it's charge, ever vigilant." - speak_emote = list("intones") + speak_emote = list("hisses") response_help = "passes through" response_disarm = "flails at" response_harm = "punches" - icon = 'icons/mob/mob.dmi' - icon_state = "stand" - icon_living = "stand" + icon = 'icons/mob/guardian.dmi' + icon_state = "guardianorange" + icon_living = "guardianorange" icon_dead = "stand" speed = 0 a_intent = "harm" @@ -26,7 +26,6 @@ melee_damage_upper = 15 butcher_results = list(/obj/item/weapon/ectoplasm = 1) AIStatus = AI_OFF - var/animated_manifest = FALSE var/cooldown = 0 var/damage_transfer = 1 //how much damage from each attack we transfer to the owner var/mob/living/summoner @@ -34,7 +33,6 @@ var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" var/magic_fluff_string = " You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!" var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" - var/bio_fluff_string = "Your scarabs fail to mutate. This shouldn't happen! Submit a bug report!" /mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies ..() @@ -119,11 +117,6 @@ if(loc == summoner) loc = get_turf(summoner) cooldown = world.time + 30 - if(animated_manifest) - var/end_icon = icon_state - icon_state = "parasite_forming" - spawn(6) - icon_state = end_icon /mob/living/simple_animal/hostile/guardian/proc/Recall() if(cooldown > world.time) @@ -136,10 +129,13 @@ var/input = stripped_input(src, "Please enter a message to tell your summoner.", "Guardian", "") if(!input) return + var/my_message = "[src]: [input]" for(var/mob/M in mob_list) - if(M == summoner || (M in dead_mob_list)) - M << "[src]: [input]" - src << "[src]: [input]" + if(M == summoner) + M << my_message + if(M in dead_mob_list) + M << "(F)[my_message]" + src << "[my_message]" log_say("[src.real_name]/[src.key] : [input]") /mob/living/simple_animal/hostile/guardian/proc/ToggleMode() @@ -153,13 +149,14 @@ var/input = stripped_input(src, "Please enter a message to tell your guardian.", "Message", "") if(!input) return + var/my_message = "[src]: [input]" for(var/mob/M in mob_list) if(istype (M, /mob/living/simple_animal/hostile/guardian)) var/mob/living/simple_animal/hostile/guardian/G = M if(G.summoner == src) - G << "[src]: [input]" + G << "[my_message]" else if (M in dead_mob_list) - M << "[src]: [input]" + M << "(F)[my_message]" src << "[src]: [input]" log_say("[src.real_name]/[src.key] : [text]") @@ -217,7 +214,6 @@ environment_smash = 1 magic_fluff_string = "..And draw the Wizard, bringer of endless chaos!" tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online." - bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to sow havoc at random." /mob/living/simple_animal/hostile/guardian/fire/Life() //Dies if the summoner dies ..() @@ -265,7 +261,6 @@ environment_smash = 2 magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated." tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online." - bio_fluff_string = "Your scarab swarm stirs to life, ready to tear apart your enemies." var/battlecry = "AT" /mob/living/simple_animal/hostile/guardian/punch/verb/Battlecry() @@ -299,7 +294,6 @@ playstyle_string = "As a Support type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent mob will warp them to your bluespace beacon after a short delay." magic_fluff_string = "..And draw the CMO, a potent force of life...and death." tech_fluff_string = "Boot sequence complete. Medical modules active. Bluespace modules activated. Holoparasite swarm online." - bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of mending wounds and travelling via bluespace." var/turf/simulated/floor/beacon var/beacon_cooldown = 0 var/toggle = FALSE @@ -424,7 +418,6 @@ playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit." magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat." tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online." - bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spraying shards of crystal." var/list/snares = list() var/toggle = FALSE @@ -502,7 +495,6 @@ playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via alt click." magic_fluff_string = "..And draw the Scientist, master of explosive death." tech_fluff_string = "Boot sequence complete. Explosive modules active. Holoparasite swarm online." - bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of stealthily booby trapping items." var/bomb_cooldown = 0 /mob/living/simple_animal/hostile/guardian/bomb/AltClickOn(atom/movable/A) @@ -609,7 +601,6 @@ else gaurdiantype = input(user, "Pick the type of [mob_name]", "[mob_name] Creation") as null|anything in possible_guardians var/pickedtype = /mob/living/simple_animal/hostile/guardian/punch - var/picked_color = randomColor(0) switch(gaurdiantype) if("Chaos") @@ -638,26 +629,20 @@ user.verbs += /mob/living/proc/guardian_comm user.verbs += /mob/living/proc/guardian_recall user.verbs += /mob/living/proc/guardian_reset + + var/picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces") + var/colour = pick("orange", "pink", "red", "blue", "green") + G.name = "[picked_name] [capitalize(colour)]" + G.real_name = "[picked_name] [capitalize(colour)]" + G.icon_living = "guardian[colour]" + G.icon_state = "guardian[colour]" + G.icon_dead = "guardian[colour]" + switch (theme) if("magic") - G.name = "[mob_name] [capitalize(picked_color)]" - G.color = color2hex(picked_color) - G.real_name = "[mob_name] [capitalize(picked_color)]" user << "[G.magic_fluff_string]." if("tech") - var/colour = pick("orange", "neon", "pink", "red", "blue", "green") - G.name = "[mob_name] [capitalize(colour)]" - G.real_name = "[mob_name] [capitalize(colour)]" - G.icon_living = "parasite[colour]" - G.icon_state = "parasite[colour]" - G.icon_dead = "parasite[colour]" - G.animated_manifest = TRUE user << "[G.tech_fluff_string]." - G.speak_emote = list("states") - if("bio") - user << "[G.bio_fluff_string]." - G.attacktext = "swarms" - G.speak_emote = list("chitters") G.mind.name = "[G.real_name]" /obj/item/weapon/guardiancreator/choose @@ -678,21 +663,6 @@ /obj/item/weapon/guardiancreator/tech/choose random = FALSE -/obj/item/weapon/guardiancreator/biological - name = "scarab egg cluster" - desc = "A parasitic species that will nest in the closest living creature upon birth. While not great for your health, they'll defend their new 'hive' to the death." - icon = 'icons/obj/syringe.dmi' - icon_state = "combat_hypo" - theme = "bio" - mob_name = "Scarab Swarm" - use_message = "The eggs begin to twitch..." - used_message = "The cluster already hatched." - failure_message = "...but soon settles again. Guess they weren't ready to hatch after all." - -/obj/item/weapon/guardiancreator/biological/choose - random = FALSE - - /obj/item/weapon/paper/guardian name = "Holoparasite Guide" icon_state = "alienpaper_words" @@ -724,11 +694,6 @@ return - - - - - ///HUD /datum/hud/proc/guardian_hud(ui_style = 'icons/mob/screen_midnight.dmi') @@ -761,8 +726,6 @@ mymob.client.screen += adding - - //HUD BUTTONS /obj/screen/guardian diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index b2f13828c02..7d8e73e889b 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -31,6 +31,7 @@ faction = list("carp") flying = 1 + pressure_resistance = 200 gold_core_spawnable = 1 /mob/living/simple_animal/hostile/carp/Process_Spacemove(movement_dir = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 65a603ddb9e..a7c6dff1d42 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -24,7 +24,7 @@ speak_emote = list("states") gold_core_spawnable = 1 del_on_death = 1 - loot = (/obj/effect/decal/cleanable/robot_debris) + loot = list(/obj/effect/decal/cleanable/robot_debris) /mob/living/simple_animal/hostile/hivebot/New() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0842a2062af..bfd17bc69db 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -374,6 +374,8 @@ /mob/living/simple_animal/hostile/asteroid/goliath/OpenFire() var/tturf = get_turf(target) + if(!(istype(tturf, /turf/simulated))) + return if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen visible_message("The [src.name] digs its tentacles under [target.name]!") new /obj/effect/goliath_tentacle/original(tturf) diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm new file mode 100644 index 00000000000..7d75f4a747e --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm @@ -0,0 +1,58 @@ +/mob/living/simple_animal/hostile/nanotrasen + name = "Nanotrasen Private Security Officer" + desc = "An officer part of Nanotrasen's private security force, he seems rather unpleased to meet you." + icon_state = "nanotrasen" + icon_living = "nanotrasen" + icon_dead = null + icon_gib = "syndicate_gib" + speak_chance = 25 + turns_per_move = 5 + response_help = "pokes" + response_disarm = "shoves" + response_harm = "hits" + speed = 0 + stat_attack = 1 + robust_searching = 1 + maxHealth = 100 + health = 100 + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 15 + attacktext = "punches" + attack_sound = 'sound/weapons/punch1.ogg' + a_intent = "harm" + loot = list(/obj/effect/landmark/mobcorpse/nanotrasensoldier) + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 15 + faction = list("nanotrasenprivate") + status_flags = CANPUSH + speak = list("Stop resisting!", "I AM THE LAW!", "Face the wrath of the golden bolt!", "Stop breaking the law, asshole!") + search_objects = 1 + + +/mob/living/simple_animal/hostile/nanotrasen/Aggro() + ..() + summon_backup(15) + say("411 in progress, requesting backup!") + + +/mob/living/simple_animal/hostile/nanotrasen/ranged + icon_state = "nanotrasenranged" + icon_living = "nanotrasenranged" + ranged = 1 + retreat_distance = 3 + minimum_distance = 5 + casingtype = /obj/item/ammo_casing/c45 + projectilesound = 'sound/weapons/Gunshot.ogg' + loot = list(/obj/item/weapon/gun/projectile/automatic/pistol/m1911, + /obj/effect/landmark/mobcorpse/nanotrasensoldier) + + +/mob/living/simple_animal/hostile/nanotrasen/ranged/smg + icon_state = "nanotrasenrangedsmg" + icon_living = "nanotrasenrangedsmg" + rapid = 1 + casingtype = /obj/item/ammo_casing/c46x30mm + projectilesound = 'sound/weapons/Gunshot_smg.ogg' + loot = list(/obj/item/weapon/gun/projectile/automatic/wt550, + /obj/effect/landmark/mobcorpse/nanotrasensoldier) \ No newline at end of file diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 082296dcaf2..ed176d9aa3c 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -27,7 +27,7 @@ player_list |= src update_Login_details() world.update_status() - + client.images = null //remove the images such as AIs being unable to see runes client.screen = list() //remove hud items just in case if(hud_used) qdel(hud_used) //remove the hud objects @@ -37,7 +37,8 @@ sight |= SEE_SELF ..() - + if (key != client.key) + key = client.key if(loc && !isturf(loc)) client.eye = loc client.perspective = EYE_PERSPECTIVE diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index f1bc6dcabcc..968b4f0c16c 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,5 +1,5 @@ /mob/Logout() - SSnano.on_logout(src) + SStgui.on_logout(src) player_list -= src log_access("Logout: [key_name(src)]") if(admin_datums[src.ckey]) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm deleted file mode 100644 index b7721334ca5..00000000000 --- a/code/modules/nano/nanoui.dm +++ /dev/null @@ -1,365 +0,0 @@ - /** - * NanoUI - * - * Contains the NanoUI datum, and its procs. - * - * /tg/station user interface library - * thanks to baystation12 - * - * modified by neersighted - **/ - - /** - * NanoUI datum: - * - * Represents a NanoUI. - **/ -/datum/nanoui - var/mob/user // The mob who opened/is using the NanoUI. - var/atom/movable/src_object // The object which owns the NanoUI. - var/title // The title of te NanoUI. - var/ui_key // The ui_key of the NanoUI. This allows multiple UIs for one src_object. - var/window_id // The window_id for browse() and onclose(). - var/width = 0 // The window width. - var/height = 0 // The window height - var/window_options = list( // Extra options to winset(). - "focus" = 0, - "titlebar" = 1, - "can_resize" = 1, - "can_minimize" = 1, - "can_maximize" = 0, - "can_close" = 1, - "auto_format" = 0 - ) - var/atom/ref = null // An extra ref to call when the window is closed. - var/layout = "nanotrasen" // The layout to be used for this UI. - var/template // The template to be used for this UI. - var/auto_update = 1 // Update the NanoUI every MC tick. - var/list/initial_data // The data (and datastructure) used to initialize the NanoUI - var/status = NANO_INTERACTIVE // The status/visibility of the NanoUI. - var/datum/nano_state/state = null // Topic state used to determine status. Topic states are in interactions/. - var/datum/nanoui/master_ui // The parent NanoUI. - var/list/datum/nanoui/children = list() // Children of this NanoUI. - - /** - * public - * - * Create a new NanoUI. - * - * required user mob The mob who opened/is using the NanoUI. - * required src_object atom/movable The object which owns the NanoUI. - * required ui_key string The ui_key of the NanoUI. - * required template string The template to render the NanoUI content with. - * optional title string The title of the NanoUI. - * optional width int The window width. - * optional height int The window height. - * optional ref atom An extra ref to use when the window is closed. - * optional master_ui datum/nanoui The parent NanoUI. - * optional state datum/nano_state The state used to determine status. - * - * return datum/nanoui The requested NanoUI. - **/ -/datum/nanoui/New(mob/user, atom/movable/src_object, ui_key, template, \ - title, width = 0, height = 0, \ - atom/ref = null, datum/nanoui/master_ui = null, \ - datum/nano_state/state = default_state) - src.user = user - src.src_object = src_object - src.ui_key = ui_key - src.window_id = "\ref[src_object]-[ui_key]" - - set_template(template) - - if(title) - src.title = sanitize(title) - if(width) - src.width = width - if(height) - src.height = height - - if(ref) - src.ref = ref - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/nanoui) - assets.send(user) - - /** - * public - * - * Open this NanoUI (and initialize it with data). - * - * optional data list The data to intialize the UI with. - **/ -/datum/nanoui/proc/open(list/data = null) - if(!user.client) - return // Bail if there is no client. - - update_status(push = 0) // Update the window status. - if(status == NANO_CLOSE) - return // Bail if we should close. - - if(!initial_data) - if(!data) // If we don't have initial_data and data was not passed, get data from the src_object. - data = src_object.get_ui_data(user) - set_initial_data(data) // Otherwise use the passed data. - - var/window_size = "" - if(width && height) // If we have a width and height, use them. - window_size = "size=[width]x[height];" - - user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. - winset(user, window_id, "on-close=\"nanoclose \ref[src]\"") // Instruct the client to signal NanoUI when the window is closed. - SSnano.on_open(src) - - /** - * public - * - * Reinitialize the NanoUI. - * (Possibly with a new template and/or data). - * - * optional template string The filename of the new template. - * optional data list The new initial data. - **/ -/datum/nanoui/proc/reinitialize(template, list/data) - if(template) - set_template(template) // Set a new template. - if(data) - set_initial_data(data) // Replace the initial_data. - open() - - /** - * public - * - * Close the NanoUI, and all its children. - **/ -/datum/nanoui/proc/close() - user << browse(null, "window=[window_id]") // Close the window. - SSnano.on_close(src) - for(var/datum/nanoui/child in children) // Loop through and close all children. - child.close() - - /** - * public - * - * Sets the browse() window options for this NanoUI. - * - * required window_options list The window options to set. - **/ -/datum/nanoui/proc/set_window_options(list/window_options) - src.window_options = window_options - - /** - * public - * - * Set the layout for this NanoUI. - * This loads custom layout styles and templates for this NanoUI. - * - * required layout string The new UI layout. - **/ -/datum/nanoui/proc/set_layout(layout) - src.layout = lowertext(layout) - - /** - * public - * - * Set the template for this NanoUI. - * - * required template string The new UI template. - **/ -/datum/nanoui/proc/set_template(template) - src.template = lowertext(template) - - /** - * public - * - * Enable/disable auto-updating of the NanoUI. - * - * required state bool Enable/disable auto-updating. - **/ -/datum/nanoui/proc/set_auto_update(state = 1) - auto_update = state - - /** - * private - * - * Set the data to initialize the NanoUI with. - * The datastructure cannot be changed by subsequent updates. - * - * optional data list The data/datastructure to initialize the NanoUI with. - **/ -/datum/nanoui/proc/set_initial_data(list/data) - initial_data = data - - /** - * private - * - * Generate HTML for this NanoUI. - * - * return string NanoUI HTML output. - **/ -/datum/nanoui/proc/get_html() - // Generate JSON. - var/list/send_data = get_send_data(initial_data) - var/send_data_json = JSON.stringify(send_data) - send_data_json = replacetextEx(send_data_json, "'", "'") - send_data_json = replacetextEx(send_data_json, "\improper", "") - send_data_json = replacetextEx(send_data_json, "ÿ", "") - - // Populate it. - var/send_html = replacetextEx(SSnano.html, "\[data]", send_data_json) - return send_html - - /** - * private - * - * Get the config data/datastructure to initialize the NanoUI with. - * - * return list The config data. - **/ -/datum/nanoui/proc/get_config_data() - var/list/config_data = list( - "title" = title, - "status" = status, - "layout" = layout, - "window" = window_id, - "ref" = "\ref[src]", - "user" = list( - "name" = user.name, - "fancy" = user.client.prefs.nanoui_fancy, - "ref" = "\ref[user]" - ), - "srcObject" = list( - "name" = src_object.name, - "ref" = "\ref[src_object]" - ), - "templates" = list( - "layout" = "_[layout]", - "content" = "[template]" - ) - ) - return config_data - - /** - * private - * - * Package the data to send to the UI. - * This is the (regular) data and config data, bundled together. - * - * return list The packaged data. - **/ -/datum/nanoui/proc/get_send_data(list/data) - var/list/send_data = list() - - send_data["config"] = get_config_data() - if(!isnull(data)) - send_data["data"] = data - - return send_data - - /** - * private - * - * Handle clicks from the NanoUI. - * Call the src_object's ui_act() if status is NANO_INTERACTIVE. - * If the src_object's ui_act() returns 1, update all UIs attacked to it. - **/ -/datum/nanoui/Topic(href, href_list) - update_status(push = 0) // Update the window state. - if(status != NANO_INTERACTIVE || user != usr) - return // If UI is not interactive or usr calling Topic is not the UI user. - - var/action = href_list["nano"] // Pull the action out. - href_list -= "nano" - - var/update = src_object.ui_act(action, href_list, state) // Call ui_act() on the src_object. - if(src_object && update) - SSnano.update_uis(src_object) // If we have a src_object and its ui_act() told us to update. - - /** - * private - * - * Update the NanoUI. Only updates the contents/layout if update is true, - * otherwise only updates the status. - * - * optional force bool If the UI should be forced to update. - **/ -/datum/nanoui/process(force = 0) - if(!src_object || !user) // If the object or user died (or something else), abort. - close() - return - - if(status && (force || auto_update)) - update() // Update the UI if the status and update settings allow it. - else - update_status(push = 1) // Otherwise only update status. - - /** - * private - * - * Push data to an already open NanoUI. - * - * required data list The data to send. - * optional force bool If the update should be sent regardless of state. - **/ -/datum/nanoui/proc/push_data(data, force = 0) - update_status(push = 0) // Update the window state. - if(status <= NANO_DISABLED && !force) - return // Cannot update UI, we have no visibility. - - var/list/send_data = get_send_data(data) // Get the data to send. - - // Send the new data to the recieveUpdate() Javascript function. - user << output(url_encode(JSON.stringify(send_data)), "[window_id].browser:receiveUpdate") - - - /** - * private - * - * Updates the UI by interacting with the src_object again, which will hopefully - * call try_ui_update on it. - * - * optional force_open bool If force_open should be passed to ui_interact. - **/ -/datum/nanoui/proc/update(force_open = 0) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) - - /** - * private - * - * Update the status/visibility of the NanoUI for its user. - * - * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). - **/ -/datum/nanoui/proc/update_status(push = 0) - var/new_status = src_object.nano_state(user, state) - if(master_ui) - new_status = min(new_status, master_ui.status) - - if(new_status == NANO_CLOSE) - close() - else - set_status(new_status, push) - - /** - * private - * - * Set the status/visibility of the NanoUI. - * - * required status int The status to set (NANO_CLOSE/NANO_DISABLED/NANO_UPDATE/NANO_INTERACTIVE). - * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). - **/ -/datum/nanoui/proc/set_status(status, push = 0) - if(src.status != status) // Only update if status has changed. - if(src.status == NANO_DISABLED) - src.status = status - if(push) - update() - else - src.status = status - if(status == NANO_DISABLED || push) // Update if the UI just because disabled, or a push is requested. - push_data(null, force = 1) \ No newline at end of file diff --git a/code/modules/nano/states/admin.dm b/code/modules/nano/states/admin.dm deleted file mode 100644 index d4048b9e11d..00000000000 --- a/code/modules/nano/states/admin.dm +++ /dev/null @@ -1,12 +0,0 @@ - /** - * NanoUI State: admin_state - * - * Checks that the user is an admin, end-of-story. - **/ - -/var/global/datum/nano_state/admin_state/admin_state = new() - -/datum/nano_state/admin_state/can_use_topic(atom/movable/src_object, mob/user) - if(check_rights_for(user.client, R_ADMIN)) - return NANO_INTERACTIVE - return NANO_CLOSE diff --git a/code/modules/nano/states/conscious.dm b/code/modules/nano/states/conscious.dm deleted file mode 100644 index 07574e91da7..00000000000 --- a/code/modules/nano/states/conscious.dm +++ /dev/null @@ -1,12 +0,0 @@ - /** - * NanoUI State: conscious_state - * - * Only checks if the user is conscious. - **/ - -/var/global/datum/nano_state/conscious_state/conscious_state = new() - -/datum/nano_state/conscious_state/can_use_topic(atom/movable/src_object, mob/user) - if(user.stat == CONSCIOUS) - return NANO_INTERACTIVE - return NANO_CLOSE diff --git a/code/modules/nano/states/contained.dm b/code/modules/nano/states/contained.dm deleted file mode 100644 index 89b18d0b136..00000000000 --- a/code/modules/nano/states/contained.dm +++ /dev/null @@ -1,12 +0,0 @@ - /** - * NanoUI State: contained_state - * - * Checks that the user is inside the src_object. - **/ - -/var/global/datum/nano_state/contained_state/contained_state = new() - -/datum/nano_state/contained_state/can_use_topic(atom/movable/src_object, mob/user) - if(!src_object.contains(user)) - return NANO_CLOSE - return user.shared_nano_interaction(src_object) diff --git a/code/modules/nano/states/deep_inventory.dm b/code/modules/nano/states/deep_inventory.dm deleted file mode 100644 index d01f43bb2f4..00000000000 --- a/code/modules/nano/states/deep_inventory.dm +++ /dev/null @@ -1,12 +0,0 @@ - /** - * NanoUI State: deep_inventory_state - * - * Checks that the src_object is in the user's fist-level (backpack, webbing, etc) inventory. - **/ - -/var/global/datum/nano_state/deep_inventory_state/deep_inventory_state = new() - -/datum/nano_state/deep_inventory_state/can_use_topic(atom/movable/src_object, mob/user) - if(!user.contains(src_object)) - return NANO_CLOSE - return user.shared_nano_interaction(src_object) diff --git a/code/modules/nano/states/hands.dm b/code/modules/nano/states/hands.dm deleted file mode 100644 index 32807335433..00000000000 --- a/code/modules/nano/states/hands.dm +++ /dev/null @@ -1,20 +0,0 @@ - /** - * NanoUI State: hands_state - * - * Checks that the src_object is in the user's hands. - **/ - -/var/global/datum/nano_state/hands_state/hands_state = new() - -/datum/nano_state/hands_state/can_use_topic(atom/movable/src_object, mob/user) - . = user.shared_nano_interaction(src_object) - if(. > NANO_CLOSE) - return min(., user.hands_can_use_topic(src_object)) - -/mob/proc/hands_can_use_topic(atom/movable/src_object) - return NANO_CLOSE - -/mob/living/hands_can_use_topic(atom/movable/src_object) - if(src_object in get_both_hands(src)) - return NANO_INTERACTIVE - return NANO_CLOSE \ No newline at end of file diff --git a/code/modules/nano/states/inventory.dm b/code/modules/nano/states/inventory.dm deleted file mode 100644 index e1160339e8a..00000000000 --- a/code/modules/nano/states/inventory.dm +++ /dev/null @@ -1,12 +0,0 @@ - /** - * NanoUI State: inventory_state - * - * Checks that the src_object is in the user's top-level (hand, ear, pocket, belt, etc) inventory. - **/ - -/var/global/datum/nano_state/inventory_state/inventory_state = new() - -/datum/nano_state/inventory_state/can_use_topic(atom/movable/src_object, mob/user) - if(!(src_object in user)) - return NANO_CLOSE - return user.shared_nano_interaction(src_object) diff --git a/code/modules/nano/states/physical.dm b/code/modules/nano/states/physical.dm deleted file mode 100644 index 569e284e447..00000000000 --- a/code/modules/nano/states/physical.dm +++ /dev/null @@ -1,21 +0,0 @@ - /** - * NanoUI State: physical_state - * - * Short-circuits the default state to only check physical distance. - **/ - -/var/global/datum/nano_state/physical/physical_state = new() - -/datum/nano_state/physical/can_use_topic(atom/movable/src_object, mob/user) - . = user.shared_nano_interaction(src_object) - if(. > NANO_CLOSE) - return min(., user.physical_can_use_topic(src_object)) - -/mob/proc/physical_can_use_topic(atom/movable/src_object) - return NANO_CLOSE - -/mob/living/physical_can_use_topic(atom/movable/src_object) - return shared_living_nano_distance(src_object) - -/mob/living/silicon/physical_can_use_topic(atom/movable/src_object) - return max(NANO_UPDATE, shared_living_nano_distance(src_object)) // Silicons can always see. diff --git a/code/modules/nano/states/self.dm b/code/modules/nano/states/self.dm deleted file mode 100644 index 9817c68ac0e..00000000000 --- a/code/modules/nano/states/self.dm +++ /dev/null @@ -1,12 +0,0 @@ - /** - * NanoUI State: self_state - * - * Only checks that the user and src_object are the same. - **/ - -/var/global/datum/nano_state/self_state/self_state = new() - -/datum/nano_state/self_state/can_use_topic(atom/movable/src_object, mob/user) - if(src_object != user) - return NANO_CLOSE - return user.shared_nano_interaction(src_object) diff --git a/code/modules/nano/states/states.dm b/code/modules/nano/states/states.dm deleted file mode 100644 index 532f7e4dfb9..00000000000 --- a/code/modules/nano/states/states.dm +++ /dev/null @@ -1,112 +0,0 @@ - /** - * NanoUI States - * - * Base state and helpers for states. Just does some sanity checks, implement a state for in-depth checks. - **/ - - /** - * public - * - * Checks if a user can use src_object's NanoUI, under the given state. - * - * required user mob The mob who opened/is using the NanoUI. - * required state datum/nano_state The state to check. - * - * return NANO_state The state of the UI. - **/ -/atom/proc/nano_state(mob/user, datum/nano_state/state) - var/src_object = nano_host() - - if(istype(user, /mob/dead/observer)) // Special-case ghosts. - if(check_rights_for(user.client, R_ADMIN)) - return NANO_INTERACTIVE // Admins can interact anyway. - if(get_dist(src_object, src) > user.client.view) - return NANO_CLOSE // Keep ghosts from opening too many NanoUIs. - return NANO_UPDATE // Ghosts can only view. - return state.can_use_topic(src_object, user) // Check if the state allows interaction. - - /** - * private - * - * Checks if a user can use src_object's NanoUI, and returns the state. - * Can call a mob proc, which allows overrides for each mob. - * - * required src_object atom/movable The object which owns the NanoUI. - * required user mob The mob who opened/is using the NanoUI. - * - * return NANO_state The state of the UI. - **/ -/datum/nano_state/proc/can_use_topic(atom/movable/src_object, mob/user) - return NANO_CLOSE // Don't allow interaction by default. - - - /** - * public - * - * Standard interaction/sanity checks. Different mob types may have overrides. - * - * return NANO_state The state of the UI. - **/ -/mob/proc/shared_nano_interaction(atom/movable/src_object) - if(!client || stat) // Close NanoUIs if mindless or dead/unconcious. - return NANO_CLOSE - // Update NanoUIs if incapicitated but concious. - else if(incapacitated() || lying) - return NANO_UPDATE - return NANO_INTERACTIVE - -/mob/living/carbon/human/shared_nano_interaction(atom/movable/src_object) - // If we have telekinesis and remain close enough, allow interaction. - if(dna.check_mutation(TK)) - if(tkMaxRangeCheck(src, src_object)) - return NANO_INTERACTIVE - return ..() - -/mob/living/silicon/ai/shared_nano_interaction(atom/movable/src_object) - if(lacks_power()) // Close NanoUIs if the AI is unpowered. - return NANO_CLOSE - return ..() - -/mob/living/silicon/robot/shared_nano_interaction(atom/movable/src_object) - if(cell.charge <= 0) // Close NanoUIs if the Borg is unpowered. - return NANO_CLOSE - if(lockcharge) // Disable NanoUIs if the Borg is locked. - return NANO_DISABLED - return ..() - -/** - * public - * - * Check the distance for a living mob. - * Really only used for checks outside the context of a mob. - * Otherwise, use shared_living_nano_distance(). - * - * required src_object atom/movable The object which owns the NanoUI. - * required user mob The mob who opened/is using the NanoUI. - * - * return NANO_state The state of the UI. - **/ -/atom/proc/contents_nano_distance(atom/movable/src_object, mob/living/user) - return user.shared_living_nano_distance(src_object) // Just call this mob's check. - - /** - * public - * - * Distance versus interaction check. - * - * required src_object atom/movable The object which owns the NanoUI. - * - * return NANO_state The state of the UI. - **/ -/mob/living/proc/shared_living_nano_distance(atom/movable/src_object) - if(!(src_object in view(4, src))) // If the object is out of view, close it. - return NANO_CLOSE - - var/dist = get_dist(src_object, src) - if(dist <= 1) // Open and interact if 1-0 tiles away. - return NANO_INTERACTIVE - else if(dist <= 2) // View only if 2-3 tiles away. - return NANO_UPDATE - else if(dist <= 5) // Disable if 5 tiles away. - return NANO_DISABLED - return NANO_CLOSE // Otherwise, we got nothing. \ No newline at end of file diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 3d3e32b5b10..3edf26b56e8 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -131,6 +131,12 @@ desc = "A polaroid camera, some say it can see ghosts!" see_ghosts = 1 +/obj/item/device/camera/detective + name = "Detective's camera" + desc = "A polaroid camera with extra capacity for crime investigations." + pictures_max = 30 + pictures_left = 30 + /obj/item/device/camera/siliconcam //camera AI can take pictures with name = "silicon photo camera" diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 240c534e634..9f6fe1b90e6 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -626,10 +626,10 @@ else ui_interact(user) -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "apc", name, 550, 550) + ui = new(user, src, ui_key, "apc", name, 460, 520) ui.open() /obj/machinery/power/apc/get_ui_data(mob/user) @@ -747,12 +747,22 @@ if(!can_use(usr, 1)) return + if(locked && !usr.has_unlimited_silicon_privilege) + return + switch(action) if("lock") + if(usr.has_unlimited_silicon_privilege) + if(emagged || (stat & (BROKEN|MAINT))) + usr << "The APC does not respond to the command." + else + locked = !locked + update_icon() + if("cover") coverlocked = !coverlocked - if ("breaker") + if("breaker") toggle_breaker() - if("chargemode") + if("charge") chargemode = !chargemode if(!chargemode) charging = 0 @@ -773,19 +783,12 @@ environ = setsubsystem(val) update_icon() update() - if("toggleaccess") - if(usr.has_unlimited_silicon_privilege) - if(emagged || (stat & (BROKEN|MAINT))) - usr << "The APC does not respond to the command." - else - locked = !locked - update_icon() if("overload") if(usr.has_unlimited_silicon_privilege) src.overload_lighting() if("hack") var/mob/living/silicon/ai/malfai = usr - if(get_malf_status(malfai)==1) + if(get_malf_status(malfai) == 1) if (malfai.malfhacking) malfai << "You are already hacking an APC." return 1 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b2ca9ae4a1b..9a021cd1b4e 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -468,6 +468,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list ( \ item_state = "coil_red" max_amount = MAXCOIL amount = MAXCOIL + merge_type = /obj/item/stack/cable_coil // This is here to let its children merge between themselves item_color = "red" desc = "A coil of power cable." throwforce = 0 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index a51b1f0c7bd..9d0238fba71 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -256,22 +256,27 @@ else if(input_attempt && input_available > 0 && input_available >= input_level) inputting = 1 + else + inputting = 0 //outputting - if(outputting) - output_used = min( charge/SMESRATE, output_level) //limit output to that stored + if(output_attempt) + if(outputting) + output_used = min( charge/SMESRATE, output_level) //limit output to that stored - charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) + charge -= output_used*SMESRATE // reduce the storage (may be recovered in /restore() if excessive) - add_avail(output_used) // add output to powernet (smes side) + add_avail(output_used) // add output to powernet (smes side) - if(output_used < 0.0001) // either from no charge or set to 0 - outputting = 0 - investigate_log("lost power and turned off","singulo") - else if(output_attempt && charge > output_level && output_level > 0) - outputting = 1 + if(output_used < 0.0001) // either from no charge or set to 0 + outputting = 0 + investigate_log("lost power and turned off","singulo") + else if(output_attempt && charge > output_level && output_level > 0) + outputting = 1 + else + output_used = 0 else - output_used = 0 + outputting = 0 // only update icon if state changed if(last_disp != chargedisplay() || last_chrg != inputting || last_onln != outputting) @@ -324,10 +329,10 @@ return ui_interact(user) -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "smes", name, 500, 455) + ui = new(user, src, ui_key, "smes", name, 340, 440) ui.open() /obj/machinery/power/smes/get_ui_data() @@ -364,7 +369,7 @@ log_smes(usr.ckey) update_icon() if("input") - switch(params["set"]) + switch(params["input"]) if("custom") var/custom = input(usr, "What rate would you like this SMES to attempt to charge at? Max is [input_level_max].") as null|num if(custom) @@ -380,7 +385,7 @@ input_level = Clamp(input_level, 0, input_level_max) log_smes(usr.ckey) if("output") - switch(params["set"]) + switch(params["output"]) if("custom") var/custom = input(usr, "What rate would you like this SMES to attempt to output at? Max is [output_level_max].") as null|num if(custom) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 58f62ad9f8f..f138b106657 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -369,10 +369,10 @@ return ui_interact(user) -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "solar_control", name, 515, 425) + ui = new(user, src, ui_key, "solar_control", name, 465, 400) ui.open() /obj/machinery/power/solar_control/get_ui_data() diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 818601f831d..ea35c457cb9 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -176,7 +176,7 @@ name = "wt550 magazine (4.6x30mm)" icon_state = "46x30mmt-20" ammo_type = /obj/item/ammo_casing/c46x30mm - caliber = "4x6x30mm" + caliber = "4.6x30mm" max_ammo = 20 /obj/item/ammo_box/magazine/wt550m9/update_icon() diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 80f135be1ba..681db297fc3 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -37,7 +37,6 @@ if(istype(AM, mag_type)) if(magazine) user << "You perform a tactical reload on \the [src], replacing the magazine." - user.say(pick("I'M RELOADING!!!", "NEW MAG IN!!!", "CHANGING MAG!!!", "COVER ME! I'M RELOADING!!!", "RELOADING!!!")) magazine.loc = get_turf(src.loc) magazine.update_icon() magazine = null @@ -233,4 +232,4 @@ fire_sound = 'sound/weapons/Gunshot_smg.ogg' can_suppress = 0 burst_size = 3 - fire_delay = 1 + fire_delay = 1 \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index e29f2604fe5..c65d57658b2 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -85,10 +85,10 @@ return ui_interact(user) -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "chem_dispenser", name, 530, 700) + ui = new(user, src, ui_key, "chem_dispenser", name, 550, 700) ui.open() /obj/machinery/chem_dispenser/get_ui_data() @@ -119,7 +119,7 @@ for(var/re in dispensable_reagents) var/datum/reagent/temp = chemical_reagents_list[re] if(temp) - chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("reagent" = temp.id)))) + chemicals.Add(list(list("title" = temp.name, "id" = temp.id))) data["chemicals"] = chemicals return data @@ -129,7 +129,7 @@ switch(action) if("amount") - amount = round(text2num(params["set"]), 5) // round to nearest 5 + amount = round(text2num(params["amount"]), 5) // round to nearest 5 if (amount < 0) // Since the user can actually type the commands himself, some sanity checking amount = 0 if (amount > 100) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 2e19186075b..eacd2fba7e9 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -87,6 +87,7 @@ if("temperature") desired_temp = Clamp(input("Please input the target temperature", name) as num, 0, 1000) if("eject") + on = FALSE eject_beaker() return 1 @@ -95,10 +96,10 @@ return ui_interact(user) -/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) +/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "chem_heater", name, 350, 400) + ui = new(user, src, ui_key, "chem_heater", name, 275, 400) ui.open() /obj/machinery/chem_heater/get_ui_data() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index a1eb743a34e..39986a13f8f 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -141,9 +141,8 @@ */ /datum/reagent/water/reaction_obj(obj/O, reac_volume) - if(istype(O,/obj/item)) - var/obj/item/Item = O - Item.extinguish() + if(istype(O)) + O.extinguish() // Monkey cube if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) @@ -163,10 +162,11 @@ */ /datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with water can help put them out! - if(!istype(M, /mob/living)) + if(!istype(M)) return if(method == TOUCH) M.adjust_fire_stacks(-(reac_volume / 10)) + M.ExtinguishMob() ..() /datum/reagent/water/holywater diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 100c6e85271..47d9191bcfd 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -5,7 +5,7 @@ icon_state = null w_class = 1 var/amount_per_transfer_from_this = 5 - var/list/possible_transfer_amounts = list(5,10,15,25,30) + var/list/possible_transfer_amounts = list(5,10,15,20,25,30) var/volume = 30 var/list/list_reagents = null var/spawned_disease = null diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index e88662c1770..11ad8afc028 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -1,7 +1,7 @@ /obj/item/weapon/reagent_containers/glass name = "glass" amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5, 10, 15, 25, 30, 50) + possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50) volume = 50 flags = OPENCONTAINER spillable = 1 @@ -197,7 +197,7 @@ materials = list(MAT_GLASS=2500) volume = 100 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,25,30,50,100) + possible_transfer_amounts = list(5,10,15,20,25,30,50,100) flags = OPENCONTAINER /obj/item/weapon/reagent_containers/glass/beaker/noreact @@ -216,7 +216,7 @@ materials = list(MAT_GLASS=5000) volume = 300 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,25,30,50,100,300) + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300) flags = OPENCONTAINER /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone @@ -253,7 +253,7 @@ materials = list(MAT_METAL=200) w_class = 3 amount_per_transfer_from_this = 20 - possible_transfer_amounts = list(10,20,30,50,70) + possible_transfer_amounts = list(10,15,20,25,30,50,70) volume = 70 flags = OPENCONTAINER | BLOCKHAIR slot_flags = SLOT_HEAD @@ -290,4 +290,4 @@ . = ..() slot_equipment_priority.Insert(index, slot_head) return - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 135b716506b..f35a8196405 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -114,7 +114,7 @@ /obj/item/weapon/stock_parts/matter_bin name = "matter bin" - desc = "A container for hold compressed matter awaiting re-construction." + desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "matter_bin" origin_tech = "materials=1" materials = list(MAT_METAL=80) @@ -155,7 +155,7 @@ /obj/item/weapon/stock_parts/matter_bin/adv name = "advanced matter bin" - desc = "A container for hold compressed matter awaiting re-construction." + desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "advanced_matter_bin" origin_tech = "materials=3" rating = 2 @@ -197,7 +197,7 @@ /obj/item/weapon/stock_parts/matter_bin/super name = "super matter bin" - desc = "A container for hold compressed matter awaiting re-construction." + desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "super_matter_bin" origin_tech = "materials=5" rating = 3 @@ -239,7 +239,7 @@ /obj/item/weapon/stock_parts/matter_bin/bluespace name = "bluespace matter bin" - desc = "A container for hold compressed matter awaiting re-construction." + desc = "A container designed to hold compressed matter awaiting reconstruction." icon_state = "bluespace_matter_bin" origin_tech = "materials=6" rating = 4 @@ -301,4 +301,4 @@ icon = 'icons/obj/stock_parts.dmi' icon_state = "capacitor" desc = "A debug item for research." - origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8" \ No newline at end of file + origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;engineering=8;plasmatech=8" diff --git a/code/modules/nano/external.dm b/code/modules/tgui/external.dm similarity index 50% rename from code/modules/nano/external.dm rename to code/modules/tgui/external.dm index 7a15197eedc..1efa5cee8fe 100644 --- a/code/modules/nano/external.dm +++ b/code/modules/tgui/external.dm @@ -1,41 +1,36 @@ /** - * NanoUI External + * tgui external * - * Contains all external NanoUI declarations. - * - * /tg/station user interface library - * thanks to baystation12 - * - * modified by neersighted + * Contains all external tgui declarations. **/ /** * public * - * Used to open and update NanoUIs. - * If this proc is not implemented properly, the NanoUI will not update correctly. + * Used to open and update UIs. + * If this proc is not implemented properly, the UI will not update correctly. * - * required user mob The mob who opened/is using the NanoUI. - * optional ui_key string The ui_key of the NanoUI. - * optional ui datum/nanoui The UI to be updated, if it exists. + * required user mob The mob who opened/is using the UI. + * optional ui_key string The ui_key of the UI. + * optional ui datum/tgui The UI to be updated, if it exists. * optional force_open bool If the UI should be re-opened instead of updated. - * optional master_ui datum/nanoui The parent NanoUI. - * optional state datum/nano_state The state used to determine status. + * optional master_ui datum/tgui The parent UI. + * optional state datum/ui_state The state used to determine status. **/ -/atom/movable/proc/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, \ - force_open = 0, datum/nano_ui/master_ui = null, \ - datum/nano_state/state = default_state) +/atom/movable/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, \ + force_open = 0, datum/tgui/master_ui = null, \ + datum/ui_state/state = default_state) return -1 // Sorta implemented. /** * public * - * Data to be sent to the NanoUI. - * This must be implemented for a NanoUI to work. + * Data to be sent to the UI. + * This must be implemented for a UI to work. * - * required user mob The mob interacting with the NanoUI. + * required user mob The mob interacting with the UI. * - * return list Data to be sent to the NanoUI. + * return list Data to be sent to the UI. **/ /atom/movable/proc/get_ui_data(mob/user) return list() // Not implemented. @@ -44,7 +39,7 @@ /** * public * - * Called on a NanoUI when the UI receieves a href. + * Called on a UI when the UI receieves a href. * Think of this as Topic(). * * required action string The action/button that has been invoked by the user. @@ -59,34 +54,34 @@ /** * private * - * The NanoUI's host object (usually src_object). - * Used internally by nano_state(s). + * The UI's host object (usually src_object). + * Used internally by ui_state(s). **/ -/atom/proc/nano_host() +/atom/proc/ui_host() return src /** * global * - * Used to track NanoUIs for a mob. + * Used to track UIs for a mob. **/ /mob/var/list/open_uis = list() /** * verb * - * Called by NanoUIs when they are closed. + * Called by UIs when they are closed. * Must be a verb so winset() can call it. * * required uiref ref The UI that was closed. **/ -/client/verb/nanoclose(uiref as text) +/client/verb/uiclose(uiref as text) // Name the verb, and hide it from the user panel. - set name = "nanoclose" + set name = "uiclose" set hidden = 1 // Get the UI based on the ref. - var/datum/nanoui/ui = locate(uiref) + var/datum/tgui/ui = locate(uiref) // If we found the UI, close it. if(istype(ui)) diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm new file mode 100644 index 00000000000..c9a3bb467c4 --- /dev/null +++ b/code/modules/tgui/states/admin.dm @@ -0,0 +1,12 @@ + /** + * tgui state: admin_state + * + * Checks that the user is an admin, end-of-story. + **/ + +/var/global/datum/ui_state/admin_state/admin_state = new() + +/datum/ui_state/admin_state/can_use_topic(atom/movable/src_object, mob/user) + if(check_rights_for(user.client, R_ADMIN)) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm new file mode 100644 index 00000000000..1b781a458d7 --- /dev/null +++ b/code/modules/tgui/states/conscious.dm @@ -0,0 +1,12 @@ + /** + * tgui state: conscious_state + * + * Only checks if the user is conscious. + **/ + +/var/global/datum/ui_state/conscious_state/conscious_state = new() + +/datum/ui_state/conscious_state/can_use_topic(atom/movable/src_object, mob/user) + if(user.stat == CONSCIOUS) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm new file mode 100644 index 00000000000..20cda3241e0 --- /dev/null +++ b/code/modules/tgui/states/contained.dm @@ -0,0 +1,12 @@ + /** + * tgui state: contained_state + * + * Checks that the user is inside the src_object. + **/ + +/var/global/datum/ui_state/contained_state/contained_state = new() + +/datum/ui_state/contained_state/can_use_topic(atom/movable/src_object, mob/user) + if(!src_object.contains(user)) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm new file mode 100644 index 00000000000..4fef9ad5b3c --- /dev/null +++ b/code/modules/tgui/states/deep_inventory.dm @@ -0,0 +1,12 @@ + /** + * tgui state: deep_inventory_state + * + * Checks that the src_object is in the user's fist-level (backpack, webbing, etc) inventory. + **/ + +/var/global/datum/ui_state/deep_inventory_state/deep_inventory_state = new() + +/datum/ui_state/deep_inventory_state/can_use_topic(atom/movable/src_object, mob/user) + if(!user.contains(src_object)) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/nano/states/default.dm b/code/modules/tgui/states/default.dm similarity index 52% rename from code/modules/nano/states/default.dm rename to code/modules/tgui/states/default.dm index cd5155b9c05..8e1c3e8dec9 100644 --- a/code/modules/nano/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -1,60 +1,60 @@ /** - * NanoUI State: default_state + * tgui state: default_state * * Checks a number of things -- mostly physical distance for humans and view for robots. **/ -/var/global/datum/nano_state/default/default_state = new() +/var/global/datum/ui_state/default/default_state = new() -/datum/nano_state/default/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/default/can_use_topic(atom/movable/src_object, mob/user) return user.default_can_use_topic(src_object) // Call the individual mob-overriden procs. /mob/proc/default_can_use_topic(atom/movable/src_object) - return NANO_CLOSE // Don't allow interaction by default. + return UI_CLOSE // Don't allow interaction by default. /mob/living/default_can_use_topic(atom/movable/src_object) - . = shared_nano_interaction(src_object) - if(. > NANO_CLOSE) - . = min(., shared_living_nano_distance(src_object)) // Check the distance... - if(. == NANO_INTERACTIVE) // Non-human living mobs can only look, not touch. - return NANO_UPDATE + . = shared_ui_interaction(src_object) + if(. > UI_CLOSE) + . = min(., shared_living_ui_distance(src_object)) // Check the distance... + if(. == UI_INTERACTIVE) // Non-human living mobs can only look, not touch. + return UI_UPDATE /mob/living/carbon/human/default_can_use_topic(atom/movable/src_object) - . = shared_nano_interaction(src_object) - if(. > NANO_CLOSE) - . = min(., shared_living_nano_distance(src_object)) // Check the distance... + . = shared_ui_interaction(src_object) + if(. > UI_CLOSE) + . = min(., shared_living_ui_distance(src_object)) // Check the distance... // Derp a bit if we have brain loss. if(prob(getBrainLoss())) - return NANO_UPDATE + return UI_UPDATE /mob/living/silicon/robot/default_can_use_topic(atom/movable/src_object) - . = shared_nano_interaction(src_object) - if(. <= NANO_DISABLED) + . = shared_ui_interaction(src_object) + if(. <= UI_DISABLED) return // Robots can interact with anything they can see. if(get_dist(src, src_object) <= src.client.view) - return NANO_INTERACTIVE - return NANO_DISABLED // Otherwise they can keep the UI open. + return UI_INTERACTIVE + return UI_DISABLED // Otherwise they can keep the UI open. /mob/living/silicon/ai/default_can_use_topic(atom/movable/src_object) - . = shared_nano_interaction(src_object) - if(. < NANO_INTERACTIVE) + . = shared_ui_interaction(src_object) + if(. < UI_INTERACTIVE) return // The AI can interact with anything it can see nearby, or with cameras. if((get_dist(src, src_object) <= src.client.view) || cameranet.checkTurfVis(get_turf_pixel(src_object))) - return NANO_INTERACTIVE - return NANO_CLOSE + return UI_INTERACTIVE + return UI_CLOSE /mob/living/simple_animal/drone/default_can_use_topic(atom/movable/src_object) - . = shared_nano_interaction(src_object) - if(. > NANO_CLOSE) - . = min(., shared_living_nano_distance(src_object)) // Drones can only use things they're near. + . = shared_ui_interaction(src_object) + if(. > UI_CLOSE) + . = min(., shared_living_ui_distance(src_object)) // Drones can only use things they're near. /mob/living/silicon/pai/default_can_use_topic(atom/movable/src_object) // pAIs can only use themselves and the owner's radio. if((src_object == src || src_object == radio) && !stat) - return NANO_INTERACTIVE + return UI_INTERACTIVE else return ..() diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm new file mode 100644 index 00000000000..536a90597e4 --- /dev/null +++ b/code/modules/tgui/states/hands.dm @@ -0,0 +1,20 @@ + /** + * tgui state: hands_state + * + * Checks that the src_object is in the user's hands. + **/ + +/var/global/datum/ui_state/hands_state/hands_state = new() + +/datum/ui_state/hands_state/can_use_topic(atom/movable/src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.hands_can_use_topic(src_object)) + +/mob/proc/hands_can_use_topic(atom/movable/src_object) + return UI_CLOSE + +/mob/living/hands_can_use_topic(atom/movable/src_object) + if(src_object in get_both_hands(src)) + return UI_INTERACTIVE + return UI_CLOSE \ No newline at end of file diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm new file mode 100644 index 00000000000..a5f7233f00d --- /dev/null +++ b/code/modules/tgui/states/inventory.dm @@ -0,0 +1,12 @@ + /** + * tgui state: inventory_state + * + * Checks that the src_object is in the user's top-level (hand, ear, pocket, belt, etc) inventory. + **/ + +/var/global/datum/ui_state/inventory_state/inventory_state = new() + +/datum/ui_state/inventory_state/can_use_topic(atom/movable/src_object, mob/user) + if(!(src_object in user)) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/nano/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm similarity index 66% rename from code/modules/nano/states/notcontained.dm rename to code/modules/tgui/states/notcontained.dm index 11dfe67025c..8df75b57626 100644 --- a/code/modules/nano/states/notcontained.dm +++ b/code/modules/tgui/states/notcontained.dm @@ -1,22 +1,22 @@ /** - * NanoUI State: notcontained_state + * tgui state: notcontained_state * * Checks that the user is not inside src_object, and then makes the default checks. **/ -/var/global/datum/nano_state/notcontained_state/notcontained_state = new() +/var/global/datum/ui_state/notcontained_state/notcontained_state = new() -/datum/nano_state/notcontained_state/can_use_topic(atom/movable/src_object, mob/user) - . = user.shared_nano_interaction(src_object) - if(. > NANO_CLOSE) +/datum/ui_state/notcontained_state/can_use_topic(atom/movable/src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) return min(., user.notcontained_can_use_topic(src_object)) /mob/proc/notcontained_can_use_topic(atom/movable/src_object) - return NANO_CLOSE + return UI_CLOSE /mob/living/notcontained_can_use_topic(atom/movable/src_object) if(src_object.contains(src)) - return NANO_CLOSE // Close if we're inside it. + return UI_CLOSE // Close if we're inside it. return default_can_use_topic(src_object) /mob/living/silicon/notcontained_can_use_topic(atom/movable/src_object) diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm new file mode 100644 index 00000000000..a3fae3b276e --- /dev/null +++ b/code/modules/tgui/states/physical.dm @@ -0,0 +1,21 @@ + /** + * tgui state: physical_state + * + * Short-circuits the default state to only check physical distance. + **/ + +/var/global/datum/ui_state/physical/physical_state = new() + +/datum/ui_state/physical/can_use_topic(atom/movable/src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.physical_can_use_topic(src_object)) + +/mob/proc/physical_can_use_topic(atom/movable/src_object) + return UI_CLOSE + +/mob/living/physical_can_use_topic(atom/movable/src_object) + return shared_living_ui_distance(src_object) + +/mob/living/silicon/physical_can_use_topic(atom/movable/src_object) + return max(UI_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm new file mode 100644 index 00000000000..edb7c3ef300 --- /dev/null +++ b/code/modules/tgui/states/self.dm @@ -0,0 +1,12 @@ + /** + * tgui state: self_state + * + * Only checks that the user and src_object are the same. + **/ + +/var/global/datum/ui_state/self_state/self_state = new() + +/datum/ui_state/self_state/can_use_topic(atom/movable/src_object, mob/user) + if(src_object != user) + return UI_CLOSE + return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/states.dm b/code/modules/tgui/states/states.dm new file mode 100644 index 00000000000..195d9394e3e --- /dev/null +++ b/code/modules/tgui/states/states.dm @@ -0,0 +1,112 @@ + /** + * tgui states + * + * Base state and helpers for states. Just does some sanity checks, implement a state for in-depth checks. + **/ + + /** + * public + * + * Checks if a user can use src_object's UI, under the given state. + * + * required user mob The mob who opened/is using the UI. + * required state datum/ui_state The state to check. + * + * return UI_state The state of the UI. + **/ +/atom/proc/ui_state(mob/user, datum/ui_state/state) + var/src_object = ui_host() + + if(istype(user, /mob/dead/observer)) // Special-case ghosts. + if(check_rights_for(user.client, R_ADMIN)) + return UI_INTERACTIVE // Admins can interact anyway. + if(get_dist(src_object, src) > user.client.view) + return UI_CLOSE // Keep ghosts from opening too many UIs. + return UI_UPDATE // Ghosts can only view. + return state.can_use_topic(src_object, user) // Check if the state allows interaction. + + /** + * private + * + * Checks if a user can use src_object's UI, and returns the state. + * Can call a mob proc, which allows overrides for each mob. + * + * required src_object atom/movable The object which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + **/ +/datum/ui_state/proc/can_use_topic(atom/movable/src_object, mob/user) + return UI_CLOSE // Don't allow interaction by default. + + + /** + * public + * + * Standard interaction/sanity checks. Different mob types may have overrides. + * + * return UI_state The state of the UI. + **/ +/mob/proc/shared_ui_interaction(atom/movable/src_object) + if(!client || stat) // Close UIs if mindless or dead/unconcious. + return UI_CLOSE + // Update UIs if incapicitated but concious. + else if(incapacitated() || lying) + return UI_UPDATE + return UI_INTERACTIVE + +/mob/living/carbon/human/shared_ui_interaction(atom/movable/src_object) + // If we have telekinesis and remain close enough, allow interaction. + if(dna.check_mutation(TK)) + if(tkMaxRangeCheck(src, src_object)) + return UI_INTERACTIVE + return ..() + +/mob/living/silicon/ai/shared_ui_interaction(atom/movable/src_object) + if(lacks_power()) // Close UIs if the AI is unpowered. + return UI_CLOSE + return ..() + +/mob/living/silicon/robot/shared_ui_interaction(atom/movable/src_object) + if(cell.charge <= 0) // Close UIs if the Borg is unpowered. + return UI_CLOSE + if(lockcharge) // Disable UIs if the Borg is locked. + return UI_DISABLED + return ..() + +/** + * public + * + * Check the distance for a living mob. + * Really only used for checks outside the context of a mob. + * Otherwise, use shared_living_ui_distance(). + * + * required src_object atom/movable The object which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + **/ +/atom/proc/contents_ui_distance(atom/movable/src_object, mob/living/user) + return user.shared_living_ui_distance(src_object) // Just call this mob's check. + + /** + * public + * + * Distance versus interaction check. + * + * required src_object atom/movable The object which owns the UI. + * + * return UI_state The state of the UI. + **/ +/mob/living/proc/shared_living_ui_distance(atom/movable/src_object) + if(!(src_object in view(4, src))) // If the object is out of view, close it. + return UI_CLOSE + + var/dist = get_dist(src_object, src) + if(dist <= 1) // Open and interact if 1-0 tiles away. + return UI_INTERACTIVE + else if(dist <= 2) // View only if 2-3 tiles away. + return UI_UPDATE + else if(dist <= 5) // Disable if 5 tiles away. + return UI_DISABLED + return UI_CLOSE // Otherwise, we got nothing. \ No newline at end of file diff --git a/code/modules/nano/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm similarity index 53% rename from code/modules/nano/states/zlevel.dm rename to code/modules/tgui/states/zlevel.dm index 199c22e22c0..2f06f36c8f8 100644 --- a/code/modules/nano/states/zlevel.dm +++ b/code/modules/tgui/states/zlevel.dm @@ -1,14 +1,14 @@ /** - * NanoUI State: z_state + * tgui state: z_state * * Only checks that the Z-level of the user and src_object are the same. **/ -/var/global/datum/nano_state/z_state/z_state = new() +/var/global/datum/ui_state/z_state/z_state = new() -/datum/nano_state/z_state/can_use_topic(atom/movable/src_object, mob/user) +/datum/ui_state/z_state/can_use_topic(atom/movable/src_object, mob/user) var/turf/turf_obj = get_turf(src_object) var/turf/turf_usr = get_turf(user) if(!turf_obj || !turf_usr || !(turf_obj.z == turf_usr.z)) - return NANO_CLOSE - return NANO_INTERACTIVE + return UI_CLOSE + return UI_INTERACTIVE diff --git a/code/modules/nano/subsystem.dm b/code/modules/tgui/subsystem.dm similarity index 60% rename from code/modules/nano/subsystem.dm rename to code/modules/tgui/subsystem.dm index b539566bd45..14b4dd5f7e5 100644 --- a/code/modules/nano/subsystem.dm +++ b/code/modules/tgui/subsystem.dm @@ -1,34 +1,29 @@ /** - * NanoUI Subsystem + * tgui subsystem * - * Contains all NanoUI state and subsystem code. - * - * /tg/station user interface library - * thanks to baystation12 - * - * modified by neersighted + * Contains all tgui state and subsystem code. **/ /** * public * - * Get a open NanoUI given a user, src_object, and ui_key and try to update it with data. + * Get a open UI given a user, src_object, and ui_key and try to update it with data. * - * required user mob The mob who opened/is using the NanoUI. - * required src_object atom/movable The object which owns the NanoUI. - * required ui_key string The ui_key of the NanoUI. - * optional ui datum/nanoui The UI to be updated, if it exists. + * required user mob The mob who opened/is using the UI. + * required src_object atom/movable The object which owns the UI. + * required ui_key string The ui_key of the UI. + * optional ui datum/tgui The UI to be updated, if it exists. * optional data list The data to update the UI with, if it exists. * optional force_open bool If the UI should be re-opened instead of updated. * - * return datum/nanoui The found NanoUI. + * return datum/tgui The found UI. **/ -/datum/subsystem/nano/proc/try_update_ui(mob/user, atom/movable/src_object, ui_key, datum/nanoui/ui, \ +/datum/subsystem/tgui/proc/try_update_ui(mob/user, atom/movable/src_object, ui_key, datum/tgui/ui, \ list/data = null, force_open = 0) if(!data) data = src_object.get_ui_data(user) - if(isnull(ui)) // No NanoUI was passed, so look for one. + if(isnull(ui)) // No UI was passed, so look for one. ui = get_open_ui(user, src_object, ui_key) if(!isnull(ui)) @@ -43,22 +38,22 @@ /** * private * - * Get a open NanoUI given a user, src_object, and ui_key. + * Get a open UI given a user, src_object, and ui_key. * - * required user mob The mob who opened/is using the NanoUI. - * required src_object atom/movable The object which owns the NanoUI. - * required ui_key string The ui_key of the NanoUI. + * required user mob The mob who opened/is using the UI. + * required src_object atom/movable The object which owns the UI. + * required ui_key string The ui_key of the UI. * - * return datum/nanoui The found NanoUI. + * return datum/tgui The found UI. **/ -/datum/subsystem/nano/proc/get_open_ui(mob/user, atom/movable/src_object, ui_key) +/datum/subsystem/tgui/proc/get_open_ui(mob/user, atom/movable/src_object, ui_key) var/src_object_key = "\ref[src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return null // No UIs open. else if(isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list)) return null // No UIs open for this object. - for(var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) // Find UIs for this object. + for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) // Find UIs for this object. if(ui.user == user) // Make sure we have the right user return ui @@ -67,21 +62,21 @@ /** * private * - * Update all NanoUIs attached to src_object. + * Update all UIs attached to src_object. * - * required src_object atom/movable The object which owns the NanoUIs. + * required src_object atom/movable The object which owns the UIs. * - * return int The number of NanoUIs updated. + * return int The number of UIs updated. **/ -/datum/subsystem/nano/proc/update_uis(atom/movable/src_object) +/datum/subsystem/tgui/proc/update_uis(atom/movable/src_object) var/src_object_key = "\ref[src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // Couldn't find any UIs for this object. var/update_count = 0 for(var/ui_key in open_uis[src_object_key]) - for(var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.nano_host()) // Check the UI is valid. + for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) + if(ui && ui.src_object && ui.user && ui.src_object.ui_host()) // Check the UI is valid. ui.process(force = 1) // Update the UI. update_count++ // Count each UI we update. return update_count @@ -89,21 +84,21 @@ /** * private * - * Close all NanoUIs attached to src_object. + * Close all UIs attached to src_object. * - * required src_object atom/movable The object which owns the NanoUIs. + * required src_object atom/movable The object which owns the UIs. * - * return int The number of NanoUIs closed. + * return int The number of UIs closed. **/ -/datum/subsystem/nano/proc/close_uis(atom/movable/src_object) +/datum/subsystem/tgui/proc/close_uis(atom/movable/src_object) var/src_object_key = "\ref[src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // Couldn't find any UIs for this object. var/close_count = 0 for(var/ui_key in open_uis[src_object_key]) - for(var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.nano_host()) // Check the UI is valid. + for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) + if(ui && ui.src_object && ui.user && ui.src_object.ui_host()) // Check the UI is valid. ui.close() // Close the UI. close_count++ // Count each UI we close. return close_count @@ -111,20 +106,20 @@ /** * private * - * Update all NanoUIs belonging to a user. + * Update all UIs belonging to a user. * - * required user mob The mob who opened/is using the NanoUI. + * required user mob The mob who opened/is using the UI. * optional src_object atom/movable If provided, only update UIs belonging this atom. * optional ui_key string If provided, only update UIs with this UI key. * - * return int The number of NanoUIs updated. + * return int The number of UIs updated. **/ -/datum/subsystem/nano/proc/update_user_uis(mob/user, atom/movable/src_object = null, ui_key = null) +/datum/subsystem/tgui/proc/update_user_uis(mob/user, atom/movable/src_object = null, ui_key = null) if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) return 0 // Couldn't find any UIs for this user. var/update_count = 0 - for(var/datum/nanoui/ui in user.open_uis) + for(var/datum/tgui/ui in user.open_uis) if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) ui.process(force = 1) // Update the UI. update_count++ // Count each UI we upadte. @@ -133,20 +128,20 @@ /** * private * - * Close all NanoUIs belonging to a user. + * Close all UIs belonging to a user. * - * required user mob The mob who opened/is using the NanoUI. + * required user mob The mob who opened/is using the UI. * optional src_object atom/movable If provided, only update UIs belonging this atom. * optional ui_key string If provided, only update UIs with this UI key. * - * return int The number of NanoUIs closed. + * return int The number of UIs closed. **/ -/datum/subsystem/nano/proc/close_user_uis(mob/user, atom/movable/src_object = null, ui_key = null) +/datum/subsystem/tgui/proc/close_user_uis(mob/user, atom/movable/src_object = null, ui_key = null) if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) return 0 // Couldn't find any UIs for this user. var/close_count = 0 - for(var/datum/nanoui/ui in user.open_uis) + for(var/datum/tgui/ui in user.open_uis) if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) ui.close() // Close the UI. close_count++ // Count each UI we close. @@ -155,11 +150,11 @@ /** * private * - * Add a NanoUI to the list of open UIs. + * Add a UI to the list of open UIs. * - * required ui datum/nanoui The UI to be added. + * required ui datum/tgui The UI to be added. **/ -/datum/subsystem/nano/proc/on_open(datum/nanoui/ui) +/datum/subsystem/tgui/proc/on_open(datum/tgui/ui) var/src_object_key = "\ref[ui.src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object. @@ -175,13 +170,13 @@ /** * private * - * Remove a NanoUI from the list of open UIs. + * Remove a UI from the list of open UIs. * - * required ui datum/nanoui The UI to be removed. + * required ui datum/tgui The UI to be removed. * * return bool If the UI was removed or not. **/ -/datum/subsystem/nano/proc/on_close(datum/nanoui/ui) +/datum/subsystem/tgui/proc/on_close(datum/tgui/ui) var/src_object_key = "\ref[ui.src_object]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // It wasn't open. @@ -198,35 +193,35 @@ /** * private * - * Handle client logout, by closing all their NanoUIs. + * Handle client logout, by closing all their UIs. * * required user mob The mob which logged out. * - * return int The number of NanoUIs closed. + * return int The number of UIs closed. **/ -/datum/subsystem/nano/proc/on_logout(mob/user) +/datum/subsystem/tgui/proc/on_logout(mob/user) return close_user_uis(user) /** * private * - * Handle clients switching mobs, by transfering their NanoUIs. + * Handle clients switching mobs, by transfering their UIs. * * required user source The client's original mob. * required user target The client's new mob. * - * return bool If the NanoUIs were transferred. + * return bool If the UIs were transferred. **/ -/datum/subsystem/nano/proc/on_transfer(mob/source, mob/target) +/datum/subsystem/tgui/proc/on_transfer(mob/source, mob/target) if(!source || isnull(source.open_uis) || !istype(source.open_uis, /list) || open_uis.len == 0) - return 0 // The old mob had no open NanoUIs. + return 0 // The old mob had no open UIs. if(isnull(target.open_uis) || !istype(target.open_uis, /list)) target.open_uis = list() // Create a list for the new mob if needed. - for(var/datum/nanoui/ui in source.open_uis) + for(var/datum/tgui/ui in source.open_uis) ui.user = target // Inform the UIs of their new owner. - target.open_uis.Add(ui) // Transfer all the NanoUIs. + target.open_uis.Add(ui) // Transfer all the UIs. source.open_uis.Cut() // Clear the old list. return 1 // Let the caller know we did it. diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm new file mode 100644 index 00000000000..42fa08b2f8b --- /dev/null +++ b/code/modules/tgui/tgui.dm @@ -0,0 +1,349 @@ + /** + * tgui + * + * /tg/station user interface library + **/ + + /** + * tgui datum (represents a UI). + **/ +/datum/tgui + var/mob/user // The mob who opened/is using the UI. + var/atom/movable/src_object // The object which owns the UI. + var/title // The title of te UI. + var/ui_key // The ui_key of the UI. This allows multiple UIs for one src_object. + var/window_id // The window_id for browse() and onclose(). + var/width = 0 // The window width. + var/height = 0 // The window height + var/window_options = list( // Extra options to winset(). + "focus" = 0, + "titlebar" = 1, + "can_resize" = 1, + "can_minimize" = 1, + "can_maximize" = 0, + "can_close" = 1, + "auto_format" = 0 + ) + var/atom/ref = null // An extra ref to call when the window is closed. + var/style = "nanotrasen" // The style to be used for this UI. + var/interface // The interface (template) to be used for this UI. + var/auto_update = 1 // Update the UI every MC tick. + var/list/initial_data // The data (and datastructure) used to initialize the UI. + var/status = UI_INTERACTIVE // The status/visibility of the UI. + var/datum/ui_state/state = null // Topic state used to determine status/interactability. + var/datum/tgui/master_ui // The parent UI. + var/list/datum/tgui/children = list() // Children of this UI. + + /** + * public + * + * Create a new UI. + * + * required user mob The mob who opened/is using the UI. + * required src_object atom/movable The object which owns the UI. + * required ui_key string The ui_key of the UI. + * required interface string The interface used to render the UI. + * optional title string The title of the UI. + * optional width int The window width. + * optional height int The window height. + * optional ref atom An extra ref to use when the window is closed. + * optional master_ui datum/tgui The parent UI. + * optional state datum/ui_state The state used to determine status. + * + * return datum/tgui The requested UI. + **/ +/datum/tgui/New(mob/user, atom/movable/src_object, ui_key, interface, \ + title, width = 0, height = 0, \ + atom/ref = null, datum/tgui/master_ui = null, \ + datum/ui_state/state = default_state) + src.user = user + src.src_object = src_object + src.ui_key = ui_key + src.window_id = "\ref[src_object]-[ui_key]" + + set_interface(interface) + + if(title) + src.title = sanitize(title) + if(width) + src.width = width + if(height) + src.height = height + + if(ref) + src.ref = ref + + src.master_ui = master_ui + if(master_ui) + master_ui.children += src + src.state = state + + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/tgui) + assets.send(user) + + /** + * public + * + * Open this UI (and initialize it with data). + * + * optional data list The data to intialize the UI with. + **/ +/datum/tgui/proc/open(list/data = null) + if(!user.client) + return // Bail if there is no client. + + update_status(push = 0) // Update the window status. + if(status == UI_CLOSE) + return // Bail if we should close. + + if(!initial_data) + if(!data) // If we don't have initial_data and data was not passed, get data from the src_object. + data = src_object.get_ui_data(user) + set_initial_data(data) // Otherwise use the passed data. + + var/window_size = "" + if(width && height) // If we have a width and height, use them. + window_size = "size=[width]x[height];" + + user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. + winset(user, window_id, "on-close=\"uiclose \ref[src]\"") // Instruct the client to signal UI when the window is closed. + SStgui.on_open(src) + + /** + * public + * + * Reinitialize the UI. + * (Possibly with a new interface and/or data). + * + * optional template string The name of the new interface. + * optional data list The new initial data. + **/ +/datum/tgui/proc/reinitialize(interface, list/data) + if(interface) + set_interface(interface) // Set a new interface. + if(data) + set_initial_data(data) // Replace the initial_data. + open() + + /** + * public + * + * Close the UI, and all its children. + **/ +/datum/tgui/proc/close() + user << browse(null, "window=[window_id]") // Close the window. + SStgui.on_close(src) + for(var/datum/tgui/child in children) // Loop through and close all children. + child.close() + + /** + * public + * + * Sets the browse() window options for this UI. + * + * required window_options list The window options to set. + **/ +/datum/tgui/proc/set_window_options(list/window_options) + src.window_options = window_options + + /** + * public + * + * Set the style for this UI. + * + * required style string The new UI style. + **/ +/datum/tgui/proc/set_style(style) + src.style = lowertext(style) + + /** + * public + * + * Set the interface (template) for this UI. + * + * required interface string The new UI interface. + **/ +/datum/tgui/proc/set_interface(interface) + src.interface = lowertext(interface) + + /** + * public + * + * Enable/disable auto-updating of the UI. + * + * required state bool Enable/disable auto-updating. + **/ +/datum/tgui/proc/set_auto_update(state = 1) + auto_update = state + + /** + * private + * + * Set the data to initialize the UI with. + * The datastructure cannot be changed by subsequent updates. + * + * optional data list The data/datastructure to initialize the UI with. + **/ +/datum/tgui/proc/set_initial_data(list/data) + initial_data = data + + /** + * private + * + * Generate HTML for this UI. + * + * return string UI HTML output. + **/ +/datum/tgui/proc/get_html() + // Poplate HTML with JSON. + return replacetextEx(SStgui.basehtml, "{}", get_json(initial_data)) + + /** + * private + * + * Get the config data/datastructure to initialize the UI with. + * + * return list The config data. + **/ +/datum/tgui/proc/get_config_data() + var/list/config_data = list( + "title" = title, + "status" = status, + "style" = style, + "interface" = interface, + "fancy" = user.client.prefs.tgui_fancy, + "locked" = user.client.prefs.tgui_lock, + "window" = window_id, + "ref" = "\ref[src]", + "user" = list( + "name" = user.name, + "ref" = "\ref[user]" + ), + "srcObject" = list( + "name" = src_object.name, + "ref" = "\ref[src_object]" + ) + ) + return config_data + + /** + * private + * + * Package the data to send to the UI, as JSON. + * This includes the UI data and config_data. + * + * return string The packaged JSON. + **/ +/datum/tgui/proc/get_json(list/data) + var/list/json_data = list() + + json_data["config"] = get_config_data() + if(!isnull(data)) + json_data["data"] = data + + // Generate the JSON; replace bad characters. + var/json = JSON.stringify(json_data) + json = replacetextEx(json, "\improper", "") + + return json + + /** + * private + * + * Handle clicks from the UI. + * Call the src_object's ui_act() if status is UI_INTERACTIVE. + * If the src_object's ui_act() returns 1, update all UIs attacked to it. + **/ +/datum/tgui/Topic(href, href_list) + update_status(push = 0) // Update the window state. + if(status != UI_INTERACTIVE || user != usr) + return // If UI is not interactive or usr calling Topic is not the UI user. + + var/action = href_list["action"] // Pull the action out. + href_list -= "action" + + var/update = src_object.ui_act(action, href_list, state) // Call ui_act() on the src_object. + if(src_object && update) + SStgui.update_uis(src_object) // If we have a src_object and its ui_act() told us to update. + + /** + * private + * + * Update the UI. + * Only updates the data if update is true, otherwise only updates the status. + * + * optional force bool If the UI should be forced to update. + **/ +/datum/tgui/process(force = 0) + if(!src_object || !user) // If the object or user died (or something else), abort. + close() + return + + if(status && (force || auto_update)) + update() // Update the UI if the status and update settings allow it. + else + update_status(push = 1) // Otherwise only update status. + + /** + * private + * + * Push data to an already open UI. + * + * required data list The data to send. + * optional force bool If the update should be sent regardless of state. + **/ +/datum/tgui/proc/push_data(data, force = 0) + update_status(push = 0) // Update the window state. + if(status <= UI_DISABLED && !force) + return // Cannot update UI, we have no visibility. + + // Send the new JSON to the recieveUpdate() Javascript function. + user << output(url_encode(get_json(data)), "[window_id].browser:receiveUpdate") + + + /** + * private + * + * Updates the UI by interacting with the src_object again, which will hopefully + * call try_ui_update on it. + * + * optional force_open bool If force_open should be passed to ui_interact. + **/ +/datum/tgui/proc/update(force_open = 0) + src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) + + /** + * private + * + * Update the status/visibility of the UI for its user. + * + * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + **/ +/datum/tgui/proc/update_status(push = 0) + var/new_status = src_object.ui_state(user, state) + if(master_ui) + new_status = min(new_status, master_ui.status) + + if(new_status == UI_CLOSE) + close() + else + set_status(new_status, push) + + /** + * private + * + * Set the status/visibility of the UI. + * + * required status int The status to set (UI_CLOSE/UI_DISABLED/UI_UPDATE/UI_INTERACTIVE). + * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + **/ +/datum/tgui/proc/set_status(status, push = 0) + if(src.status != status) // Only update if status has changed. + if(src.status == UI_DISABLED) + src.status = status + if(push) + update() + else + src.status = status + if(status == UI_DISABLED || push) // Update if the UI just because disabled, or a push is requested. + push_data(null, force = 1) \ No newline at end of file diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt index dde7edfc7b6..986900d5c1d 100644 --- a/config/awaymissionconfig.txt +++ b/config/awaymissionconfig.txt @@ -18,3 +18,4 @@ #_maps/RandomZLevels/undergroundoutpost45.dmm #_maps/RandomZLevels/caves.dmm #_maps/RandomZLevels/snowdin.dmm +#_maps/RandomZLevels/research.dmm diff --git a/html/changelog.html b/html/changelog.html index 6d50ac1e4a2..5c85c074aeb 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,20 @@ -->
+

02 January 2016

+

Kor updated:

+
    +
  • Guardians/Parasites are now named after constellations, and have new sprites from Ausops.
  • +
+

Kor and GunHog updated:

+
    +
  • Malfunctioning AIs can now purchase Enhanced Surveillance for 30 points, which allows them to "hear" with their camera eye.
  • +
+

MMMiracles updated:

+
    +
  • A distress signal was recently discovered with gateway coordinates attached to a far-off research facility owned by Nanotrasen. The signal was sent out in hopes of someone competent receiving it, unfortunately, your station was the only one to respond. Local security forces may not be welcoming your arrival group with open arms.
  • +
+

01 January 2016

Iamgoofball updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a4ea8a042f1..973982dae38 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3176,3 +3176,16 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: This does not apply to the target of a long action if that target isn't you. Pulling something while space drifting and working on it intentionally won't work. +2016-01-02: + Kor: + - rscadd: Guardians/Parasites are now named after constellations, and have new sprites + from Ausops. + Kor and GunHog: + - rscadd: Malfunctioning AIs can now purchase Enhanced Surveillance for 30 points, + which allows them to "hear" with their camera eye. + MMMiracles: + - rscadd: A distress signal was recently discovered with gateway coordinates attached + to a far-off research facility owned by Nanotrasen. The signal was sent out + in hopes of someone competent receiving it, unfortunately, your station was + the only one to respond. Local security forces may not be welcoming your arrival + group with open arms. diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index af26c8e825d..83ca97a050f 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/guardian.dmi b/icons/mob/guardian.dmi index 9db3fbedc68..9da38ca7706 100644 Binary files a/icons/mob/guardian.dmi and b/icons/mob/guardian.dmi differ diff --git a/nano/.gitignore b/nano/.gitignore deleted file mode 100644 index 68b9e27759d..00000000000 --- a/nano/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -bower_components/ diff --git a/nano/Gulpfile.coffee b/nano/Gulpfile.coffee deleted file mode 100644 index 2a0f51d326b..00000000000 --- a/nano/Gulpfile.coffee +++ /dev/null @@ -1,129 +0,0 @@ -### Settings ### -util = require("gulp-util") -f = - colorblind: util.env.colorblind || util.env.c - min: util.env.min || util.env.m - sourcemaps: util.env.sourcemaps || util.env.s - -# Project Paths -input = - html: "html" - images: "images" - scripts: "scripts" - styles: "styles" - templates: "templates" - -output = - dir: "assets" - js: "nanoui.js" - css: "nanoui.css" - -# Processor Settings -dotOpts = - evaluate: /\{\{([\s\S]+?)\}\}/g, - interpolate: /\{\{=([\s\S]+?)\}\}/g, - encode: /\{\{!([\s\S]+?)\}\}/g, - use: /\{\{#([\s\S]+?)\}\}/g, - define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, - conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, - iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - varname: "data, config, helper", - strip: true, - append: true, - selfcontained: true - -### Packages ### -bower = require "main-bower-files" -child_process = require "child_process" -del = require "del" -gulp = require "gulp" -merge = require "merge2" - -### Plugins ### -g = require("gulp-load-plugins")({replaceString: /^gulp(-|\.)|-/g}) -p = - autoprefixer: require "autoprefixer" - colorblind: require "postcss-colorblind" - fontweights: require "postcss-font-weights" - gradient: require "postcss-filter-gradient" - opacity: require "postcss-opacity" - plsfilters: require "pleeease-filters" - rgba: require "postcss-color-rgba-fallback" - -### Helpers ### -glob = (path) -> - "#{path}/*" - -### Tasks ### -html = -> - gulp.src glob input.html - .pipe g.bytediff.start() - .pipe g.if(f.min, g.htmlmin({collapseWhitespace: true, minifyJS: true, minifyCSS: true, quoteCharacter: "'"})) - .pipe g.bytediff.stop() - .pipe gulp.dest output.dir - - -js = -> - lib = gulp.src bower "**/*.js" - .pipe g.if(f.sourcemaps, g.sourcemaps.init()) - - main = gulp.src glob input.scripts - .pipe g.if(f.sourcemaps, g.sourcemaps.init()) - .pipe g.coffee() - - templates = gulp.src glob input.templates - .pipe g.dotprecompiler({dictionary: "TMPL", templateSettings: dotOpts}) - .pipe g.concat("templates") - .pipe g.header("window.TMPL = {};\n") - - combined = merge lib, templates, main - combined - .pipe g.concat(output.js) - .pipe g.bytediff.start() - .pipe g.if(f.min, g.uglify({mangle: true, compress: {unsafe: true, negate_iife: true, drop_console: true}}), g.jsbeautifier()) - .pipe g.if(f.sourcemaps, g.sourcemaps.write()) - .pipe g.bytediff.stop() - .pipe gulp.dest output.dir - - -css = -> - lib = gulp.src bower "**/*.css" - .pipe g.if(f.sourcemaps, g.sourcemaps.init()) - - main = gulp.src glob input.styles - .pipe g.filter(["*.less", "!_*.less"]) - .pipe g.if(f.sourcemaps, g.sourcemaps.init()) - .pipe g.less({paths: [input.images]}) - .pipe g.postcss([ - p.autoprefixer({browsers: ["last 2 versions", "ie >= 8"]}), - p.gradient, - p.opacity, - p.rgba({oldie: true}), - p.plsfilters({oldIE: true}), - p.fontweights - ]) - .pipe g.if(f.colorblind, g.postcss([p.colorblind])) - - combined = merge lib, main - combined - .pipe g.concat(output.css) - .pipe g.bytediff.start() - .pipe g.if(f.min, g.cssnano({autoprefixer: {browsers: ["last 2 versions", "ie >= 8"]}, discardComments: {removeAll: true}}), g.csscomb()) - .pipe g.if(f.sourcemaps, g.sourcemaps.write()) - .pipe g.bytediff.stop() - .pipe gulp.dest output.dir - - -gulp.task "default", ["clean"], -> - all = merge js(), css(), html() - all.pipe g.size() - -gulp.task "reload", ["default"], -> - child_process.exec "reload.bat", (err, stdout, stderr) -> - console.log err if err - -gulp.task "watch", -> - Object.keys(input).forEach (inp) -> - gulp.watch [glob input[inp]], ["reload"] - -gulp.task "clean", -> del glob output.dir diff --git a/nano/README.md b/nano/README.md deleted file mode 100644 index aebc35d75d6..00000000000 --- a/nano/README.md +++ /dev/null @@ -1,377 +0,0 @@ - - -- [NanoUI](#nanoui) - - [Introduction](#introduction) - - [Components](#components) - - [`ui_interact()`](#uiinteract) - - [`get_ui_data()`](#getuidata) - - [`Topic()`](#topic) - - [Template (doT)](#template-dot) - - [Helpers](#helpers) - - [Link](#link) - - [Bar](#bar) - - [doT](#dot) - - [Styling](#styling) - - [Contributing](#contributing) - - - -# NanoUI - -## Introduction - -NanoUI is the user interface library of /tg/station. While more complex than -traditional `browse()`/stringbuilder based interfaces, it allows much more -control over display of data and gives you many features for free, such as -different `CanUseTopic()` checks (in range/is robot/in inventory/in hand/etc), -automatic refresh, attractive looks, and helpers that make writing interfaces -much easier. - -NanoUI adds a `ui_interact()` proc to all atoms, which should be called from -`interact()`. The interact proc can be called from anywhere in the atom (usually - `attack_self()` or `attack_hand()`), and is where all checks should be made. - The `ui_interact()` proc should only include NanoUI code. - -Baystation12's version of NanoUI, while slightly different in syntax, has a -good [reference](http://wiki.baystation12.net/NanoUI). - -Here is a real example from -[tanks.dm](https://github.com/tgstation/-tg-station/blob/master/code/game/objects/items/weapons/tanks/tanks.dm). - - /obj/item/weapon/tank/attack_self(mob/user) - if (!user) - return - interact(user) - - /obj/item/weapon/tank/interact(mob/user) - add_fingerprint(user) - ui_interact(user) - - /obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) - if (!ui) - ui = new(user, src, ui_key, "tanks", name, 525, 175, state = inventory_state) - ui.open() - - - - -## Components - -### `ui_interact()` - -The`ui_interact()` proc is used to open a NanoUI (or update it if already open). -As NanoUI will call this proc to update your UI, you should not put any logic in -it, as NanoUI handles the logic for you. - -The parameters for `try_update_ui` and `/datum/nanoui/new()` are documented in -the code [here](https://github.com/tgstation/-tg-station/tree/master/code/modules/nano). -The most interesting parameter is `state`, which allows the object to choose the -checks that allow the UI to be interacted with. - -The default state (`default_state`) checks that the user is alive, conscious, -and within a few tiles. It allows universal access to silicons. Other states -exist, and may be more appropriate for different interfaces. For example, -`physical_state` requires the user to be nearby, even if they are a silicon. -`inventory_state` checks that the user has the object in their first-level -(not container) inventory, this is suitable for devices such as radios; -`notcontained_state` checks that the user is outside the object (great for cryo -and similar machines). - - /obj/item/the/thing/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) - if (!ui) - ui = new(user, src, ui_key, "template", title, width, height) - ui.open() - -### `get_ui_data()` - -The `get_ui_data()` proc returns a list which is used to populate the `data` -variable in the UI. This is where you should pass variables from your atom to -the UI. Here's another example from tanks.dm. - - /obj/item/weapon/tank/get_ui_data() - var/mob/living/carbon/location = null - - if(istype(loc, /mob/living/carbon)) - location = loc - else if(istype(loc.loc, /mob/living/carbon)) - location = loc.loc - - var/data = list() - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) - data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) - data["minReleasePressure"] = round(TANK_MIN_RELEASE_PRESSURE) - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - data["valveOpen"] = 0 - data["maskConnected"] = 0 - - if(istype(location)) - var/mask_check = 0 - - if(location.internal == src) // if tank is current internal - mask_check = 1 - data["valveOpen"] = 1 - else if(src in location) // or if tank is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - - if(mask_check) - if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) - data["maskConnected"] = 1 - return data - -This data can be accessed inside the NanoUI. For example, to find out if the -mask is connected (as checked near the end of the proc), we simply use -`data.maskConnected` in our template. - -### `Topic()` - -`Topic()` handles input from the UI. Typically you will recieve some data from -a button press, or pop up a input dialog to take a numerical value from the -user. Sanity checking is useful here, as `Topic()` is trivial to spoof with -arbitrary data. - -The `Topic()` interface is just the same as with more conventional, -stringbuilder-based UIs, and this needs little explanation. - - /obj/item/weapon/tank/Topic(href, href_list) - if (..()) - return - - if (href_list["dist_p"]) - if (href_list["dist_p"] == "custom") - var/custom = input(usr, "What rate do you set the regulator to? The dial reads from 0 to [TANK_MAX_RELEASE_PRESSURE].") as null|num - if(isnum(custom)) - href_list["dist_p"] = custom - .() - else if (href_list["dist_p"] == "reset") - distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - else if (href_list["dist_p"] == "min") - distribute_pressure = TANK_MIN_RELEASE_PRESSURE - else if (href_list["dist_p"] == "max") - distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - distribute_pressure = text2num(href_list["dist_p"]) - distribute_pressure = min(max(round(distribute_pressure), TANK_MIN_RELEASE_PRESSURE), TANK_MAX_RELEASE_PRESSURE) - if (href_list["stat"]) - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal == src) - location.internal = null - location.internals.icon_state = "internal0" - usr << "You close the tank release valve." - if (location.internals) - location.internals.icon_state = "internal0" - else - if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) - location.internal = src - usr << "You open \the [src] valve." - if (location.internals) - location.internals.icon_state = "internal1" - else - usr << "You need something to connect to \the [src]!" - -### Template (doT) - -NanoUI templates are written in [doT](https://olado.github.io/doT/index.html), -a Javascript template engine. Data is accessed from the `data` object, -configuration (not used in pratice) from the `config` object, and template -helpers are accessed from the `helper` object. - -#### Helpers - -##### Link - - {{=helpers.link(text, icon, {'parameter': true}, status, class)}} - -Used to create a link (button), which will pass its parameters to `Topic()`. - -* Text: The text content of the link/button -* Icon: The icon shown to the left of the link (http://fontawesome.io/) -* Parameters: The values to be passed to `Topic()`'s `href_list`. -* Status: `null` for clickable, a class for selected/unclickable. -* Class: Styling to apply to the link. - -Status and Class have almost the same effect. However, changing a link's status -from `null` to something else makes it unclickable, while setting a custom Class -does not. - -Ternary operators are often used to avoid writing many `if` statements. -For example, depending on if a value in `data` is true or false we can set a -button to clickable or selected: - - {{=helper.link('Close', 'lock', {'stat': 1}, data.valveOpen ? null : 'selected')}} - -Available classes/statuses are: - -* null (normal) -* selected -* caution -* danger -* disabled - -##### Bar - - {{=helpers.bar(value, min, max, class, text)}} - -Used to create a bar, to display a numerical value visually. Min and Max default -to 0 and 100, but you can change them to avoid doing your own percent calculations. - -* Value: Defaults to a percentage but can be a straight number if Min/Max are set -* Min: The minimum value (left hand side) of the bar -* Max: The maximum value (right hand side) of the bar -* Class: The color of the bar (null/normal, good, average, bad) -* Text: The text label for the data contained in the bar (often just number form) - -As with buttons, ternary operators are quite useful: - - {{=helper.bar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : ((data.tankPressure > 100) ? 'average' : 'bad'))}} - -#### doT - -doT is a simple template language, with control statements mixed in with -regular HTML and interpolation expressions. - -Here is a simple example from tanks, checking if a variable is true: - - {{? data.maskConnected}} - The regulator is connected to a mask. - {{??}} - The regulator is not connected to a mask. - {{?}} - -The doT tutorial is [here](https://olado.github.io/doT/tutorial.html). - -Print: - - {{=expression }} - -Print (with escape): - - {{!expression }} - -If/Else If/Else - - {{? condition}} - // if - {{?? condition}} - // else if - {{??}} - // else - {{?}} - -For - - {{~ object:key:index}} - // key, value - {{~}} - -#### Styling - -For the most part, a NanoUI is just normal HTML. However, to use the NanoUI -styles correctly, you have to be concious of a few elements. - -A `
    ` is the building block of most NanoUIs, and -represents the wells/blocks you see in most NanoUIs. Inside said article should -be a `
    ` labeling it, and many `
    `s representing items inside -(such as a label/button pair). The styling is highly subjective, so ask a -regular contribuitor to NanoUI (@neersighted at time of writing) to take a look -at and help style your UI. - -Here's an example of UI styling from Air Alarms: - -
    -

    Air Status

    - {{? data.environment_data}} - {{~ data.environment_data:info:i}} -
    - - {{=info.name}}: - -
    - {{? info.danger_level == 2}} - - {{?? info.danger_level == 1}} - - {{??}} - - {{?}} - {{=helper.fixed(info.value, 2)}}{{=info.unit}} -
    -
    - {{~}} -
    - - Local Status: - -
    - {{? data.danger_level == 2}} - Danger (Internals Required) - {{?? data.danger_level == 1}} - Caution - {{??}} - Optimal - {{?}} -
    -
    -
    - - Area Status: - -
    - {{? data.atmos_alarm}} - Atmosphere Alarm - {{?? data.fire_alarm}} - Fire Alarm - {{??}} - Nominal - {{?}} -
    -
    - {{??}} -
    Warning: Cannot obtain air sample for analysis.
    - {{?}} - {{? data.dangerous}} -
    -
    - Warning: Safety measures offline. Device may exhibit abnormal behavior. -
    - {{?}} -
    - -## Contributing - -There are a few gotchas when it comes to writing for NanoUI. In order to -simplify server code and make the UI more responsive, we precompile all -templates to Javascript. In addition, Coffeescript and LESS are used to make -development easier, and also need to be precompiled. Precompiling CSS also -allows us to add fallbacks for old versions of Internet Explorer. - -To compile NanoUI (which you will need to do after adding or updating a -template), first install [Node.js](https://nodejs.org). - -Next, you will need to install packages used by NanoUI: - - cd nanoui/ - npm install -g gulp bower - npm install - bower install - -Finally, to compile NanoUI, run Gulp: - - gulp - -Every time you make an update, you will need to recompile. Before comitting, -make sure you minimize the files with Gulp: - - gulp --min - -If you would like to view your changes without restarting, run Gulp reload: - - gulp reload - -Finally, if you want to auto-compile and reload on save, run Gulp watch: - - gulp watch diff --git a/nano/assets/nanoui.css b/nano/assets/nanoui.css deleted file mode 100644 index ec019f1b8a2..00000000000 --- a/nano/assets/nanoui.css +++ /dev/null @@ -1 +0,0 @@ -html{cursor:default}body,html{min-height:100%;margin:0}body{height:100%;background-color:#202020;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff}h1,h2,h3{font-size:18px;margin:0;padding:6px 0}h2{font-size:16px}h3{font-size:14px}hr{background-color:#40628a;border:none}.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight,.label{color:#8ba5c4}.dark{color:#272727}.bold{font-weight:700}.italic{font-style:italic}.hidden{display:none!important}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.floatNone{float:none}.floatLeft{float:left}.floatRight{float:right}.alignTop{vertical-align:top}.alignBottom{vertical-align:bottom}.alignLeft{text-align:left}.alignCenter{text-align:center}.alignRight{text-align:right}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{display:inline-block;position:relative;padding:7px;margin:-7px;color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}.fancy{display:none!important}article.display,article.notice{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column;width:auto;padding:4px;margin:6px 2px;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}article.display header,article.notice header{padding-left:4px;margin-bottom:6px;border-bottom:2px solid #40628a}article.display section,article.notice section{width:100%;padding:3px 0}article.display .label,article.notice .label{display:inline-block;margin:0;width:33%;color:#8ba5c4}article.display .content,article.notice .content{display:inline-block;margin:0;width:66%}article.display .line,article.notice .line{display:inline-block;margin:0;width:100%}article.display .buttoninfo,article.notice .buttoninfo{margin-left:5px}article.display table,article.notice table{width:auto;border-collapse:collapse}article.display table.grow,article.notice table.grow{width:100%}article.display th,article.notice th{vertical-align:top;padding:4px 16px 4px 0;text-align:left;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;color:#8ba5c4}article.display td,article.notice td{padding:2px 2px 0 0;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.link.gridable{width:125px}.bar{display:inline-block;position:relative;top:4px;vertical-align:top;box-sizing:border-box;width:100%;height:20px;margin:1px;padding:1px;border:1px solid #40628a;background:#272727}.bar .barText{position:absolute;top:1px;right:3px;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bar .barFill{display:block;height:100%;overflow:hidden;background:#40628a}.bar .barFill.good{background:#537d29}.bar .barFill.average{background:#be6209}.bar .barFill.bad{background:#b00e0e}.bar .barFill.highlight{background:#8ba5c4}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020)}body.generic,body.nanotrasen{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020)} \ No newline at end of file diff --git a/nano/assets/nanoui.html b/nano/assets/nanoui.html deleted file mode 100644 index 3d015f8fd92..00000000000 --- a/nano/assets/nanoui.html +++ /dev/null @@ -1 +0,0 @@ -
    Loading...
    \ No newline at end of file diff --git a/nano/assets/nanoui.js b/nano/assets/nanoui.js deleted file mode 100644 index 793fed69912..00000000000 --- a/nano/assets/nanoui.js +++ /dev/null @@ -1,3 +0,0 @@ -!function(e){function t(e,t,n,a){for(var r,i=n.slice(),l=s(t,e),o=0,c=i.length;c>o&&(handler=i[o],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(l):handler.call(e,l),!l.stoppedImmediatePropagation);o++);return r=!l.stoppedPropagation,a&&r&&e.parentNode?e.parentNode.dispatchEvent(l):!l.defaultPrevented}function n(e,t){return{configurable:!0,get:e,set:t}}function a(e,t,a){var s=b(t||e,a);g(e,"textContent",n(function(){return s.get.call(this)},function(e){s.set.call(this,e)}))}function s(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}function r(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function i(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function l(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function o(e){!p&&x.test(document.readyState)&&(p=!p,document.detachEvent(h,o),e=document.createEvent("Event"),e.initEvent(f,!0,!0),document.dispatchEvent(e))}function c(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function u(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,p=!1,h="onreadystatechange",f="DOMContentLoaded",v="__IE8__"+Math.random(),g=Object.defineProperty||function(e,t,n){e[t]=n.value},m=Object.defineProperties||function(t,n){for(var a in n)if(y.call(n,a))try{g(t,a,n[a])}catch(s){e.console}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,k=e.Element.prototype,w=e.Text.prototype,E=/^[a-z]+$/,x=/loaded|complete/,T={},S=document.createElement("div"),_=document.documentElement,O=_.removeAttribute,P=_.setAttribute;a(e.HTMLCommentElement.prototype,k,"nodeValue"),a(e.HTMLScriptElement.prototype,null,"text"),a(w,null,"nodeValue"),a(e.HTMLTitleElement.prototype,null,"text"),g(e.HTMLStyleElement.prototype,"textContent",function(e){return n(function(){return e.get.call(this.styleSheet)},function(t){e.set.call(this.styleSheet,t)})}(b(e.CSSStyleSheet.prototype,"cssText"))),m(k,{textContent:{get:i,set:c},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;n>t;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:{value:function(e,n,a){var s,i,o=this,c="on"+e,d=o[v]||g(o,v,{value:{}})[v],p=d[c]||(d[c]={}),h=p.h||(p.h=[]);if(!y.call(p,"w")){if(p.w=function(e){return e[v]||t(o,u(o,e),h,!1)},!y.call(T,c))if(E.test(e)){try{s=document.createEventObject(),s[v]=!0,9!=o.nodeType&&null==o.parentNode&&S.appendChild(o),(i=o.getAttribute(c))&&O.call(o,c),o.fireEvent(c,s),T[c]=!0}catch(s){for(T[c]=!1;S.hasChildNodes();)S.removeChild(S.firstChild)}null!=i&&P.call(o,c,i)}else T[c]=!1;(p.n=T[c])&&o.attachEvent(c,p.w)}r(h,n)<0&&h[a?"unshift":"push"](n),"input"===e&&o.attachEvent("onkeyup",l)}},dispatchEvent:{value:function(e){var n,a=this,s="on"+e.type,r=a[v],i=r&&r[s],l=!!i;return e.target||(e.target=a),l?i.n?a.fireEvent(s,e):t(a,e,i.h,!0):(n=a.parentNode)?n.dispatchEvent(e):!0,!e.defaultPrevented}},removeEventListener:{value:function(e,t,n){var a=this,s="on"+e,i=a[v],l=i&&i[s],o=l&&l.h,c=o?r(o,t):-1;c>-1&&o.splice(c,1)}}}),m(w,{addEventListener:{value:k.addEventListener},dispatchEvent:{value:k.dispatchEvent},removeEventListener:{value:k.removeEventListener}}),m(e.XMLHttpRequest.prototype,{addEventListener:{value:function(e,t,n){var a=this,s="on"+e,i=a[v]||g(a,v,{value:{}})[v],l=i[s]||(i[s]={}),o=l.h||(l.h=[]);r(o,t)<0&&(a[s]||(a[s]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),a.dispatchEvent(t)}),o[n?"unshift":"push"](t))}},dispatchEvent:{value:function(e){var n=this,a="on"+e.type,s=n[v],r=s&&s[a],i=!!r;return i&&(r.n?n.fireEvent(a,e):t(n,e,r.h,!0))}},removeEventListener:{value:k.removeEventListener}}),m(e.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),m(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?i.call(this):null},set:function(e){11===this.nodeType&&c.call(this,e)}},addEventListener:{value:function(t,n,a){var s=this;k.addEventListener.call(s,t,n,a),d&&t===f&&!x.test(s.readyState)&&(d=!1,s.attachEvent(h,o),e==top&&!function r(e){try{s.documentElement.doScroll("left"),o()}catch(t){setTimeout(r,50)}}())}},dispatchEvent:{value:k.dispatchEvent},removeEventListener:{value:k.removeEventListener},createEvent:{value:function(e){var t;if("Event"!==e)throw Error("unsupported "+e);return t=document.createEventObject(),t.timeStamp=(new Date).getTime(),t}}}),m(e.Window.prototype,{getComputedStyle:{value:function(){function e(e){this._=e}function t(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,s=/\-([a-z])/g,r=function(e,t){return t.toUpperCase()};return e.prototype.getPropertyValue=function(e){var t,i,l,o=this._,c=o.style,u=o.currentStyle,d=o.runtimeStyle;return e=("float"===e?"style-float":e).replace(s,r),t=u?u[e]:c[e],n.test(t)&&!a.test(e)&&(i=c.left,l=d&&d.left,l&&(d.left=u.left),c.left="fontSize"===e?"1em":t,t=c.pixelLeft+"px",c.left=i,l&&(d.left=l)),null==t?t:t+""||"auto"},t.prototype.getPropertyValue=function(){return null},function(n,a){return a?new t(n):new e(n)}}()},addEventListener:{value:function(n,a,s){var i,l=e,o="on"+n;l[o]||(l[o]=function(e){return t(l,u(l,e),i,!1)}),i=l[o][v]||(l[o][v]=[]),r(i,a)<0&&i[s?"unshift":"push"](a)}},dispatchEvent:{value:function(t){var n=e["on"+t.type];return n?n.call(e,t)!==!1&&!t.defaultPrevented:!0}},removeEventListener:{value:function(t,n,a){var s="on"+t,i=(e[s]||Object)[v],l=i?r(i,n):-1;l>-1&&i.splice(l,1)}}}),function(e,t,n){for(n=0;n0||-1)*Math.floor(Math.abs(t))),t},ToPrimitive:function(t){var n,a,s;if(A(t))return t;if(a=t.valueOf,e(a)&&(n=a.call(t),A(n)))return n;if(s=t.toString,e(s)&&(n=s.call(t),A(n)))return n;throw new TypeError},ToObject:function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return a(e)},ToUint32:function(e){return e>>>0}},I=function(){};j(r,{bind:function(t){var n=this;if(!e(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var s,r=u.call(arguments,1),i=function(){if(this instanceof s){var e=n.apply(this,f.call(r,u.call(arguments)));return a(e)===e?e:this}return n.apply(t,f.call(r,u.call(arguments)))},l=g(0,n.length-r.length),o=[],c=0;l>c;c++)p.call(o,"$"+c);return s=Function("binder","return function ("+o.join(",")+"){ return binder.apply(this, arguments); }")(i),n.prototype&&(I.prototype=n.prototype,s.prototype=new I,I.prototype=null),s}});var R=v.bind(s.hasOwnProperty),z=v.bind(s.toString),q=v.bind(l.slice),F=v.bind(l.split),U=v.bind(l.indexOf),B=v.bind(p),H=t.isArray||function(e){return"[object Array]"===z(e)},V=1!==[].unshift(0);j(n,{unshift:function(){return h.apply(this,arguments),this.length}},V),j(t,{isArray:H});var $=a("a"),W="a"!==$[0]||!(0 in $),J=function(e){var t=!0,n=!0;return e&&(e.call("foo",function(e,n,a){"object"!=typeof a&&(t=!1)}),e.call([1],function(){"use strict";n="string"==typeof this},"x")),!!e&&t&&n};j(n,{forEach:function(t){var n,a=D.ToObject(this),s=W&&P(this)?F(this,""):a,r=-1,i=D.ToUint32(s.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++r1&&(a=arguments[1]),!e(n))throw new TypeError("Array.prototype.map callback must be a function");for(var o=0;i>o;o++)o in r&&(void 0===a?l[o]=n(r[o],o,s):l[o]=n.call(a,r[o],o,s));return l}},!J(n.map)),j(n,{filter:function(t){var n,a,s=D.ToObject(this),r=W&&P(this)?F(this,""):s,i=D.ToUint32(r.length),l=[];if(arguments.length>1&&(a=arguments[1]),!e(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var o=0;i>o;o++)o in r&&(n=r[o],(void 0===a?t(n,o,s):t.call(a,n,o,s))&&B(l,n));return l}},!J(n.filter)),j(n,{every:function(t){var n,a=D.ToObject(this),s=W&&P(this)?F(this,""):a,r=D.ToUint32(s.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.every callback must be a function");for(var i=0;r>i;i++)if(i in s&&!(void 0===n?t(s[i],i,a):t.call(n,s[i],i,a)))return!1;return!0}},!J(n.every)),j(n,{some:function(t){var n,a=D.ToObject(this),s=W&&P(this)?F(this,""):a,r=D.ToUint32(s.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.some callback must be a function");for(var i=0;r>i;i++)if(i in s&&(void 0===n?t(s[i],i,a):t.call(n,s[i],i,a)))return!0;return!1}},!J(n.some));var G=!1;n.reduce&&(G="object"==typeof n.reduce.call("es5",function(e,t,n,a){return a})),j(n,{reduce:function(t){var n=D.ToObject(this),a=W&&P(this)?F(this,""):n,s=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===s&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,i=0;if(arguments.length>=2)r=arguments[1];else for(;;){if(i in a){r=a[i++];break}if(++i>=s)throw new TypeError("reduce of empty array with no initial value")}for(;s>i;i++)i in a&&(r=t(r,a[i],i,n));return r}},!G);var X=!1;n.reduceRight&&(X="object"==typeof n.reduceRight.call("es5",function(e,t,n,a){return a})),j(n,{reduceRight:function(t){var n=D.ToObject(this),a=W&&P(this)?F(this,""):n,s=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===s&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,i=s-1;if(arguments.length>=2)r=arguments[1];else for(;;){if(i in a){r=a[i--];break}if(--i<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>i)return r;do i in a&&(r=t(r,a[i],i,n));while(i--);return r}},!X);var Z=n.indexOf&&-1!==[0,1].indexOf(1,2);j(n,{indexOf:function(e){var t=W&&P(this)?F(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=0;for(arguments.length>1&&(a=D.ToInteger(arguments[1])),a=a>=0?a:g(0,n+a);n>a;a++)if(a in t&&t[a]===e)return a;return-1}},Z);var Y=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);j(n,{lastIndexOf:function(e){var t=W&&P(this)?F(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=n-1;for(arguments.length>1&&(a=m(a,D.ToInteger(arguments[1]))),a=a>=0?a:n-Math.abs(a);a>=0;a--)if(a in t&&e===t[a])return a;return-1}},Y);var K=function(){var e=[1,2],t=e.splice();return 2===e.length&&H(t)&&0===t.length}();j(n,{splice:function(e,t){return 0===arguments.length?[]:d.apply(this,arguments)}},!K);var Q=function(){var e={};return n.splice.call(e,0,0,1),1===e.length}();j(n,{splice:function(e,t){if(0===arguments.length)return[];var n=arguments;return this.length=g(D.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof t&&(n=u.call(arguments),n.length<2?B(n,this.length-e):n[1]=D.ToInteger(t)),d.apply(this,n)}},!Q);var ee=function(){var e=new t(1e5);return e[8]="x",e.splice(1,1),7===e.indexOf("x")}(),te=function(){var e=256,t=[];return t[e]="a",t.splice(e+1,0,"b"),"a"===t[e]}();j(n,{splice:function(e,t){for(var n,a=D.ToObject(this),s=[],r=D.ToUint32(a.length),l=D.ToInteger(e),o=0>l?g(r+l,0):m(l,r),c=m(g(D.ToInteger(t),0),r-o),d=0;c>d;)n=i(o+d),R(a,n)&&(s[d]=a[n]),d+=1;var p,h=u.call(arguments,2),f=h.length;if(c>f){for(d=o;r-c>d;)n=i(d+c),p=i(d+f),R(a,n)?a[p]=a[n]:delete a[p],d+=1;for(d=r;d>r-c+f;)delete a[d-1],d-=1}else if(f>c)for(d=r-c;d>o;)n=i(d+c-1),p=i(d+f-1),R(a,n)?a[p]=a[n]:delete a[p],d-=1;d=o;for(var v=0;v=0&&!H(t)&&e(t.callee)},be=ge(arguments)?ge:me;j(a,{keys:function(t){var n=e(t),a=be(t),s=null!==t&&"object"==typeof t,r=s&&P(t);if(!s&&!n&&!a)throw new TypeError("Object.keys called on a non-object");var l=[],o=oe&&n;if(r&&ce||a)for(var c=0;cp;p++){var h=fe[p];d&&"constructor"===h||!R(t,h)||B(l,h)}return l}});var ye=a.keys&&function(){return 2===a.keys(arguments).length}(1,2),ke=a.keys&&function(){var e=a.keys(arguments);return 1!==arguments.length||1!==e.length||1!==e[0]}(1),we=a.keys;j(a,{keys:function(e){return we(be(e)?u.call(e):e)}},!ye||ke);var Ee=-621987552e5,xe="-000001",Te=Date.prototype.toISOString&&-1===new Date(Ee).toISOString().indexOf(xe),Se=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();j(Date.prototype,{toISOString:function(){var e,t,n,a,s;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(a=this.getUTCFullYear(),s=this.getUTCMonth(),a+=Math.floor(s/12),s=(s%12+12)%12,e=[s+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],a=(0>a?"-":a>9999?"+":"")+q("00000"+Math.abs(a),a>=0&&9999>=a?-4:-6),t=e.length;t--;)n=e[t],10>n&&(e[t]="0"+n);return a+"-"+u.call(e,0,2).join("-")+"T"+u.call(e,2).join(":")+"."+q("000"+this.getUTCMilliseconds(),-3)+"Z"}},Te||Se);var _e=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Ee).toJSON().indexOf(xe)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(e){return!1}}();_e||(Date.prototype.toJSON=function(t){var n=a(this),s=D.ToPrimitive(n);if("number"==typeof s&&!isFinite(s))return null;var r=n.toISOString;if(!e(r))throw new TypeError("toISOString property is not callable");return r.call(n)});var Oe=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),Ce=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(Ce||Pe||!Oe){var Le=Math.pow(2,31)-1,Me=(Math.floor(Le/1e3),N(new Date(1970,0,1,0,0,0,Le+1).getTime()));Date=function(e){var t=function(n,a,s,r,l,o,c){var u,d=arguments.length;if(this instanceof e){var p=o,h=c;if(Me&&d>=7&&c>Le){var f=Math.floor(c/Le)*Le,v=Math.floor(f/1e3);p+=v,h-=1e3*v}u=1===d&&i(n)===n?new e(t.parse(n)):d>=7?new e(n,a,s,r,l,p,h):d>=6?new e(n,a,s,r,l,p):d>=5?new e(n,a,s,r,l):d>=4?new e(n,a,s,r):d>=3?new e(n,a,s):d>=2?new e(n,a):d>=1?new e(n):new e}else u=e.apply(this,arguments);return A(u)||j(u,{constructor:t},!0),u},n=RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),a=[0,31,59,90,120,151,181,212,243,273,304,334,365],s=function(e,t){var n=t>1?1:0;return a[t]+Math.floor((e-1969+n)/4)-Math.floor((e-1901+n)/100)+Math.floor((e-1601+n)/400)+365*(e-1970)},r=function(t){var n=0,a=t;if(Me&&a>Le){var s=Math.floor(a/Le)*Le,r=Math.floor(s/1e3);n+=r,a-=1e3*r}return o(new e(1970,0,1,0,0,n,a))};for(var l in e)R(e,l)&&(t[l]=e[l]);j(t,{now:e.now,UTC:e.UTC},!0),t.prototype=e.prototype,j(t.prototype,{constructor:t},!0);var c=function(t){var a=n.exec(t);if(a){var i,l=o(a[1]),c=o(a[2]||1)-1,u=o(a[3]||1)-1,d=o(a[4]||0),p=o(a[5]||0),h=o(a[6]||0),f=Math.floor(1e3*o(a[7]||0)),v=!(!a[4]||a[8]),g="-"===a[9]?1:-1,m=o(a[10]||0),b=o(a[11]||0),y=p>0||h>0||f>0;return(y?24:25)>d&&60>p&&60>h&&1e3>f&&c>-1&&12>c&&24>m&&60>b&&u>-1&&u=-864e13&&864e13>=i)?i:NaN}return e.parse.apply(this,arguments)};return j(t,{parse:c}),t}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var je=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Ae={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(e,t){for(var n=-1,a=t;++n=0;)n+=Ae.data[t],Ae.data[t]=Math.floor(n/e),n=n%e*Ae.base},numToString:function(){for(var e=Ae.size,t="";--e>=0;)if(""!==t||0===e||0!==Ae.data[e]){var n=i(Ae.data[e]);""===t?t=n:t+=q("0000000",0,7-n.length)+n}return t},pow:function Ze(e,t,n){return 0===t?n:t%2===1?Ze(e,t-1,n*e):Ze(e*e,t/2,n)},log:function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}},Ne=function(e){var t,n,a,s,r,l,c,u;if(t=o(e),t=N(t)?0:Math.floor(t),0>t||t>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=o(this),N(n))return"NaN";if(-1e21>=n||n>=1e21)return i(n);if(a="",0>n&&(a="-",n=-n),s="0",n>1e-21)if(r=Ae.log(n*Ae.pow(2,69,1))-69,l=0>r?n*Ae.pow(2,-r,1):n/Ae.pow(2,r,1),l*=4503599627370496,r=52-r,r>0){for(Ae.multiply(0,l),c=t;c>=7;)Ae.multiply(1e7,0),c-=7;for(Ae.multiply(Ae.pow(10,c,1),0),c=r-1;c>=23;)Ae.divide(1<<23),c-=23;Ae.divide(1<0?(u=s.length,s=t>=u?a+q("0.0000000000000000000",0,t-u+2)+s:a+q(s,0,u-t)+"."+q(s,u-t)):s=a+s,s};j(c,{toFixed:Ne},je);var De=function(){try{return"1"===1..toPrecision(void 0)}catch(e){return!0}}(),Ie=c.toPrecision;j(c,{toPrecision:function(e){return void 0===e?Ie.call(this):Ie.call(this,e)}},De),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var e=void 0===/()??/.exec("")[1],t=Math.pow(2,32)-1;l.split=function(n,a){var s=this;if(void 0===n&&0===a)return[];if(!T(n))return F(this,n,a);var r,i,l,o,c=[],d=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),h=0,f=RegExp(n.source,d+"g");s+="",e||(r=RegExp("^"+f.source+"$(?!\\s)",d));var v=void 0===a?t:D.ToUint32(a);for(i=f.exec(s);i&&(l=i.index+i[0].length,!(l>h&&(B(c,q(s,h,i.index)),!e&&i.length>1&&i[0].replace(r,function(){for(var e=1;e1&&i.index=v)));)f.lastIndex===i.index&&f.lastIndex++,i=f.exec(s);return h===s.length?(o||!f.test(""))&&B(c,""):B(c,q(s,h)),c.length>v?q(c,0,v):c}}():"0".split(void 0,0).length&&(l.split=function(e,t){return void 0===e&&0===t?[]:F(this,e,t)});var Re=l.replace,ze=function(){var e=[];return"x".replace(/x(.)?/g,function(t,n){B(e,n)}),1===e.length&&void 0===e[0]}();ze||(l.replace=function(t,n){var a=e(n),s=T(t)&&/\)[*?]/.test(t.source);if(a&&s){var r=function(e){var a=arguments.length,s=t.lastIndex;t.lastIndex=0;var r=t.exec(e)||[];return t.lastIndex=s,B(r,arguments[a-2],arguments[a-1]),n.apply(this,r)};return Re.call(this,t,r)}return Re.call(this,t,n)});var qe=l.substr,Fe="".substr&&"b"!=="0b".substr(-1);j(l,{substr:function(e,t){var n=e;return 0>e&&(n=g(this.length+e,0)),qe.call(this,n,t)}},Fe);var Ue=" \n\x0B\f\r   ᠎ â€â€‚         âŸã€€\u2028\u2029\ufeff",Be="​",He="["+Ue+"]",Ve=RegExp("^"+He+He+"*"),$e=RegExp(He+He+"*$"),We=l.trim&&(Ue.trim()||!Be.trim());j(l,{trim:function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");return i(this).replace(Ve,"").replace($e,"")}},We);var Je=l.lastIndexOf&&-1!=="abcã‚ã„".lastIndexOf("ã‚ã„",2);j(l,{lastIndexOf:function(e){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");for(var t=i(this),n=i(e),a=arguments.length>1?o(arguments[1]):NaN,s=N(a)?1/0:D.ToInteger(a),r=m(g(s,0),t.length),l=n.length,c=r+l;c>0;){c=g(0,c-l);var u=U(q(t,c,r+l),n);if(-1!==u)return c+u}return-1}},Je);var Ge=l.lastIndexOf;if(j(l,{lastIndexOf:function(e){return Ge.apply(this,arguments)}},1!==l.lastIndexOf.length),(8!==parseInt(Ue+"08")||22!==parseInt(Ue+"0x16"))&&(parseInt=function(e){var t=/^[\-+]?0[xX]/;return function(n,a){var s=i(n).trim(),r=o(a)||(t.test(s)?16:10);return e(s,r)}}(parseInt)),new RangeError("test")+""!="RangeError: test"){var Xe=(Error.prototype.toString,function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");var e=this.name;void 0===e?e="Error":"string"!=typeof e&&(e=i(e));var t=this.message;return void 0===t?t="":"string"!=typeof t&&(t=i(t)),e?t?e+": "+t:e:t});Error.prototype.toString=Xe}}),function(e,t){function n(e,t){var n=e.createElement("p"),a=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function a(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function s(e,t){var n=y.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),y.elements=n+" "+e,c(t)}function r(e){var t=b[e[g]];return t||(t={},m++,e[g]=m,b[m]=t),t}function i(e,n,a){if(n||(n=t),d)return n.createElement(e);a||(a=r(n));var s;return s=a.cache[e]?a.cache[e].cloneNode():v.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),!s.canHaveChildren||f.test(e)||s.tagUrn?s:a.frag.appendChild(s)}function l(e,n){if(e||(e=t),d)return e.createDocumentFragment();n=n||r(e);for(var s=n.frag.cloneNode(),i=0,l=a(),o=l.length;o>i;i++)s.createElement(l[i]);return s}function o(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return y.shivMethods?i(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(y,t.frag)}function c(e){e||(e=t);var a=r(e);return!y.shivCSS||u||a.hasCSS||(a.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||o(e,a),e}var u,d,p="3.7.3",h=e.html5||{},f=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",m=0,b={};!function(){try{var e=t.createElement("a");e.innerHTML="",u="hidden"in e,d=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return void 0===e.cloneNode||void 0===e.createDocumentFragment||void 0===e.createElement}()}catch(n){u=!0,d=!0}}();var y={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:p,shivCSS:h.shivCSS!==!1,supportsUnknownElements:d,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:i,createDocumentFragment:l,addElements:s};e.html5=y,c(t),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.MiniSignal=e()}}(function(){return function e(t,n,a){function s(i,l){if(!n[i]){if(!t[i]){var o="function"==typeof require&&require;if(!l&&o)return o(i,!0);if(r)return r(i,!0);var c=Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[i]={exports:{}};t[i][0].call(u.exports,function(e){var n=t[i][1][e];return s(n?n:e)},u,u.exports,e,t,n,a)}return n[i].exports}for(var r="function"==typeof require&&require,i=0;i-1}}([].indexOf||function(e){for(F=this.length;F--&&this[F]!==e;);return F}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t';var s=e.regions;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+='";a+="";var o=e.regions;if(o)for(var r,i=-1,c=o.length-1;c>i;){r=o[i+=1],a+=""}return a+="
    '+r.name+"
    ";var u=r.accesses;if(u)for(var d,p=-1,h=u.length-1;h>p;)d=u[p+=1],a+=""+n.link(d.name,d.req?"check-square-o":"square-o","set",{access:d.id},null,d.req?"selected":null)+"
    ";a+="
    "},TMPL.air_alarm=function(e,t,n){var a='
    ';if(a+=e.siliconUser?'
    Interface Lock:
    '+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.locked?null:"selected")+"
    ":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

    Air Status

    ',e.environment_data){var s=e.environment_data;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+='
    '+r.name+':
    ',a+=2==r.danger_level?'':1==r.danger_level?'':'',a+=""+n.fixed(r.value,2)+r.unit+"
    ";a+='
    Local Status:
    ',a+=2==e.danger_level?'Danger (Internals Required)':1==e.danger_level?'Caution':'Optimal',a+='
    Area Status:
    ',a+=e.atmos_alarm?'Atmosphere Alarm':e.fire_alarm?'Fire Alarm':'Nominal',a+="
    "}else a+='
    Warning: Cannot obtain air sample for analysis.
    ';if(e.emagged&&(a+='
    Warning: Safety measures offline. Device may exhibit abnormal behavior.
    '),a+="
    ",!e.locked||e.siliconUser)if(1!=e.screen&&(a+=""+n.link("Back","arrow-left","screen",{screen:1})),1==e.screen)a+='

    Air Controls

    ',a+=e.atmos_alarm?""+n.link("Area Atmospheric Alarm","close","reset",null,null,"caution"):""+n.link("Area Atmospheric Alarm","hand-stop-o","alarm"),a+='
    ',a+=3!=e.mode?""+n.link("Panic Siphon","exclamation","mode",{mode:3}):""+n.link("Panic Siphon","close","mode",{mode:1},null,"danger"),a+='
    '+n.link("Vent Controls","sign-out","screen",{screen:2})+'
    '+n.link("Scrubber Controls","filter","screen",{screen:3})+'
    '+n.link("Set Environmental Mode","cog","screen",{screen:4})+'
    '+n.link("Set Alarm Threshold","bar-chart","screen",{screen:5})+"
    ";else if(2==e.screen){var o=e.vents;if(o)for(var c,i=-1,u=o.length-1;u>i;)c=o[i+=1],a+='

    '+c.long_name+'

    Power:
    ',a+=c.power?""+n.link("On","power-off","adjust",{id_tag:c.id_tag,command:"power",val:0},null,null):""+n.link("Off","close","adjust",{id_tag:c.id_tag,command:"power",val:1},null,"danger"),a+='
    Mode:
    ',a+="release"==c.direction?'Pressurizing':'Siphoning',a+='
    Pressure Checks:
    '+n.link("Internal","sign-in","adjust",{id_tag:c.id_tag,command:"incheck",val:c.checks},null,c.incheck?"selected":null)+n.link("External","sign-out","adjust",{id_tag:c.id_tag,command:"excheck",val:c.checks},null,c.excheck?"selected":null)+'
    Set Pressure:
    '+n.link(n.fixed(c.external),"pencil","adjust",{id_tag:c.id_tag,command:"set_external_pressure"})+n.link("Reset","refresh","adjust",{id_tag:c.id_tag,command:"reset_external_pressure"},c.extdefault?"disabled":null)+"
    ";e.vents.length||(a+='No vents connected.')}else if(3==e.screen){var d=e.scrubbers;if(d)for(var p,i=-1,h=d.length-1;h>i;)p=d[i+=1],a+='

    '+p.long_name+'

    Power:
    ',a+=p.power?""+n.link("On","power-off","adjust",{id_tag:p.id_tag,command:"power",val:0},null,null):""+n.link("Off","close","adjust",{id_tag:p.id_tag,command:"power",val:1},null,"danger"),a+='
    Mode:
    ',a+=p.scrubbing?""+n.link("Scrubbing","filter","adjust",{id_tag:p.id_tag,command:"scrubbing",val:0},null,null):""+n.link("Siphoning","sign-in","adjust",{id_tag:p.id_tag,command:"scrubbing",val:1},null,"danger"),a+='
    Range:
    ',a+=p.widenet?""+n.link("Extended","expand","adjust",{id_tag:p.id_tag,command:"widenet",val:0},null,"caution"):""+n.link("Normal","compress","adjust",{id_tag:p.id_tag,command:"widenet",val:1},null,null),a+='
    Filters:
    '+n.link("CO2",p.filter_co2?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"co2_scrub",val:p.filter_co2?0:1},null,p.filter_co2?"selected":null)+n.link("N2O",p.filter_n2o?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"n2o_scrub",val:p.filter_n2o?0:1},null,p.filter_n2o?"selected":null)+n.link("Plasma",p.filter_toxins?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"tox_scrub",val:p.filter_toxins?0:1},null,p.filter_toxins?"selected":null)+"
    ";e.scrubbers.length||(a+='No scrubbers connected.')}else if(4==e.screen){a+='

    Environmental Modes

    ';var f=e.modes;if(f)for(var v,i=-1,g=f.length-1;g>i;)v=f[i+=1],a+='
    '+n.link(v.name,v.selected?"check-square-o":"square-o","mode",{mode:v.mode},null,v.selected?v.danger?"danger":"selected":null)+"
    ";a+="
    "}else if(5==e.screen){a+='

    Alarm Thresholds

    ';var m=e.thresholds;if(m)for(var b,i=-1,y=m.length-1;y>i;){b=m[i+=1],a+="";var k=b.settings;if(k)for(var w,E=-1,x=k.length-1;x>E;)w=k[E+=1],a+="";a+=""}a+="
    min2min1max1max2
    "+b.name+""+n.link(w.selected>=0?n.round(100*w.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:w.env,"var":w.val})+"
    "}return a},TMPL.apc=function(e,t,n){var a='
    ';a+=e.siliconUser?'
    Interface Lock:
    '+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.malfStatus>=2?"linkOff":e.locked?null:"selected")+"
    ":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

    Power Status

    Main Breaker:
    ',a+=e.locked&&!e.siliconUser?e.isOperating?'On':'Off':""+n.link("On","power-off","breaker",null,e.isOperating?"selected":null)+n.link("Off","close","breaker",null,e.isOperating?null:"selected"),a+='
    External Power:
    ',a+=2==e.externalPower?'Good':1==e.externalPower?'Low':'None',a+='
    Power Cell:
    ',a+=null!=e.powerCellStatus?""+n.bar(e.powerCellStatus,0,100,e.powerCellStatus>=50?"good":e.powerCellStatus>=25?"average":"bad",n.fixed(e.powerCellStatus)+"%"):'Power cell removed.',a+="
    ",null!=e.powerCellStatus&&(a+='
    Charge Mode:
    ',a+=e.locked&&!e.siliconUser?e.chargeMode?'Auto':'Off':""+n.link("Auto","refresh","chargemode",null,e.chargeMode?"selected":null)+n.link("Off","close","chargemode",null,e.chargeMode?null:"selected"),a+=" ",a+=e.chargingStatus>1?'[Fully Charged]':1==e.chargingStatus?'[Charging]':'[Not Charging]',a+="
    "),a+='

    Power Channels

    ';var s=e.powerChannels;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+="";return a+='
    "+r.title+":"+r.powerLoad+" W",r.status<=1?a+='Off':r.status>=2&&(a+='On'),a+="",a+=1==r.status||3==r.status?"[Auto]":"[Manual]",a+='',(!e.locked||e.siliconUser)&&(a+=""+n.link("Auto","refresh","channel",r.topicParams.auto,1==r.status||3==r.status?"selected":null)+n.link("On","power-off","channel",r.topicParams.on,2==r.status?"selected":null)+n.link("Off","close","channel",r.topicParams.off,0==r.status?"selected":null)),a+="
    Total Load:'+e.totalLoad+" W
    ",e.siliconUser&&(a+='

    System Overrides

    '+n.link("Overload Lighting Circuit","lightbulb-o","overload")+"
    ",1==e.malfStatus?a+=""+n.link("Override Programming","terminal","hack"):2==e.malfStatus?a+=""+n.link("Shunt Core Processes","caret-square-o-down","occupy"):3==e.malfStatus?a+=""+n.link("Return to Main Core","carat-square-o-left","deoccupy"):4==e.malfStatus&&(a+=""+n.link("Shunt Core Processes","caret-square-o-down")),a+="
    "),a+='
    Cover Lock:
    ',a+=e.locked&&!e.siliconUser?e.coverLocked?"Engaged":"Disengaged":""+n.link("Engaged","lock","lock",null,e.coverLocked?"selected":null)+n.link("Disengaged","unlock","lock",null,e.coverLocked?null:"selected"),a+="
    "},TMPL.atmos_filter=function(e,t,n){var a='
    Power:
    '+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
    Output Pressure:
    '+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
    Filter:
    '+n.link("Nothing",null,"filter",{mode:-1},-1==e.filter_type?"selected":null)+n.link("Plasma",null,"filter",{mode:0},0==e.filter_type?"selected":null)+n.link("O2",null,"filter",{mode:1},1==e.filter_type?"selected":null)+n.link("N2",null,"filter",{mode:2},2==e.filter_type?"selected":null)+n.link("CO2",null,"filter",{mode:3},3==e.filter_type?"selected":null)+n.link("N2O",null,"filter",{mode:4},4==e.filter_type?"selected":null)+"
    ";return a},TMPL.atmos_mixer=function(e,t,n){var a='
    Power:
    '+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
    Output Pressure:
    '+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
    Node 1:
    '+n.link("","fast-backward","node1",{concentration:"-0.1"},null)+n.link("","backward","node1",{concentration:"-0.01"},null)+n.link("","forward","node1",{concentration:"0.01"},null)+n.link("","fast-forward","node1",{concentration:"0.1"},null)+''+e.node1_concentration+'%
    Node 2:
    '+n.link("","fast-backward","node2",{concentration:"-0.1"},null)+n.link("","backward","node2",{concentration:"-0.01"},null)+n.link("","forward","node2",{concentration:"0.01"},null)+n.link("","fast-forward","node2",{concentration:"0.1"},null)+''+e.node2_concentration+"%
    ";return a},TMPL.atmos_pump=function(e,t,n){var a='
    Power:
    '+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+"
    ";return a+=e.max_rate?'
    Transfer Rate:
    '+n.link("Set","pencil","transfer",{set:"custom"})+n.link("Max","plus","transfer",{set:"max"},e.transfer_rate==e.max_rate?"disabled":null)+''+e.transfer_rate+" L/s
    ":'
    Output Pressure:
    '+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+" kPa
    ",a+="
    "},TMPL.canister=function(e,t,n){var a='
    ';return a+=e.hasHoldingTank?"The regulator is connected to a tank.":"The regulator is not connected to a tank.",a+='

    Canister

    '+n.link("Relabel","pencil","relabel",null,e.canLabel?null:"disabled")+'
    Pressure:
    '+e.tankPressure+' kPa
    Port:
    ',a+=e.portConnected?'Connected':'Disconnected',a+='

    Valve

    Release Pressure:
    '+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
    Pressure Regulator:
    '+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
    Valve:
    '+n.link("Open","unlock","valve",null,e.valveOpen?"selected":null)+n.link("Close","lock","valve",null,e.valveOpen?null:"selected")+'

    Holding Tank

    ',a+=e.hasHoldingTank?"
    "+n.link("Eject","eject","eject")+'
    Label:
    '+e.holdingTank.name+'
    Tank Pressure:
    '+e.holdingTank.tankPressure+" kPa
    ":'
    No Holding Tank
    ',a+="
    "},TMPL.chem_dispenser=function(e,t,n){var a='

    Status

    Energy:
    '+n.bar(e.energy,0,e.maxEnergy,null,e.energy+" Units")+'
    Amount:
    ',s=e.beakerTransferAmounts;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=""+n.link(r,"plus","amount",{set:r},e.amount==r?"selected":null);a+='

    Dispense

    ';var o=e.chemicals;if(o)for(var c,i=-1,u=o.length-1;u>i;)c=o[i+=1],a+=""+n.link(c.title,"tint","dispense",c.commands,null,"gridable");a+='

    Beaker

    '+n.link("Eject","eject","eject",null,e.isBeakerLoaded?null:"disabled")+'
    ';var d=e.beakerTransferAmounts;if(d)for(var r,i=-1,p=d.length-1;p>i;)r=d[i+=1],a+=""+n.link(r,"minus","remove",{amount:r});if(a+='
    Contents:
    ',e.isBeakerLoaded)if(e.beakerContents.length){a+=""+e.beakerCurrentVolume+"/"+e.beakerMaxVolume+" Units
    ";var h=e.beakerContents;if(h)for(var f,i=-1,v=h.length-1;v>i;)f=h[i+=1],a+=''+f.volume+" units of "+f.name+"
    "}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
    "},TMPL.chem_heater=function(e,t,n){var a='

    Status

    Power:
    '+n.link(e.isActive?"On":"Off",e.isActive?"power-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
    Target:
    '+n.link(e.targetTemp+"K","pencil","temperature")+'

    Beaker

    '+n.link("Eject","eject","eject",null,e.isBeakerLoaded?null:"disabled")+'
    Contents:
    ';if(e.isBeakerLoaded)if(a+="Temperature: "+e.currentTemp+"K
    ",e.beakerContents.length){var s=e.beakerContents;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=''+r.volume+" units of "+r.name+"
    "}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.cryo=function(e,t,n){var a='

Occupant

Occupant:
';if(a+=e.hasOccupant?""+e.occupant.name+"":'No Occupant',a+="
",e.hasOccupant&&(a+='
State:
',a+=0==e.occupant.stat?'Conscious':1==e.occupant.stat?'Unconscious':'Dead',a+='
Temperature:
'+n.round(e.occupant.bodyTemperature)+" K
"),e.hasOccupant&&e.occupant.stat<2&&(a+='
Health:
'+n.bar(e.occupant.health,e.occupant.minHealth,e.occupant.Maxhealth,e.occupant.health>=0?"good":"average",n.round(e.occupant.health))+'
Brute:
'+n.bar(e.occupant.bruteLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.bruteLoss))+'
Respiratory:
'+n.bar(e.occupant.oxyLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.oxyLoss))+'
Toxin:
'+n.bar(e.occupant.toxLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.toxLoss))+'
Burn:
'+n.bar(e.occupant.fireLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.fireLoss))+"
"),a+='

Cell

Power:
',a+=e.isOperating?""+n.link("On","power-off","off"):""+n.link("Off","close","on"),a+='
Temperature:
'+e.cellTemperature+' K
Door:
',a+=e.isOpen?""+n.link("Open","unlock","close"):""+n.link("Closed","lock","open"),a+=e.autoEject?""+n.link("Auto","sign-out","autoeject"):""+n.link("Manual","sign-in","autoeject"),a+='

Beaker

'+n.link("Eject","eject","ejectbeaker",null,e.isBeakerLoaded?null:"disabled")+'
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){var s=e.beakerContents;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=''+r.volume+" units of "+r.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.smes=function(e,t,n){var a='

Storage

Stored Energy:
'+n.bar(e.capacityPercent,0,100,e.capacityPercent>=50?"good":e.capacityPercent>=15?"average":"bad",n.round(e.capacityPercent)+"%")+'

Input

Charge Mode:
'+n.link("Auto","refresh","tryinput",null,e.inputAttempt?"selected":null)+n.link("Off","close","tryinput",null,e.inputAttempt?null:"selected")+" ";return a+=e.capacityPercent>=99?"[Fully Charged]":e.inputting?"[Charging]":"[Not Charging]",a+='
Input Setting:
'+n.bar(e.inputLevel,0,e.inputLevelMax,null,e.inputLevel+" W")+'
Adjust Input:
'+n.link("","fast-backward","input",{set:"min"},e.inputLevel?null:"selected")+n.link("","backward","input",{set:"minus"},e.inputLevel?null:"disabled")+n.link("Set","pencil","input",{set:"custom"},null)+n.link("","forward","input",{set:"plus"},e.inputLevel==e.inputLevelMax?"disabled":null)+n.link("","fast-forward","input",{set:"max"},e.inputLevel==e.inputLevelMax?"selected":null)+'
Available:
'+e.inputAvailable+' W

Output

Charge Mode:
'+n.link("On","power-off","tryoutput",null,e.outputAttempt?"selected":null)+n.link("Off","close","tryoutput",null,e.outputAttempt?null:"selected")+" ",a+=e.outputting?'[Sending]':e.charge>0?'[Not Sending]':'[No Charge]',a+='
Output Setting:
'+n.bar(e.outputLevel,0,e.outputLevelMax,null,e.outputLevel+" W")+'
Adjust Output:
'+n.link("","fast-backward","output",{set:"min"},e.outputLevel?null:"selected")+n.link("","backward","output",{set:"minus"},e.outputLevel?null:"disabled")+n.link("Set","pencil","output",{set:"custom"},null)+n.link("","forward","output",{set:"plus"},e.outputLevel==e.outputLevelMax?"disabled":null)+n.link("","fast-forward","output",{set:"max"},e.outputLevel==e.outputLevelMax?"selected":null)+'
Outputting:
'+e.outputUsed+" W
"},TMPL.solar_control=function(e,t,n){var a='

Status

Generated Power:
'+e.generated+' W
Orientation:
'+e.angle+"° ("+e.direction+')
Adjust:
'+n.link("15°","step-backward","control",{cdir:"-15"})+n.link("1°","backward","control",{cdir:"-1"})+n.link("1°","forward","control",{cdir:"1"})+n.link("15°","step-forward","control",{cdir:"15"})+'

Tracking

Tracker Mode:
'+n.link("Off","close","tracking",{mode:"0"},0==e.tracking_state?"selected":"")+n.link("Timed","clock-o","tracking",{mode:"1"},1==e.tracking_state?"selected":"");return a+=e.connected_tracker?""+n.link("Auto","refresh","tracking",{mode:"2"},2==e.tracking_state?"selected":""):""+n.link("Auto","refresh",null,null,"disabled"),a+='
Tracking Rate:
'+e.tracking_rate+" deg/h ("+e.rotating_way+')
Adjust:
'+n.link("180°","fast-backward","control",{tdir:"-180"})+n.link("30°","step-backward","control",{tdir:"-30"})+n.link("1°","backward","control",{tdir:"-1"})+n.link("1°","forward","control",{tdir:"1"})+n.link("30°","step-forward","control",{tdir:"30"})+n.link("180°","fast-forward","control",{tdir:"180"})+'

Devices

Search:
'+n.link("Refresh","refresh","refresh")+'
Solar Tracker:
',a+=e.connected_tracker?'Found':'Not Found',a+='
Solars Panels:
'+e.connected_panels+" Connected
"},TMPL.space_heater=function(e,t,n){var a='

Status

Power:
'+n.link("On","power-off","power",null,e.on?"selected":null)+n.link("Off","close","power",null,e.on?null:"selected")+'
Stored Energy:
';return a+=e.hasPowercell?""+n.bar(e.powerLevel,0,100,"good",e.powerLevel+"%"):'No power cell loaded.',a+="
",e.open&&(a+='
Cell:
',a+=e.hasPowercell?""+n.link("Eject","eject","ejectcell"):""+n.link("Install","eject","installcell"),a+="
"),a+='

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(a+='
Adjustment:
'+n.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+n.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+n.link("Set","pencil","temp",{set:"custom"},null)+n.link("","forward","temp",{set:5},e.targetTemp
"),a+='
Operational Mode:
',a+=e.open?""+n.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+n.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+n.link("Auto","arrows-v","mode",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto', -a+="
"},TMPL.tanks=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",a+='
Tank Pressure:
'+n.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+n.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},TMPL._nanotrasen=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.Chrome=function(){function t(t,n){this.nanoui=t,this.handleResize=e(this.handleResize,this),this.handleDrag=e(this.handleDrag,this),this.calcOffsets=e(this.calcOffsets,this),this.nanoui.updated.add(this.linkStatus),this.nanoui.updated.add(this.windowStatus),this.nanoui.rendered.add(this.handleLinks),n.config.user.fancy&&(this.dragging=!1,this.resizing=!1,this.switchChrome(),this.calcOffsets(),this.handleButtons(),this.handleDrag(),this.handleResize())}return t.prototype.linkStatus=function(e){var t;return t=document.queryAll(".link"),e.config.status!==NANO.INTERACTIVE?t.forEach(function(e){return e.className="link disabled"}):void 0},t.prototype.windowStatus=function(e){var t;return t=document.queryAll(".statusicon"),t.forEach(function(t){var n;switch(e.config.status){case NANO.INTERACTIVE:n="good";break;case NANO.UPDATE:n="average";break;default:n="bad"}return t.classList.remove("good","bad","average"),t.classList.add(n)})},t.prototype.handleLinks=function(e){var t;return t=function(){var t,n;return t=this.getAttribute("data-action"),n=JSON.parse(this.getAttribute("data-params")),null!=t&&null!=n&&e.config.status===NANO.INTERACTIVE?nanoui.act(t,n):void 0},document.queryAll(".link.active").forEach(function(e){return e.addEventListener("click",t)})},t.prototype.switchChrome=function(){var e;return this.nanoui.winset("titlebar",0),this.nanoui.winset("can-resize",0),e=document.queryAll(".fancy"),e.forEach(function(e){return e.classList.remove("fancy")})},t.prototype.calcOffsets=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.nanoui.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.nanoui.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},t.prototype.handleButtons=function(){var e,t;return e=document.queryAll(".close"),e.forEach(function(e){return e.addEventListener("click",function(e){return function(){return e.nanoui.close()}}(this))}),t=document.queryAll(".minimize"),t.forEach(function(e){return e.addEventListener("click",function(e){return function(){return e.nanoui.minimize()}}(this))})},t.prototype.handleDrag=function(){var e,t;return e=function(e){return function(t){var n,a;return null==t&&(t=window.event),e.dragging?(null==e.xDrag&&(e.xDrag=t.screenX),null==e.yDrag&&(e.yDrag=t.screenY),n=t.screenX-e.xDrag+(window.screenLeft-e.xOffset),a=t.screenY-e.yDrag+(window.screenTop-e.yOffset),e.nanoui.setPos(n,a),e.xDrag=t.screenX,e.yDrag=t.screenY):void 0}}(this),t=document.query("#titlebar"),document.addEventListener("mousemove",e),t.addEventListener("mousedown",function(e){return function(){return e.dragging=!0}}(this)),document.addEventListener("mouseup",function(e){return function(){return e.dragging=!1,delete e.xDrag,delete e.yDrag}}(this))},t.prototype.handleResize=function(){var e,t;return t=function(e){return function(t){var n,a;return null==t&&(t=window.event),e.resizing?(null==e.xResize&&(e.xResize=t.screenX),null==e.yResize&&(e.yResize=t.screenY),n=Math.max(250,t.screenX-e.xResize+window.innerWidth),a=Math.max(250,t.screenY-e.yResize+window.innerHeight),e.nanoui.setSize(n,a),e.xResize=t.screenX,e.yResize=t.screenY):void 0}}(this),e=document.query("#resize"),document.addEventListener("mousemove",t),e.addEventListener("mousedown",function(e){return function(){return e.resizing=!0}}(this)),document.addEventListener("mouseup",function(e){return function(){return e.resizing=!1,delete e.xResize,delete e.yResize}}(this))},t}()}.call(this),function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0,CLOSE:-1}}.call(this),function(){this.helpers={link:function(e,t,n,a,s,r){return null==e&&(e=""),null==t&&(t=""),null==n&&(n=""),null==a&&(a={}),null==s&&(s=""),null==r&&(r=""),a=JSON.stringify(a),t&&(t="",r+=" iconed"),s?""+t+e+"":""+t+e+""},bar:function(e,t,n,a,s){var r;return null==e&&(e=0),null==t&&(t=0),null==n&&(n=100),null==a&&(a=""),null==s&&(s=""),n>t?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),r=Math.round((e-t)/(n-t)*100),"
"+s+"
"},round:function(e){return Math.round(e)},fixed:function(e,t){return null==t&&(t=1),+(Math.round(e+"e"+t)+"e-"+t)},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)}}}.call(this),function(){var e,t=function(e,t){return function(){return e.apply(t,arguments)}};e=function(){function e(){this.minimize=t(this.minimize,this),this.close=t(this.close,this),this.focusMap=t(this.focusMap,this),this.setSize=t(this.setSize,this),this.setPos=t(this.setPos,this),this.winset=t(this.winset,this),this.act=t(this.act,this),this.render=t(this.render,this),this.update=t(this.update,this);var e,n,a,s;this.laidout=!1,this.dragging=!1,this.resizing=!1;try{e=document.query("meta[name='data']"),n=e.getAttribute("content"),n=n.replace(/ÿ/g,""),n=n.replace(/\\improper/g,""),this.data=JSON.parse(n)}catch(s){a=s,this.error(a)}null!=this.data&&"data"in this.data&&"config"in this.data||this.error("Initial data did not load correctly."),this.render(this.data),this.chrome=new Chrome(this,this.data),this.initialized.dispatch(this.data),this.incoming.add(this.update)}return e.prototype.initialized=new MiniSignal,e.prototype.incoming=new MiniSignal,e.prototype.update=function(e){var t,n,a;try{t=JSON.parse(e),null==t.data&&(null!=this.data.data?t.data=this.data.data:t.data={}),this.data=t}catch(a){n=a,this.error(n)}return this.render(this.data),this.updated.dispatch(this.data)},e.prototype.updated=new MiniSignal,e.prototype.render=function(e){var t,n,a,s;try{return this.laidout||(this.laidout=!0,document.query("body").classList.add(e.config.layout),s=TMPL[e.config.templates.layout](e.data,e.config,helpers),document.query("#layout").innerHTML=s),t=TMPL[e.config.templates.content](e.data,e.config,helpers),document.query("#content").innerHTML=t,this.rendered.dispatch(this.data)}catch(a){return n=a,this.error(n)}},e.prototype.rendered=new MiniSignal,e.prototype.href=function(e,t){return null==e&&(e={}),null==t&&(t=""),"byond://"+t+"?"+Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&")},e.prototype.act=function(e,t){return null==t&&(t={}),t.src=this.data.config.ref,t.nano=e,location.href=this.href(t,null)},e.prototype.error=function(e){return location.href=this.href({nano_error:e},null)},e.prototype.winset=function(e,t,n){var a;return null==n&&(n=this.data.config.window),location.href=this.href((a={},a[n+"."+e]=t,a),"winset")},e.prototype.setPos=function(e,t){return this.winset("pos",e+","+t)},e.prototype.setSize=function(e,t){return this.winset("size",e+","+t)},e.prototype.focusMap=function(){return this.winset("focus",1,"mapwindow.map")},e.prototype.close=function(){return this.winset("is-visible","false"),location.href=this.href({command:"nanoclose "+this.data.config.ref},"winset")},e.prototype.minimize=function(){return this.winset("is-minimized","true")},e}(),this.nanoui=new e}.call(this); \ No newline at end of file diff --git a/nano/bower.json b/nano/bower.json deleted file mode 100644 index 51bf05891ff..00000000000 --- a/nano/bower.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "nanoui", - "private": true, - "dependencies": { - "DOM4": "dom4#~1.5.2", - "es5-shim": "~4.4.1", - "html5shiv": "~3.7.3", - "IE8": "ie8#~2.9.10", - "mini-signals": "~1.1.0" - }, - "overrides": { - "IE8": { - "main": "build/ie8.max.js" - }, - "DOM4": { - "dependencies": { - "IE8": "*" - } - }, - "mini-signals": { - "dependencies": { - "IE8": "*" - } - } - } -} diff --git a/nano/html/nanoui.html b/nano/html/nanoui.html deleted file mode 100644 index 0b5daf39734..00000000000 --- a/nano/html/nanoui.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - -
-
Loading...
-
- - - - diff --git a/nano/package.json b/nano/package.json deleted file mode 100644 index d1749cf972d..00000000000 --- a/nano/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "nanoui", - "private": true, - "dependencies": { - "autoprefixer": "^6.2.2", - "coffee-script": "^1.10.0", - "del": "^2.2.0", - "gulp": "^3.9.0", - "gulp-bytediff": "^1.0.0", - "gulp-coffee": "^2.3.1", - "gulp-concat": "^2.6.0", - "gulp-csscomb": "^3.0.6", - "gulp-cssnano": "^2.0.0", - "gulp-dot-precompiler": "git+https://github.com/kentliau/gulp-dot-precompiler.git", - "gulp-filter": "^3.0.1", - "gulp-header": "^1.7.1", - "gulp-htmlmin": "^1.3.0", - "gulp-if": "^2.0.0", - "gulp-jsbeautifier": "^1.0.1", - "gulp-less": "^3.0.5", - "gulp-load-plugins": "^1.1.0", - "gulp-postcss": "^6.0.1", - "gulp-rename": "^1.2.2", - "gulp-replace": "^0.5.4", - "gulp-size": "^2.0.0", - "gulp-sourcemaps": "^1.6.0", - "gulp-uglify": "^1.5.1", - "gulp-util": "^3.0.7", - "hexa-color-regex": "^1.0.0", - "main-bower-files": "^2.11.0", - "merge2": "^0.3.6", - "pleeease-filters": "^2.0.0", - "postcss-color-rgba-fallback": "git+https://github.com/postcss/postcss-color-rgba-fallback", - "postcss-colorblind": "^0.4.0", - "postcss-filter-gradient": "^0.2.1", - "postcss-font-weights": "^2.0.1", - "postcss-opacity": "^3.0.0" - } -} diff --git a/nano/scripts/chrome.coffee b/nano/scripts/chrome.coffee deleted file mode 100644 index d024f7deee3..00000000000 --- a/nano/scripts/chrome.coffee +++ /dev/null @@ -1,106 +0,0 @@ -class @Chrome - constructor: (@nanoui, data) -> - @nanoui.updated.add @linkStatus - @nanoui.updated.add @windowStatus - @nanoui.rendered.add @handleLinks - - return unless data.config.user.fancy - @dragging = false - @resizing = false - - @switchChrome() - @calcOffsets() - @handleButtons() - @handleDrag() - @handleResize() - - linkStatus: (data) -> - links = document.queryAll ".link" - if data.config.status isnt NANO.INTERACTIVE - links.forEach (element) -> - element.className = "link disabled" - - windowStatus: (data) -> - statusicons = document.queryAll ".statusicon" - statusicons.forEach (statusicon) -> - switch data.config.status - when NANO.INTERACTIVE - klass = "good" - when NANO.UPDATE - klass = "average" - else - klass = "bad" - statusicon.classList.remove "good", "bad", "average" - statusicon.classList.add klass - - handleLinks: (data) -> - onClick = -> - action = @getAttribute "data-action" - params = JSON.parse @getAttribute "data-params" - if action? and params? and data.config.status is NANO.INTERACTIVE - nanoui.act action, params - - document.queryAll(".link.active").forEach (link) -> - link.addEventListener "click", onClick - - switchChrome: -> - @nanoui.winset "titlebar", 0 - @nanoui.winset "can-resize", 0 - fancy = document.queryAll ".fancy" - fancy.forEach (chrome) -> - chrome.classList.remove "fancy" - - calcOffsets: => - @xOriginal = window.screenLeft - @yOriginal = window.screenTop - @nanoui.setPos 0, 0 # Move to 0,0 to measure offsets. - @xOffset = window.screenLeft - @yOffset = window.screenTop - @nanoui.setPos @xOriginal - @xOffset, @yOriginal - @yOffset # Put the window back. - - handleButtons: -> - closers = document.queryAll ".close" - closers.forEach (closer) -> - closer.addEventListener "click", => @nanoui.close() - - minimizers = document.queryAll ".minimize" - minimizers.forEach (minimizer) -> - minimizer.addEventListener "click", => @nanoui.minimize() - - handleDrag: => - drag = (event = window.event) => - return unless @dragging - - @xDrag = event.screenX unless @xDrag? - @yDrag = event.screenY unless @yDrag? - - x = (event.screenX - @xDrag) + (window.screenLeft - @xOffset) - y = (event.screenY - @yDrag) + (window.screenTop - @yOffset) - @nanoui.setPos x, y - - @xDrag = event.screenX - @yDrag = event.screenY - - titlebar = document.query "#titlebar" - document.addEventListener "mousemove", drag - titlebar.addEventListener "mousedown", => @dragging = true - document.addEventListener "mouseup", => @dragging = false; delete @xDrag; delete @yDrag - - handleResize: => - resize = (event = window.event) => - return unless @resizing - - @xResize = event.screenX unless @xResize? - @yResize = event.screenY unless @yResize? - - x = Math.max 250, (event.screenX - @xResize) + window.innerWidth - y = Math.max 250, (event.screenY - @yResize) + window.innerHeight - @nanoui.setSize x, y - - @xResize = event.screenX - @yResize = event.screenY - - handle = document.query "#resize" - document.addEventListener "mousemove", resize - handle.addEventListener "mousedown", => @resizing = true - document.addEventListener "mouseup", => @resizing = false; delete @xResize; delete @yResize diff --git a/nano/scripts/constants.coffee b/nano/scripts/constants.coffee deleted file mode 100644 index 825a336af65..00000000000 --- a/nano/scripts/constants.coffee +++ /dev/null @@ -1,5 +0,0 @@ -@NANO = - INTERACTIVE: 2 - UPDATE: 1 - DISABLED: 0 - CLOSE: -1 diff --git a/nano/scripts/helpers.coffee b/nano/scripts/helpers.coffee deleted file mode 100644 index 77b20403406..00000000000 --- a/nano/scripts/helpers.coffee +++ /dev/null @@ -1,43 +0,0 @@ -@helpers = - link: (text = "", icon = "", action = "", params = {}, status = "", klass = "") -> - params = JSON.stringify params - - if !!icon - icon = "" - klass += " iconed" - - if !!status - "#{icon}#{text}" - else - "#{icon}#{text}" - - bar: (value = 0, min = 0, max = 100, klass = "", text = "") -> - if min < max - if value < min - value = min - else if value > max - value = max - else - if value > min - value = min - else if value < max - value = max - - percentage = Math.round((value - min) / (max - min) * 100) - - "
\ - \ - #{text} \ -
" - - round: (number) -> - Math.round number - - fixed: (number, decimals = 1) -> - Number Math.round(number + "e" + decimals) + "e-" + decimals - - floor: (number) -> - Math.floor number - - ceil: (number) -> - Math.ceil number diff --git a/nano/scripts/nanoui.coffee b/nano/scripts/nanoui.coffee deleted file mode 100644 index 1e291656455..00000000000 --- a/nano/scripts/nanoui.coffee +++ /dev/null @@ -1,90 +0,0 @@ -class NanoUI - constructor: -> - @laidout = false - - @dragging = false - @resizing = false - - try - dataHolder = document.query "meta[name='data']" - dataString = dataHolder.getAttribute "content" - dataString = dataString.replace /ÿ/g, "" - dataString = dataString.replace /\\improper/g, "" - @data = JSON.parse dataString - catch error - @error error - if not (@data? and "data" of @data and "config" of @data) - @error "Initial data did not load correctly." - - @render @data - @chrome = new Chrome this, @data - - @initialized.dispatch @data - @incoming.add @update - initialized: new MiniSignal - incoming: new MiniSignal - - update: (dataString) => - try - data = JSON.parse dataString - - if not data.data? - if @data.data? - data.data = @data.data - else - data.data = {} - - @data = data - catch error - @error error - @render @data - @updated.dispatch @data - updated: new MiniSignal - - render: (data) => - try - if not @laidout - @laidout = true - document.query("body").classList.add data.config.layout - layout = TMPL[data.config.templates.layout](data.data, data.config, helpers) - document.query("#layout").innerHTML = layout - - content = TMPL[data.config.templates.content](data.data, data.config, helpers) - document.query("#content").innerHTML = content - - @rendered.dispatch @data - catch error - @error error - rendered: new MiniSignal - - - href: (params = {}, url = "") -> - "byond://#{url}?" + Object.keys(params).map (key) -> - "#{encodeURIComponent(key)}=#{encodeURIComponent(params[key])}" - .join("&") - - act: (action, params = {}) => - params.src = @data.config.ref - params.nano = action - location.href = @href params, null - error: (error) -> - location.href = @href {nano_error: error}, null - - winset: (key, value, window) => - window = @data.config.window unless window? - location.href = @href {"#{window}.#{key}": value}, "winset" - setPos: (x, y) => - @winset "pos", "#{x},#{y}" - setSize: (w, h) => - @winset "size", "#{w},#{h}" - focusMap: => - @winset "focus", 1, "mapwindow.map" - - close: => - @winset "is-visible", "false" - location.href = @href {command: "nanoclose #{@data.config.ref}"}, "winset" - minimize: => - @winset "is-minimized", "true" - - -@nanoui = new NanoUI diff --git a/nano/styles/_bar.less b/nano/styles/_bar.less deleted file mode 100644 index 6da5019d3b5..00000000000 --- a/nano/styles/_bar.less +++ /dev/null @@ -1,40 +0,0 @@ -@import "_config"; -@import "_util"; - - -.bar { - display: inline-block; - position: relative; - top: 4px; // Because this is an empty div, hack it so that it lines up. - vertical-align: top; - box-sizing: border-box; - width: 100%; - height: 20px; // Buttons are 22px, but look 20px because of their dark borders. - margin: 1px; - padding: 1px; - - border: 1px solid @normal; - - background: @dark; - - .barText { - position: absolute; - top: 1px; - right: 3px; - - .fontReset; - } - - .barFill { - display: block; - height: 100%; - - overflow: hidden; - - background: @normal; - &.good { background: @good; } - &.average { background: @average; } - &.bad { background: @bad; } - &.highlight { background: @highlight; } - } -} diff --git a/nano/styles/_chrome.less b/nano/styles/_chrome.less deleted file mode 100644 index 750b5adb51e..00000000000 --- a/nano/styles/_chrome.less +++ /dev/null @@ -1,86 +0,0 @@ -@import "_config"; -@import "_util"; - - -div.loading { - .noticeStripes; - - padding: 8px; -} - -div.content { - margin: 32px 4px 0 4px; - &.titlebared { - padding-top: 3px; - } -} - -header.titlebar { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 32px; - - background-color: @titlebar; - box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1); - - .statusicon { - position: absolute; - top: 4px; - left: 12px; - } - - .title { - position: absolute; - top: 6px; - left: 46px; - - color: @title; - font-size: 16px; - white-space: nowrap; - } - - .titlebutton() { - display: inline-block; - position: relative; - padding: 7px; // To make a bigger clickable area. - margin: -7px; - - color: @title; - - &:hover { - color: lighten(@title, @hover); - } - } - .minimize { - .titlebutton; - position: absolute; - top: 6px; - right: 46px; - } - .close { - .titlebutton; - position: absolute; - top: 4px; - right: 12px; - } -} - -div.resize { - position: fixed; - bottom: 0; - right: 0; - width: 0; - height: 0; - - border-style: solid; - border-width: 0 0 30px 30px; - border-color: transparent transparent @resize transparent; - - transform: rotate(360deg); -} - -.fancy { - .hidden; -} diff --git a/nano/styles/_config.less b/nano/styles/_config.less deleted file mode 100644 index da58aa148e7..00000000000 --- a/nano/styles/_config.less +++ /dev/null @@ -1,35 +0,0 @@ -// Fonts -@font: Verdana, Geneva, sans-serif; -@fontsize: 12px; - -// Global Colors -@normal: #40628a; -@good: #537d29; -@average: #be6209; -@bad: #b00e0e; -@highlight: #8ba5c4; -@info: #e9C183; -@label: @highlight; -@dark: #272727; - -// Body Colors -@title: #98b0c3; -@text: white; -@textinverse: black; -@titlebar: #363636; -@background-start: #2a2a2a; -@background-end: #202020; -@resize: #363636; - -// Component Colors -@border: @dark; -@rule: @normal; -@notice1: #bb9b68; -@notice2: #b1905d; - -// Link Colors -@hover: 10%; -@selected: #2f943c; -@caution: #9a9d00; -@danger: #9d0808; -@disabled: #999999; diff --git a/nano/styles/_document.less b/nano/styles/_document.less deleted file mode 100644 index 7bd1ca078ed..00000000000 --- a/nano/styles/_document.less +++ /dev/null @@ -1,41 +0,0 @@ -@import "_config"; -@import "_util"; - - -html { - min-height: 100%; - margin: 0; - - cursor: default; // Reset the cursor. -} - -body { - min-height: 100%; - height: 100%; - margin: 0; - - background-color: @background-end; // Fallback for old browsers. - - font-family: @font; - font-size: @fontsize; - color: @text; -} - -h1 { - font-size: @fontsize + 6px; - margin: 0; - padding: 6px 0; -} -h2 { - &:extend(h1); - font-size: @fontsize + 4px; -} -h3 { - &:extend(h1); - font-size: @fontsize + 2px; -} - -hr { - background-color: @rule; - border: none; -} diff --git a/nano/styles/_generic.less b/nano/styles/_generic.less deleted file mode 100644 index ffdc3cd4ff9..00000000000 --- a/nano/styles/_generic.less +++ /dev/null @@ -1,8 +0,0 @@ -@import "_config"; - - -body.generic { - background: linear-gradient(to bottom, - @background-start 0%, - @background-end 100%); -} diff --git a/nano/styles/_link.less b/nano/styles/_link.less deleted file mode 100644 index e179f3b684a..00000000000 --- a/nano/styles/_link.less +++ /dev/null @@ -1,49 +0,0 @@ -@import "_config"; -@import "_util"; - - -.active(@color) { - background-color: @color; - &:hover { - background-color: lighten(@color, @hover); - } -} - - -// Basic Link (Button) Element -span.link { - display: inline-block; - box-sizing: border-box; - height: 22px; - margin: 1px; - padding: 2px 3px; - white-space: nowrap; - - border: 1px solid @border; - - .fontReset; // Reset font settings. - - // Tweak spacing to fit icons. - .fa { margin-right: 3px; } - .iconed { padding-left: 3px; } - - // Link colors: - background-color: @normal; - &.active { - .active(@normal); - &.selected { .active(@selected); } - &.caution { .active(@caution); } - &.danger { .active(@danger); } - } - &.inactive { - background-color: @disabled; - &.selected { background-color: @selected; } - &.caution { background-color: @caution; } - &.danger { background-color: @danger; } - } - &.disabled { background-color: @disabled; } - - &.gridable { - width: 125px; - } -} diff --git a/nano/styles/_nanotrasen.less b/nano/styles/_nanotrasen.less deleted file mode 100644 index b9b0fb94489..00000000000 --- a/nano/styles/_nanotrasen.less +++ /dev/null @@ -1,9 +0,0 @@ -@import "_config"; - - -body.nanotrasen { - background: data-uri('nanotrasen.svg') no-repeat fixed center/70% 70%, - linear-gradient(to bottom, - @background-start 0%, - @background-end 100%); -} diff --git a/nano/styles/_section.less b/nano/styles/_section.less deleted file mode 100644 index b36eae5ec9e..00000000000 --- a/nano/styles/_section.less +++ /dev/null @@ -1,94 +0,0 @@ -@import "_config"; -@import "_util"; - - -article.display { - display: flex; - flex-flow: column nowrap; - width: auto; - padding: 4px; - margin: 6px 2px; - - background-color: rgba(0, 0, 0, 0.33); // Transparent background. - box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.5); - - header { - padding-left: 4px; - margin-bottom: 6px; - - border-bottom: 2px solid @rule; - } - - section { - width: 100%; - padding: 3px 0; - } - - .cell() { - display: inline-block; - margin: 0; - } - - .label { - .cell; - width: 33%; - - color: @label; - } - - .content { - .cell; - width: 66%; - } - - .line { - .cell; - width: 100%; - } - - .buttoninfo { - margin-left: 5px; - } - - table { - width: auto; - - border-collapse: collapse; - } - - table.grow { - width: 100%; - } - - th { - vertical-align: top; - padding: 4px 16px 4px 0; - text-align: left; - - .fontReset; - color: @label; - } - - td { - &:extend(th); - padding: 2px 2px 0 0; - vertical-align: top; - } -} - -article.notice { - &:extend(article.display all); - margin: 8px 2px; - - box-shadow: none; - - color: @textinverse; - font-weight: bold; - font-style: italic; - - .label { - color: @textinverse; - } - - .noticeStripes; -} diff --git a/nano/styles/_util.less b/nano/styles/_util.less deleted file mode 100644 index 82c988ba6ad..00000000000 --- a/nano/styles/_util.less +++ /dev/null @@ -1,57 +0,0 @@ -@import "_config"; - - -// Colors -.color(@color) { // Explort a given color as a class. - &.@{color} { - color: @@color; - } -} - -.color(normal); -.color(good); -.color(average); -.color(bad); -.color(label); -.color(highlight); -.color(dark); - -// Text Styles -.bold { font-weight: bold; } -.italic { font-style: italic; } -.fontReset() { - color: @text; - font-size: @fontsize; - font-weight: normal; - font-style: normal; - text-decoration: none; -} - -// Fancy "Notice Me" Stripes -.noticeStripes() { - background-color: @notice1; // Fallback for old browers. - background-image: repeating-linear-gradient( - -45deg, - @notice1, - @notice1 10px, - @notice2 10px, - @notice2 20px - ); -} - -// General Helpers -.hidden { display: none !important; } - -.clearBoth { clear: both; } -.clearLeft { clear: left; } -.clearRight { clear: right; } - -.floatNone { float: none; } -.floatLeft { float: left; } -.floatRight { float: right; } - -.alignTop { vertical-align: top; } -.alignBottom { vertical-align: bottom; } -.alignLeft { text-align: left; } -.alignCenter { text-align: center; } -.alignRight { text-align: right; } diff --git a/nano/styles/nanoui.less b/nano/styles/nanoui.less deleted file mode 100644 index f28043bb223..00000000000 --- a/nano/styles/nanoui.less +++ /dev/null @@ -1,14 +0,0 @@ -@charset "utf-8"; - -@import "_config"; - -@import "_document"; -@import "_util"; - -@import "_chrome"; -@import "_section"; -@import "_link"; -@import "_bar"; - -@import "_generic"; -@import "_nanotrasen"; diff --git a/nano/templates/_generic.dot b/nano/templates/_generic.dot deleted file mode 100644 index 698191ae91c..00000000000 --- a/nano/templates/_generic.dot +++ /dev/null @@ -1,14 +0,0 @@ -
-
- - {{=config.title}} - - -
- -
-
Initiating...
-
- -
-
diff --git a/nano/templates/_nanotrasen.dot b/nano/templates/_nanotrasen.dot deleted file mode 100644 index c41921a7824..00000000000 --- a/nano/templates/_nanotrasen.dot +++ /dev/null @@ -1,14 +0,0 @@ -
-
- - {{=config.title}} - - -
- -
-
Initiating...
-
- -
-
diff --git a/nano/templates/air_alarm.dot b/nano/templates/air_alarm.dot deleted file mode 100644 index 364767cbfc9..00000000000 --- a/nano/templates/air_alarm.dot +++ /dev/null @@ -1,233 +0,0 @@ -
- {{? data.siliconUser}} -
- Interface Lock: -
- {{=helper.link('Engaged', 'lock', 'toggleaccess', null, data.locked ? 'selected' : null)}} - {{=helper.link('Disengaged', 'unlock', 'toggleaccess', null, data.locked ? null : 'selected')}} -
-
- {{??}} - {{? data.locked}} - Swipe an ID card to unlock this interface. - {{??}} - Swipe an ID card to lock this interface. - {{?}} - {{?}} -
-
-

Air Status

- {{? data.environment_data}} - {{~ data.environment_data:info:i}} -
- {{=info.name}}: -
- {{? info.danger_level == 2}} - - {{?? info.danger_level == 1}} - - {{??}} - - {{?}} - {{=helper.fixed(info.value, 2)}}{{=info.unit}} -
-
- {{~}} -
- Local Status: -
- {{? data.danger_level == 2}} - Danger (Internals Required) - {{?? data.danger_level == 1}} - Caution - {{??}} - Optimal - {{?}} -
-
-
- Area Status: -
- {{? data.atmos_alarm}} - Atmosphere Alarm - {{?? data.fire_alarm}} - Fire Alarm - {{??}} - Nominal - {{?}} -
-
- {{??}} -
- Warning: Cannot obtain air sample for analysis. -
- {{?}} - {{? data.emagged}} -
-
- Warning: Safety measures offline. Device may exhibit abnormal behavior. -
- {{?}} -
-{{? (!data.locked || data.siliconUser)}} - {{? data.screen != 1}} - {{=helper.link('Back', 'arrow-left', 'screen', {'screen': 1})}} - {{?}} - {{? data.screen == 1}} -
-

Air Controls

-
- {{? !data.atmos_alarm}} - {{=helper.link('Area Atmospheric Alarm', 'hand-stop-o', 'alarm')}} - {{??}} - {{=helper.link('Area Atmospheric Alarm', 'close', 'reset', null, null, 'caution')}} - {{?}} -
-
- {{? data.mode != 3}} - {{=helper.link('Panic Siphon', 'exclamation', 'mode', {'mode': 3})}} - {{??}} - {{=helper.link('Panic Siphon', 'close', 'mode', {'mode': 1}, null, 'danger')}} - {{?}} -
-
- {{=helper.link('Vent Controls', 'sign-out', 'screen', {'screen': 2})}} -
-
- {{=helper.link('Scrubber Controls', 'filter', 'screen', {'screen': 3})}} -
-
- {{=helper.link('Set Environmental Mode', 'cog', 'screen', {'screen': 4})}} -
-
- {{=helper.link('Set Alarm Threshold', 'bar-chart', 'screen', {'screen': 5})}} -
-
- {{?? data.screen == 2}} - {{~ data.vents:vent:i}} -
-

{{=vent.long_name}}

-
- Power: -
- {{? vent.power}} - {{=helper.link('On', 'power-off', 'adjust', {'id_tag': vent.id_tag, 'command': 'power', 'val': 0}, null, null)}} - {{??}} - {{=helper.link('Off', 'close', 'adjust', {'id_tag': vent.id_tag, 'command': 'power', 'val': 1}, null, 'danger')}} - {{?}} -
-
-
- Mode: -
- {{? vent.direction == "release"}} - Pressurizing - {{??}} - Siphoning - {{?}} -
-
-
- Pressure Checks: -
- {{=helper.link('Internal', 'sign-in', 'adjust', {'id_tag': vent.id_tag, 'command': 'incheck', 'val': vent.checks}, null, vent.incheck ? 'selected' : null)}} - {{=helper.link('External', 'sign-out', 'adjust', {'id_tag': vent.id_tag, 'command': 'excheck', 'val': vent.checks}, null, vent.excheck ? 'selected' : null)}} -
-
-
- Set Pressure: -
- {{=helper.link(helper.fixed(vent.external), 'pencil', 'adjust', {'id_tag': vent.id_tag, 'command': 'set_external_pressure'})}} - {{=helper.link('Reset', 'refresh', 'adjust', {'id_tag': vent.id_tag, 'command': 'reset_external_pressure'}, vent.extdefault ? 'disabled' : null)}} -
-
-
- {{~}} - {{? !data.vents.length}} - No vents connected. - {{?}} - {{?? data.screen == 3}} - {{~ data.scrubbers:scrubber:i}} -
-

{{=scrubber.long_name}}

-
- Power: -
- {{? scrubber.power}} - {{=helper.link('On', 'power-off', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 0}, null, null)}} - {{??}} - {{=helper.link('Off', 'close', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 1}, null, 'danger')}} - {{?}} -
-
-
- Mode: -
- {{? scrubber.scrubbing}} - {{=helper.link('Scrubbing', 'filter', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 0}, null, null)}} - {{??}} - {{=helper.link('Siphoning', 'sign-in', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 1}, null, 'danger')}} - {{?}} -
-
-
- Range: -
- {{? scrubber.widenet}} - {{=helper.link('Extended', 'expand', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 0}, null, 'caution')}} - {{??}} - {{=helper.link('Normal', 'compress', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 1}, null, null)}} - {{?}} -
-
-
- Filters: -
- {{=helper.link("CO2", scrubber.filter_co2 ? 'check-square-o' : 'square-o', 'adjust', {'id_tag': scrubber.id_tag, 'command': "co2_scrub", 'val': scrubber.filter_co2 ? 0 : 1}, null, scrubber.filter_co2 ? 'selected' : null)}} - {{=helper.link("N2O", scrubber.filter_n2o ? 'check-square-o' : 'square-o', 'adjust', {'id_tag': scrubber.id_tag, 'command': "n2o_scrub", 'val': scrubber.filter_n2o ? 0 : 1}, null, scrubber.filter_n2o ? 'selected' : null)}} - {{=helper.link("Plasma", scrubber.filter_toxins ? 'check-square-o' : 'square-o', 'adjust', {'id_tag': scrubber.id_tag, 'command': "tox_scrub", 'val': scrubber.filter_toxins ? 0 : 1}, null, scrubber.filter_toxins ? 'selected' : null)}} -
-
-
- {{~}} - {{? !data.scrubbers.length}} - No scrubbers connected. - {{?}} - {{?? data.screen == 4}} -
-

Environmental Modes

- {{~ data.modes:mode:i}} -
- {{=helper.link(mode.name, mode.selected ? 'check-square-o' : 'square-o', 'mode', {'mode': mode.mode}, null, mode.selected ? (mode.danger ? 'danger' : 'selected') : null)}} -
- {{~}} -
- {{?? data.screen == 5}} -
-

Alarm Thresholds

- - - - - - - - - - - - {{~ data.thresholds:threshold:i}} - - - {{~ threshold.settings:setting:j}} - - {{~}} - - {{~}} - -
min2min1max1max2
{{=threshold.name}} - {{=helper.link(setting.selected >= 0 ? helper.round(setting.selected*100)/100 : "Off", null, 'adjust', {'command': 'set_threshold', 'env': setting.env, 'var': setting.val})}} -
- - {{?}} -{{?}} diff --git a/nano/templates/airlock_electronics.dot b/nano/templates/airlock_electronics.dot deleted file mode 100644 index 5edfb225e5b..00000000000 --- a/nano/templates/airlock_electronics.dot +++ /dev/null @@ -1,33 +0,0 @@ -
-
- {{? data.oneAccess}} - {{=helper.link('One Required', 'unlock', 'one_access')}} - {{??}} - {{=helper.link('All Required', 'lock', 'one_access')}} - {{?}} - {{=helper.link('Clear', 'refresh', 'clear')}} -
-
- - - {{~ data.regions :region:i}} - - {{~}} - - - - - {{~ data.regions :region:i}} - - {{~}} - - -
- {{=region.name}} -
- {{~ region.accesses :access:j}} - {{=helper.link(access.name, access.req ? 'check-square-o' : 'square-o', 'set', {'access': access.id}, null, access.req ? 'selected' : null)}} -
- {{~}} -
-
diff --git a/nano/templates/apc.dot b/nano/templates/apc.dot deleted file mode 100644 index 3c0d59e702a..00000000000 --- a/nano/templates/apc.dot +++ /dev/null @@ -1,157 +0,0 @@ -
- {{? data.siliconUser}} -
- Interface Lock: -
- {{=helper.link('Engaged', 'lock', 'toggleaccess', null, data.locked ? 'selected' : null)}} - {{=helper.link('Disengaged', 'unlock', 'toggleaccess', null, data.malfStatus >= 2 ? 'linkOff' : (data.locked ? null : 'selected'))}} -
-
- {{??}} - {{? data.locked}} - Swipe an ID card to unlock this interface. - {{??}} - Swipe an ID card to lock this interface. - {{?}} - {{?}} -
-
-

Power Status

-
- Main Breaker: -
- {{? data.locked && !data.siliconUser}} - {{? data.isOperating}} - On - {{??}} - Off - {{?}} - {{??}} - {{=helper.link('On', 'power-off', 'breaker', null, data.isOperating ? 'selected' : null)}} - {{=helper.link('Off', 'close', 'breaker', null, data.isOperating ? null : 'selected')}} - {{?}} -
-
-
- External Power: -
- {{? data.externalPower == 2}} - Good - {{?? data.externalPower == 1}} - Low - {{??}} - None - {{?}} -
-
-
- Power Cell: -
- {{? data.powerCellStatus != null}} - {{=helper.bar(data.powerCellStatus, 0, 100, data.powerCellStatus >= 50 ? "good" : data.powerCellStatus >= 25 ? "average" : "bad", helper.fixed(data.powerCellStatus) + "%")}} - {{??}} - Power cell removed. - {{?}} -
-
- {{? data.powerCellStatus != null}} -
- Charge Mode: -
- {{? data.locked && !data.siliconUser}} - {{? data.chargeMode}} - Auto - {{??}} - Off - {{?}} - {{??}} - {{=helper.link('Auto', 'refresh', 'chargemode', null, data.chargeMode ? 'selected' : null)}} - {{=helper.link('Off', 'close', 'chargemode', null, data.chargeMode ? null : 'selected')}} - {{?}} -   - {{? data.chargingStatus > 1}} - [Fully Charged] - {{?? data.chargingStatus == 1}} - [Charging] - {{??}} - [Not Charging] - {{?}} -
-
- {{?}} -
-
-

Power Channels

- - {{~ data.powerChannels :channel:i}} - - - - - - - - {{~}} - - - - - - - -
{{=channel.title}}:{{=channel.powerLoad}} W - {{? channel.status <= 1}} - Off - {{?? channel.status >= 2}} - On - {{?}} - - {{? channel.status == 1 || channel.status == 3}} - [Auto] - {{??}} - [Manual] - {{?}} - - {{? !data.locked || data.siliconUser}} - {{=helper.link('Auto', 'refresh', 'channel', channel.topicParams.auto, (channel.status == 1 || channel.status == 3) ? 'selected' : null)}} - {{=helper.link('On', 'power-off', 'channel', channel.topicParams.on, (channel.status == 2) ? 'selected' : null)}} - {{=helper.link('Off', 'close', 'channel', channel.topicParams.off, (channel.status == 0) ? 'selected' : null)}} - {{?}} -
Total Load:{{=data.totalLoad}} W
-
-{{? data.siliconUser}} -
-

System Overrides

-
- {{=helper.link('Overload Lighting Circuit', 'lightbulb-o', 'overload')}} -
-
- {{? data.malfStatus == 1}} - {{=helper.link('Override Programming', 'terminal', 'hack')}} - {{?? data.malfStatus == 2}} - {{=helper.link('Shunt Core Processes', 'caret-square-o-down', 'occupy')}} - {{?? data.malfStatus == 3}} - {{=helper.link('Return to Main Core', 'carat-square-o-left', 'deoccupy')}} - {{?? data.malfStatus == 4}} - {{=helper.link('Shunt Core Processes', 'caret-square-o-down')}} - {{?}} -
-
-{{?}} -
-
- Cover Lock: -
- {{? data.locked && !data.siliconUser}} - {{? data.coverLocked}} - Engaged - {{??}} - Disengaged - {{?}} - {{??}} - {{=helper.link('Engaged', 'lock', 'lock', null, data.coverLocked ? 'selected' : null)}} - {{=helper.link('Disengaged', 'unlock', 'lock', null, data.coverLocked ? null : 'selected')}} - {{?}} -
-
-
diff --git a/nano/templates/atmos_filter.dot b/nano/templates/atmos_filter.dot deleted file mode 100644 index bb8457fecc3..00000000000 --- a/nano/templates/atmos_filter.dot +++ /dev/null @@ -1,27 +0,0 @@ -
-
- Power: -
- {{=helper.link(data.on? 'On' : 'Off', data.on ? 'power-off' : 'close', 'power')}} -
-
-
- Output Pressure: -
- {{=helper.link('Set', 'pencil', 'pressure', {'set': 'custom'})}} - {{=helper.link('Max', 'plus', 'pressure', {'set': 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} - {{=data.set_pressure}} kPa -
-
-
- Filter: -
- {{=helper.link('Nothing', null, 'filter', {'mode': -1}, data.filter_type == -1 ? 'selected' : null)}} - {{=helper.link('Plasma', null, 'filter', {'mode': 0}, data.filter_type == 0 ? 'selected' : null)}} - {{=helper.link('O2', null, 'filter', {'mode': 1}, data.filter_type == 1 ? 'selected' : null)}} - {{=helper.link('N2', null, 'filter', {'mode': 2}, data.filter_type == 2 ? 'selected' : null)}} - {{=helper.link('CO2', null, 'filter', {'mode': 3}, data.filter_type == 3 ? 'selected' : null)}} - {{=helper.link('N2O', null, 'filter', {'mode': 4}, data.filter_type == 4 ? 'selected' : null)}} -
-
-
diff --git a/nano/templates/atmos_mixer.dot b/nano/templates/atmos_mixer.dot deleted file mode 100644 index 3b95b934c6e..00000000000 --- a/nano/templates/atmos_mixer.dot +++ /dev/null @@ -1,36 +0,0 @@ -
-
- Power: -
- {{=helper.link(data.on? 'On' : 'Off', data.on? 'power-off' : 'close', 'power')}} -
-
-
- Output Pressure: -
- {{=helper.link('Set', 'pencil', 'pressure', {'set': 'custom'})}} - {{=helper.link('Max', 'plus', 'pressure', {'set': 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} - {{=data.set_pressure}} kPa -
-
-
- Node 1: -
- {{=helper.link('', 'fast-backward', 'node1', {'concentration' : '-0.1'}, null)}} - {{=helper.link('', 'backward', 'node1', {'concentration' : '-0.01'}, null)}} - {{=helper.link('', 'forward', 'node1', {'concentration' : '0.01'}, null)}} - {{=helper.link('', 'fast-forward', 'node1', {'concentration' : '0.1'}, null)}} - {{=data.node1_concentration}}% -
-
-
- Node 2: -
- {{=helper.link('', 'fast-backward', 'node2', {'concentration' : '-0.1'}, null)}} - {{=helper.link('', 'backward', 'node2', {'concentration' : '-0.01'}, null)}} - {{=helper.link('', 'forward', 'node2', {'concentration' : '0.01'}, null)}} - {{=helper.link('', 'fast-forward', 'node2', {'concentration' : '0.1'}, null)}} - {{=data.node2_concentration}}% -
-
-
diff --git a/nano/templates/atmos_pump.dot b/nano/templates/atmos_pump.dot deleted file mode 100644 index 70f1c48aa49..00000000000 --- a/nano/templates/atmos_pump.dot +++ /dev/null @@ -1,27 +0,0 @@ -
-
- Power: -
- {{=helper.link(data.on? 'On' : 'Off', data.on? 'power-off' : 'close', 'power')}} -
-
- {{? data.max_rate}} -
- Transfer Rate: -
- {{=helper.link('Set', 'pencil', 'transfer', {'set': 'custom'})}} - {{=helper.link('Max', 'plus', 'transfer', {'set' : 'max'}, data.transfer_rate == data.max_rate ? 'disabled' : null)}} - {{=data.transfer_rate}} L/s -
-
- {{??}} -
- Output Pressure: -
- {{=helper.link('Set', 'pencil', 'pressure', {'set': 'custom'})}} - {{=helper.link('Max', 'plus', 'pressure', {'set' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} - {{=data.set_pressure}} kPa -
-
- {{?}} -
diff --git a/nano/templates/canister.dot b/nano/templates/canister.dot deleted file mode 100644 index 20cad52be96..00000000000 --- a/nano/templates/canister.dot +++ /dev/null @@ -1,80 +0,0 @@ -
- {{? data.hasHoldingTank }} - The regulator is connected to a tank. - {{??}} - The regulator is not connected to a tank. - {{?}} -
-
-

Canister

-
- {{=helper.link('Relabel', 'pencil', 'relabel', null, data.canLabel ? null : 'disabled')}} -
-
- Pressure: -
- {{=data.tankPressure}} kPa -
-
-
- - Port: - -
- {{? data.portConnected}} - Connected - {{??}} - Disconnected - {{?}} -
-
-
-
-

Valve

-
- Release Pressure: -
- {{=helper.bar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure, null, data.releasePressure + ' kPa')}} -
-
-
-
Pressure Regulator:
-
- {{=helper.link('Reset', 'refresh', 'pressure', {'set': 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}} - {{=helper.link('Min', 'minus', 'pressure', {'set': 'min'}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', 'pressure', {'set': 'custom'}, null)}} - {{=helper.link('Max', 'plus', 'pressure', {'set': 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} -
-
-
-
Valve:
-
- {{=helper.link('Open', 'unlock', 'valve', null, data.valveOpen ? 'selected' : null)}} - {{=helper.link('Close', 'lock', 'valve', null, data.valveOpen ? null : 'selected')}} -
-
-
-
-

Holding Tank

- {{? data.hasHoldingTank}} -
- {{=helper.link('Eject', 'eject', 'eject')}} -
-
- Label: -
- {{=data.holdingTank.name}} -
-
-
- Tank Pressure: -
- {{=data.holdingTank.tankPressure}} kPa -
-
- {{??}} -
- No Holding Tank -
- {{?}} -
diff --git a/nano/templates/chem_dispenser.dot b/nano/templates/chem_dispenser.dot deleted file mode 100644 index ea56c34a96d..00000000000 --- a/nano/templates/chem_dispenser.dot +++ /dev/null @@ -1,55 +0,0 @@ -
-

Status

-
- Energy: -
- {{=helper.bar(data.energy, 0, data.maxEnergy, null, data.energy + ' Units')}} -
-
-
- Amount: -
- {{~ data.beakerTransferAmounts :amount:i}} - {{=helper.link(amount, 'plus', 'amount', {'set': amount}, (data.amount == amount) ? 'selected' : null)}} - {{~}} -
-
-
-
-

Dispense

-
- {{~ data.chemicals :chem:i}} - {{=helper.link(chem.title, 'tint', 'dispense', chem.commands, null, 'gridable')}} - {{~}} -
-
-
-

Beaker

-
-
- {{=helper.link('Eject', 'eject', 'eject', null, data.isBeakerLoaded ? null : 'disabled')}} -
-
- {{~ data.beakerTransferAmounts :amount:i}} - {{=helper.link(amount, 'minus', 'remove', {'amount': amount})}} - {{~}} -
-
-
-
Contents:
-
- {{? data.isBeakerLoaded}} - {{? data.beakerContents.length}} - {{=data.beakerCurrentVolume}}/{{=data.beakerMaxVolume}} Units
- {{~ data.beakerContents :reagent:i}} - {{=reagent.volume}} units of {{=reagent.name}}
- {{~}} - {{??}} - Beaker Empty - {{?}} - {{??}} - No Beaker Loaded - {{?}} -
-
-
diff --git a/nano/templates/chem_heater.dot b/nano/templates/chem_heater.dot deleted file mode 100644 index b1bf72b3472..00000000000 --- a/nano/templates/chem_heater.dot +++ /dev/null @@ -1,38 +0,0 @@ -
-

Status

-
- Power: -
- {{=helper.link(data.isActive ? 'On' : 'Off', data.isActive ? 'power-off' : 'close', 'power', null, data.isBeakerLoaded ? null : 'disabled')}} -
-
-
- Target: -
- {{=helper.link(data.targetTemp + 'K', 'pencil', 'temperature')}} -
-
-
-
-

Beaker

-
- {{=helper.link('Eject', 'eject', 'eject', null, data.isBeakerLoaded ? null : 'disabled')}} -
-
- Contents: -
- {{? data.isBeakerLoaded}} - Temperature: {{=data.currentTemp}}K
- {{? data.beakerContents.length}} - {{~ data.beakerContents :reagent:i}} - {{=reagent.volume}} units of {{=reagent.name}}
- {{~}} - {{??}} - Beaker Empty - {{?}} - {{??}} - No Beaker Loaded - {{?}} -
-
- diff --git a/nano/templates/cryo.dot b/nano/templates/cryo.dot deleted file mode 100644 index dd182abce5c..00000000000 --- a/nano/templates/cryo.dot +++ /dev/null @@ -1,121 +0,0 @@ -
-

Occupant

-
- Occupant: -
- {{? data.hasOccupant}} - {{=data.occupant.name}} - {{??}} - No Occupant - {{?}} -
-
- {{? data.hasOccupant}} -
- State: -
- {{? data.occupant.stat == 0}} - Conscious - {{?? data.occupant.stat == 1}} - Unconscious - {{??}} - Dead - {{?}} -
-
-
- Temperature: -
- {{=helper.round(data.occupant.bodyTemperature)}} K -
-
- {{?}} - {{? data.hasOccupant && data.occupant.stat < 2}} -
- Health: -
- {{=helper.bar(data.occupant.health, data.occupant.minHealth, data.occupant.Maxhealth, data.occupant.health >= 0 ? 'good' : 'average', helper.round(data.occupant.health))}} -
-
-
- Brute: -
- {{=helper.bar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.bruteLoss))}} -
-
-
- Respiratory: -
- {{=helper.bar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.oxyLoss))}} -
-
-
- Toxin: -
- {{=helper.bar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.toxLoss))}} -
-
-
- Burn: -
- {{=helper.bar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.fireLoss))}} -
-
- {{?}} -
-
-

Cell

-
- Power: -
- {{? data.isOperating}} - {{=helper.link('On', 'power-off', 'off')}} - {{??}} - {{=helper.link('Off', 'close', 'on')}} - {{?}} -
-
-
- Temperature: -
- {{=data.cellTemperature}} K -
-
-
- Door: -
- {{? data.isOpen}} - {{=helper.link('Open', 'unlock', 'close')}} - {{??}} - {{=helper.link('Closed', 'lock', 'open')}} - {{?}} - {{? data.autoEject}} - {{=helper.link('Auto', 'sign-out', 'autoeject')}} - {{??}} - {{=helper.link('Manual', 'sign-in', 'autoeject')}} - {{?}} -
-
-
-
-

Beaker

-
- {{=helper.link('Eject', 'eject', 'ejectbeaker', null, data.isBeakerLoaded ? null : 'disabled')}} -
-
- Contents: -
- {{? data.isBeakerLoaded}} - {{? data.beakerContents.length}} - {{~ data.beakerContents :reagent:i}} - {{=reagent.volume}} units of {{=reagent.name}}
- {{~}} - {{??}} - Beaker Empty - {{?}} - {{??}} - No Beaker Loaded - {{?}} -
-
- diff --git a/nano/templates/smes.dot b/nano/templates/smes.dot deleted file mode 100644 index ddcc232f4ed..00000000000 --- a/nano/templates/smes.dot +++ /dev/null @@ -1,89 +0,0 @@ -
-

Storage

-
- Stored Energy: -
- {{=helper.bar(data.capacityPercent, 0, 100, data.capacityPercent >= 50 ? 'good' : data.capacityPercent >= 15 ? 'average' : 'bad', helper.round(data.capacityPercent) + '%')}} -
-
-
-
-

Input

-
- Charge Mode: -
- {{=helper.link('Auto', 'refresh', 'tryinput', null, data.inputAttempt ? 'selected' : null)}} - {{=helper.link('Off', 'close', 'tryinput', null, data.inputAttempt ? null : 'selected')}} -   - {{? data.capacityPercent >= 99}} - [Fully Charged] - {{?? data.inputting}} - [Charging] - {{??}} - [Not Charging] - {{?}} -
-
-
- Input Setting: -
- {{=helper.bar(data.inputLevel, 0, data.inputLevelMax, null, data.inputLevel + ' W')}} -
-
-
- Adjust Input: -
- {{=helper.link('', 'fast-backward', 'input', {'set': 'min'}, data.inputLevel ? null : 'selected')}} - {{=helper.link('', 'backward', 'input', {'set': 'minus'}, data.inputLevel ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', 'input', {'set': 'custom'}, null)}} - {{=helper.link('', 'forward', 'input', {'set': 'plus'}, data.inputLevel == data.inputLevelMax ? 'disabled' : null)}} - {{=helper.link('', 'fast-forward', 'input', {'set': 'max'}, data.inputLevel == data.inputLevelMax ? 'selected' : null)}} -
-
-
- Available: -
- {{=data.inputAvailable}} W -
-
-
-
-

Output

-
- Charge Mode: -
- {{=helper.link('On', 'power-off', 'tryoutput', null, data.outputAttempt ? 'selected' : null)}} - {{=helper.link('Off', 'close', 'tryoutput', null, data.outputAttempt ? null : 'selected')}} -   - {{? data.outputting}} - [Sending] - {{?? data.charge > 0}} - [Not Sending] - {{??}} - [No Charge] - {{?}} -
-
-
- Output Setting: -
- {{=helper.bar(data.outputLevel, 0, data.outputLevelMax, null, data.outputLevel + ' W')}} -
-
-
- Adjust Output: -
- {{=helper.link('', 'fast-backward', 'output', {'set': 'min'}, data.outputLevel ? null : 'selected')}} - {{=helper.link('', 'backward', 'output', {'set': 'minus'}, data.outputLevel ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', 'output', {'set': 'custom'}, null)}} - {{=helper.link('', 'forward', 'output', {'set': 'plus'}, data.outputLevel == data.outputLevelMax ? 'disabled' : null)}} - {{=helper.link('', 'fast-forward', 'output', {'set': 'max'}, data.outputLevel == data.outputLevelMax ? 'selected' : null)}} -
-
-
- Outputting: -
- {{=data.outputUsed}} W -
-
-
diff --git a/nano/templates/solar_control.dot b/nano/templates/solar_control.dot deleted file mode 100644 index 1aab8970560..00000000000 --- a/nano/templates/solar_control.dot +++ /dev/null @@ -1,85 +0,0 @@ -
-

Status

-
- Generated Power: -
- {{=data.generated}} W -
-
-
- Orientation: -
- {{=data.angle}}° ({{=data.direction}}) -
-
-
- Adjust: -
- {{=helper.link('15°', 'step-backward', 'control', {'cdir': '-15'})}} - {{=helper.link('1°', 'backward', 'control', {'cdir': '-1'})}} - {{=helper.link('1°', 'forward', 'control', {'cdir': '1'})}} - {{=helper.link('15°', 'step-forward', 'control', {'cdir': '15'})}} -
-
-
-
-

Tracking

-
- Tracker Mode: -
- {{=helper.link('Off', 'close', 'tracking', {'mode': '0'}, (data.tracking_state == 0) ? 'selected' : '')}} - {{=helper.link('Timed', 'clock-o', 'tracking', {'mode': '1'}, (data.tracking_state == 1) ? 'selected' : '')}} - {{? data.connected_tracker}} - {{=helper.link('Auto', 'refresh', 'tracking', {'mode': '2'}, (data.tracking_state == 2) ? 'selected' : '')}} - {{??}} - {{=helper.link('Auto', 'refresh', null, null, 'disabled')}} - {{?}} -
-
-
- Tracking Rate: -
- {{=data.tracking_rate}} deg/h ({{=data.rotating_way}}) -
-
-
- Adjust: -
- {{=helper.link('180°', 'fast-backward', 'control', {'tdir': '-180'})}} - {{=helper.link('30°', 'step-backward', 'control', {'tdir': '-30'})}} - {{=helper.link('1°', 'backward', 'control', {'tdir': '-1'})}} - {{=helper.link('1°', 'forward', 'control', {'tdir': '1'})}} - {{=helper.link('30°', 'step-forward', 'control', {'tdir': '30'})}} - {{=helper.link('180°', 'fast-forward', 'control', {'tdir': '180'})}} -
-
-
-
-

Devices

-
- Search: -
- {{=helper.link('Refresh', 'refresh', 'refresh')}} -
-
-
- - Solar Tracker: - -
- {{? data.connected_tracker}} - Found - {{??}} - Not Found - {{?}} -
-
-
- - Solars Panels: - -
- {{=data.connected_panels}} Connected -
- -
diff --git a/nano/templates/space_heater.dot b/nano/templates/space_heater.dot deleted file mode 100644 index f4e1fb3005c..00000000000 --- a/nano/templates/space_heater.dot +++ /dev/null @@ -1,79 +0,0 @@ -
-

Status

-
- Power: -
- {{=helper.link('On', 'power-off', 'power', null, data.on ? 'selected' : null)}} - {{=helper.link('Off', 'close', 'power', null, data.on ? null : 'selected')}} -
-
-
- Stored Energy: -
- {{? data.hasPowercell}} - {{=helper.bar(data.powerLevel, 0, 100, 'good', data.powerLevel + '%')}} - {{??}} - No power cell loaded. - {{?}} -
-
- {{? data.open}} -
- Cell: -
- {{? data.hasPowercell}} - {{=helper.link('Eject', 'eject', 'ejectcell')}} - {{??}} - {{=helper.link('Install', 'eject', 'installcell')}} - {{?}} -
-
- {{?}} -
-
-

Thermostat

-
- Current Temp: -
- {{=data.currentTemp}}°C -
-
-
- Target Temp: -
- {{=data.targetTemp}}°C -
-
- {{? data.open}} -
- Adjustment: -
- {{=helper.link('', 'fast-backward', 'temp', {'set': -20}, data.targetTemp > data.minTemp ? null : 'disabled')}} - {{=helper.link('', 'backward', 'temp', {'set': -5}, data.targetTemp > data.minTemp ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', 'temp', {'set': 'custom'}, null)}} - {{=helper.link('', 'forward', 'temp', {'set': 5}, data.targetTemp < data.maxTemp ? null : 'disabled')}} - {{=helper.link('', 'fast-forward', 'temp', {'set': 20}, data.targetTemp < data.maxTemp ? null : 'disabled')}} -
-
- {{?}} -
- - Operational Mode: - -
- {{? data.open}} - {{=helper.link('Heat', 'long-arrow-up', 'mode', {'mode': 'heat'}, data.mode != "heat" ? null : 'selected')}} - {{=helper.link('Cool', 'long-arrow-down', 'mode', {'mode': 'cool'}, data.mode != "cool" ? null : 'selected')}} - {{=helper.link('Auto', 'arrows-v', 'mode', {'mode': 'auto'}, (data.mode == "heat" || data.mode == "cool") ? null : 'selected')}} - {{??}} - {{? data.mode == "heat"}} - Heat - {{?? data.mode == "cool"}} - Cool - {{??}} - Auto - {{?}} - {{?}} -
-
-
diff --git a/nano/templates/tanks.dot b/nano/templates/tanks.dot deleted file mode 100644 index 7bc46a39a4d..00000000000 --- a/nano/templates/tanks.dot +++ /dev/null @@ -1,37 +0,0 @@ -
- {{? data.hasHoldingTank }} - The regulator is connected to a mask. - {{??}} - The regulator is not connected to a mask. - {{?}} -
-
-
- Tank Pressure: -
- {{=helper.bar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : ((data.tankPressure > 100) ? 'average' : 'bad'), data.tankPressure + ' kPa')}} -
- -
- Release Pressure: -
- {{=helper.bar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure, null, data.releasePressure + ' kPa')}} -
-
-
- Pressure Regulator: -
- {{=helper.link('Reset', 'refresh', 'pressure', {'set': 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}} - {{=helper.link('Min', 'minus', 'pressure', {'set': 'min'}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', 'pressure', {'set': 'custom'}, null)}} - {{=helper.link('Max', 'plus', 'pressure', {'set': 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} -
-
-
- Valve: -
- {{=helper.link('Open', 'unlock', 'valve', null, data.maskConnected ? (data.valveOpen ? 'selected' : null) : 'disabled')}} - {{=helper.link('Close', 'lock', 'valuve', null, data.valveOpen ? null : 'selected')}} -
-
-
diff --git a/tgstation.dme b/tgstation.dme index e49f30668ea..75bdc784e9b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -34,7 +34,6 @@ #include "code\__DEFINES\machines.dm" #include "code\__DEFINES\math.dm" #include "code\__DEFINES\misc.dm" -#include "code\__DEFINES\nano.dm" #include "code\__DEFINES\pipe_construction.dm" #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\qdel.dm" @@ -44,6 +43,7 @@ #include "code\__DEFINES\sight.dm" #include "code\__DEFINES\stat.dm" #include "code\__DEFINES\tablecrafting.dm" +#include "code\__DEFINES\tgui.dm" #include "code\__HELPERS\_logging.dm" #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\cmp.dm" @@ -156,7 +156,6 @@ #include "code\controllers\subsystem\machines.dm" #include "code\controllers\subsystem\minimap.dm" #include "code\controllers\subsystem\mobs.dm" -#include "code\controllers\subsystem\nano.dm" #include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\objects.dm" #include "code\controllers\subsystem\pai.dm" @@ -164,6 +163,7 @@ #include "code\controllers\subsystem\server_maintenance.dm" #include "code\controllers\subsystem\shuttles.dm" #include "code\controllers\subsystem\sun.dm" +#include "code\controllers\subsystem\tgui.dm" #include "code\controllers\subsystem\ticker.dm" #include "code\controllers\subsystem\timer.dm" #include "code\controllers\subsystem\voting.dm" @@ -929,6 +929,7 @@ #include "code\modules\awaymissions\mission_code\blackmarketpackers.dm" #include "code\modules\awaymissions\mission_code\centcomAway.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" +#include "code\modules\awaymissions\mission_code\researchbase.dm" #include "code\modules\awaymissions\mission_code\snowdin.dm" #include "code\modules\awaymissions\mission_code\spacebattle.dm" #include "code\modules\awaymissions\mission_code\stationCollision.dm" @@ -1340,6 +1341,7 @@ #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\mushroom.dm" +#include "code\modules\mob\living\simple_animal\hostile\nanotrasen.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm" #include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" @@ -1365,21 +1367,6 @@ #include "code\modules\mob\new_player\poll.dm" #include "code\modules\mob\new_player\preferences_setup.dm" #include "code\modules\mob\new_player\sprite_accessories.dm" -#include "code\modules\nano\external.dm" -#include "code\modules\nano\nanoui.dm" -#include "code\modules\nano\subsystem.dm" -#include "code\modules\nano\states\admin.dm" -#include "code\modules\nano\states\conscious.dm" -#include "code\modules\nano\states\contained.dm" -#include "code\modules\nano\states\deep_inventory.dm" -#include "code\modules\nano\states\default.dm" -#include "code\modules\nano\states\hands.dm" -#include "code\modules\nano\states\inventory.dm" -#include "code\modules\nano\states\notcontained.dm" -#include "code\modules\nano\states\physical.dm" -#include "code\modules\nano\states\self.dm" -#include "code\modules\nano\states\states.dm" -#include "code\modules\nano\states\zlevel.dm" #include "code\modules\ninja\__ninjaDefines.dm" #include "code\modules\ninja\admin_ninja_verbs.dm" #include "code\modules\ninja\energy_katana.dm" @@ -1601,6 +1588,21 @@ #include "code\modules\telesci\gps.dm" #include "code\modules\telesci\telepad.dm" #include "code\modules\telesci\telesci_computer.dm" +#include "code\modules\tgui\external.dm" +#include "code\modules\tgui\subsystem.dm" +#include "code\modules\tgui\tgui.dm" +#include "code\modules\tgui\states\admin.dm" +#include "code\modules\tgui\states\conscious.dm" +#include "code\modules\tgui\states\contained.dm" +#include "code\modules\tgui\states\deep_inventory.dm" +#include "code\modules\tgui\states\default.dm" +#include "code\modules\tgui\states\hands.dm" +#include "code\modules\tgui\states\inventory.dm" +#include "code\modules\tgui\states\notcontained.dm" +#include "code\modules\tgui\states\physical.dm" +#include "code\modules\tgui\states\self.dm" +#include "code\modules\tgui\states\states.dm" +#include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\pimpin_ride.dm" diff --git a/tgui/.gitignore b/tgui/.gitignore new file mode 100644 index 00000000000..71b051e887f --- /dev/null +++ b/tgui/.gitignore @@ -0,0 +1,2 @@ +npm-debug.log +node_modules/ diff --git a/nano/Gulpfile.js b/tgui/Gulpfile.js similarity index 53% rename from nano/Gulpfile.js rename to tgui/Gulpfile.js index 203c68bf5c2..d1c580b989f 100644 --- a/nano/Gulpfile.js +++ b/tgui/Gulpfile.js @@ -1,2 +1,2 @@ require('coffee-script/register'); -require('./Gulpfile.coffee'); +require('./gulp'); diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css new file mode 100644 index 00000000000..f7911a750af --- /dev/null +++ b/tgui/assets/tgui.css @@ -0,0 +1 @@ +.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight,.label{color:#8ba5c4}.dark{color:#272727}html{box-sizing:border-box;min-height:100%;margin:0;cursor:default}*,:after,:before{box-sizing:inherit}body{min-height:100%;height:100%;margin:0 6px;background-color:#202020;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff}main{display:block;margin-top:32px;padding-top:3px}hr{height:2px;background-color:#40628a;border:none}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}.bar .barText,span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bold{font-weight:700}.italic{font-style:italic}[unselectable]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}.bar .barText{position:absolute;top:0;right:3px}.bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}.bar .barFill.good{background-color:#537d29}.bar .barFill.average{background-color:#be6209}.bar .barFill.bad{background-color:#b00e0e}.bar .barFill.highlight{background-color:#8ba5c4}span.button{display:inline-block;vertical-align:middle;height:20px;line-height:19px;padding:0 5px;white-space:nowrap;transition:background-color .25s,box-shadow .25s}span.button .fa{padding-right:2px}span.button.normal{background-color:#40628a}span.button.normal:focus,span.button.normal:hover{outline:0;box-shadow:inset 0 0 100px 100px hsla(0,0%,100%,.15)}span.button.disabled{background-color:#999}span.button.selected{background-color:#2f943c}span.button.caution{background-color:#9a9d00}span.button.danger{background-color:#9d0808}span.button.gridable{width:125px;margin:2px 0}div.display,div.notice{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}div.display header,div.notice header,div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;border-bottom:2px solid #40628a}div.display header .button,div.notice header .button,div.subdisplay header .button{position:absolute;bottom:6px;right:4px}div.display article,div.notice article,div.subdisplay article{display:table;width:100%;border-spacing:4px 6px}div.notice{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);margin:8px 0;box-shadow:none;color:#000;font-weight:700;font-style:italic}div.notice .button{outline:1px solid #272727}div.notice .label{color:#000}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}section .content,section .label,section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle}section{display:table-row;width:100%;padding:3px 0}section:not(first-child){padding-top:4px}section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}section .content:not(:last-child){padding-right:16px}section .line{width:100%}section .buttoninfo{margin-left:5px}div.subdisplay{width:100%;margin:0}header.titlebar .close,header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#98b0c3}header.titlebar .close:hover,header.titlebar .minimize:hover{color:#a7bccc}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{position:absolute;top:6px;right:46px}header.titlebar .close{position:absolute;top:4px;right:12px}.wf-inactive .minimize:after{content:"-"}.wf-inactive .close:after{content:"X"}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020)}body.generic,body.nanotrasen{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMjUiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020)} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js new file mode 100644 index 00000000000..b148dd3de62 --- /dev/null +++ b/tgui/assets/tgui.js @@ -0,0 +1,9 @@ +!function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(a)return a(o,!0);var c=Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(t){var n=e[o][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;o-1}}([].indexOf||function(t){for(V=this.length;V--&&this[V]!==t;);return V}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e0||-1)*Math.floor(Math.abs(e))),e},ToPrimitive:function(e){var n,r,i;if(R(e))return e;if(r=e.valueOf,t(r)&&(n=r.call(e),R(n)))return n;if(i=e.toString,t(i)&&(n=i.call(e),R(n)))return n;throw new TypeError},ToObject:function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return r(t)},ToUint32:function(t){return t>>>0}},D=function(){};M(a,{bind:function(e){var n=this;if(!t(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var i,a=l.call(arguments,1),o=function(){if(this instanceof i){var t=n.apply(this,d.call(a,l.call(arguments)));return r(t)===t?t:this}return n.apply(e,d.call(a,l.call(arguments)))},s=g(0,n.length-a.length),u=[],c=0;s>c;c++)h.call(u,"$"+c);return i=Function("binder","return function ("+u.join(",")+"){ return binder.apply(this, arguments); }")(o),n.prototype&&(D.prototype=n.prototype,i.prototype=new D,D.prototype=null),i}});var U=m.bind(i.hasOwnProperty),V=m.bind(i.toString),B=m.bind(l),q=v.bind(l),H=m.bind(s.slice),z=m.bind(s.split),W=m.bind(s.indexOf),$=m.bind(h),G=m.bind(i.propertyIsEnumerable),K=m.bind(n.sort),Q=e.isArray||function(t){return"[object Array]"===V(t)},Y=1!==[].unshift(0);M(n,{unshift:function(){return f.apply(this,arguments),this.length}},Y),M(e,{isArray:Q});var J=r("a"),Z="a"!==J[0]||!(0 in J),X=function(t){var e=!0,n=!0;return t&&(t.call("foo",function(t,n,r){"object"!=typeof r&&(e=!1)}),t.call([1],function(){"use strict";n="string"==typeof this},"x")),!!t&&e&&n};M(n,{forEach:function(e){var n,r=I.ToObject(this),i=Z&&A(this)?z(this,""):r,a=-1,o=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++a1&&(r=arguments[1]),!t(n))throw new TypeError("Array.prototype.map callback must be a function");for(var u=0;o>u;u++)u in a&&(void 0===r?s[u]=n(a[u],u,i):s[u]=n.call(r,a[u],u,i));return s}},!X(n.map)),M(n,{filter:function(e){var n,r,i=I.ToObject(this),a=Z&&A(this)?z(this,""):i,o=I.ToUint32(a.length),s=[];if(arguments.length>1&&(r=arguments[1]),!t(e))throw new TypeError("Array.prototype.filter callback must be a function");for(var u=0;o>u;u++)u in a&&(n=a[u],(void 0===r?e(n,u,i):e.call(r,n,u,i))&&$(s,n));return s}},!X(n.filter)),M(n,{every:function(e){var n,r=I.ToObject(this),i=Z&&A(this)?z(this,""):r,a=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.every callback must be a function");for(var o=0;a>o;o++)if(o in i&&!(void 0===n?e(i[o],o,r):e.call(n,i[o],o,r)))return!1;return!0}},!X(n.every)),M(n,{some:function(e){var n,r=I.ToObject(this),i=Z&&A(this)?z(this,""):r,a=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.some callback must be a function");for(var o=0;a>o;o++)if(o in i&&(void 0===n?e(i[o],o,r):e.call(n,i[o],o,r)))return!0;return!1}},!X(n.some));var tt=!1;n.reduce&&(tt="object"==typeof n.reduce.call("es5",function(t,e,n,r){return r})),M(n,{reduce:function(e){var n=I.ToObject(this),r=Z&&A(this)?z(this,""):n,i=I.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var a,o=0;if(arguments.length>=2)a=arguments[1];else for(;;){if(o in r){a=r[o++];break}if(++o>=i)throw new TypeError("reduce of empty array with no initial value")}for(;i>o;o++)o in r&&(a=e(a,r[o],o,n));return a}},!tt);var et=!1;n.reduceRight&&(et="object"==typeof n.reduceRight.call("es5",function(t,e,n,r){return r})),M(n,{reduceRight:function(e){var n=I.ToObject(this),r=Z&&A(this)?z(this,""):n,i=I.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var a,o=i-1;if(arguments.length>=2)a=arguments[1];else for(;;){if(o in r){a=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>o)return a;do o in r&&(a=e(a,r[o],o,n));while(o--);return a}},!et);var nt=n.indexOf&&-1!==[0,1].indexOf(1,2);M(n,{indexOf:function(t){var e=Z&&A(this)?z(this,""):I.ToObject(this),n=I.ToUint32(e.length);if(0===n)return-1;var r=0;for(arguments.length>1&&(r=I.ToInteger(arguments[1])),r=r>=0?r:g(0,n+r);n>r;r++)if(r in e&&e[r]===t)return r;return-1}},nt);var rt=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);M(n,{lastIndexOf:function(t){var e=Z&&A(this)?z(this,""):I.ToObject(this),n=I.ToUint32(e.length);if(0===n)return-1;var r=n-1;for(arguments.length>1&&(r=b(r,I.ToInteger(arguments[1]))),r=r>=0?r:n-Math.abs(r);r>=0;r--)if(r in e&&t===e[r])return r;return-1}},rt);var it=function(){var t=[1,2],e=t.splice();return 2===t.length&&Q(e)&&0===e.length}();M(n,{splice:function(t,e){return 0===arguments.length?[]:p.apply(this,arguments)}},!it);var at=function(){var t={};return n.splice.call(t,0,0,1),1===t.length}();M(n,{splice:function(t,e){if(0===arguments.length)return[];var n=arguments;return this.length=g(I.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof e&&(n=B(arguments),n.length<2?$(n,this.length-t):n[1]=I.ToInteger(e)),p.apply(this,n)}},!at);var ot=function(){var t=new e(1e5);return t[8]="x",t.splice(1,1),7===t.indexOf("x")}(),st=function(){var t=256,e=[];return e[t]="a",e.splice(t+1,0,"b"),"a"===e[t]}();M(n,{splice:function(t,e){for(var n,r=I.ToObject(this),i=[],a=I.ToUint32(r.length),s=I.ToInteger(t),u=0>s?g(a+s,0):b(s,a),c=b(g(I.ToInteger(e),0),a-u),l=0;c>l;)n=o(u+l),U(r,n)&&(i[l]=r[n]),l+=1;var p,h=B(arguments,2),f=h.length;if(c>f){for(l=u;a-c>l;)n=o(l+c),p=o(l+f),U(r,n)?r[p]=r[n]:delete r[p],l+=1;for(l=a;l>a-c+f;)delete r[l-1],l-=1}else if(f>c)for(l=a-c;l>u;)n=o(l+c-1),p=o(l+f-1),U(r,n)?r[p]=r[n]:delete r[p],l-=1;l=u;for(var d=0;d=0&&!Q(e)&&t(e.callee)},At=St(arguments)?St:Ot;M(r,{keys:function(e){var n=t(e),r=At(e),i=null!==e&&"object"==typeof e,a=i&&A(e);if(!i&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var s=[],u=yt&&n;if(a&&wt||r)for(var c=0;ch;h++){var f=Tt[h];p&&"constructor"===f||!U(e,f)||$(s,f)}return s}});var Pt=r.keys&&function(){return 2===r.keys(arguments).length}(1,2),jt=r.keys&&function(){var t=r.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),Nt=r.keys;M(r,{keys:function(t){return Nt(At(t)?B(t):t)}},!Pt||jt);var Ft=-621987552e5,Mt="-000001",Rt=Date.prototype.toISOString&&-1===new Date(Ft).toISOString().indexOf(Mt),Lt=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();M(Date.prototype,{toISOString:function(){var t,e,n,r,i;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(r=this.getUTCFullYear(),i=this.getUTCMonth(),r+=Math.floor(i/12),i=(i%12+12)%12,t=[i+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],r=(0>r?"-":r>9999?"+":"")+H("00000"+Math.abs(r),r>=0&&9999>=r?-4:-6),e=t.length;e--;)n=t[e],10>n&&(t[e]="0"+n);return r+"-"+B(t,0,2).join("-")+"T"+B(t,2).join(":")+"."+H("000"+this.getUTCMilliseconds(),-3)+"Z"}},Rt||Lt);var It=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Ft).toJSON().indexOf(Mt)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}}();It||(Date.prototype.toJSON=function(e){var n=r(this),i=I.ToPrimitive(n);if("number"==typeof i&&!isFinite(i))return null;var a=n.toISOString;if(!t(a))throw new TypeError("toISOString property is not callable");return a.call(n)});var Dt=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Ut=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),Vt=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(Vt||Ut||!Dt){var Bt=Math.pow(2,31)-1,qt=L(new Date(1970,0,1,0,0,0,Bt+1).getTime());Date=function(t){var e=function(n,r,i,a,s,u,c){var l,p=arguments.length;if(this instanceof t){var h=u,f=c;if(qt&&p>=7&&c>Bt){var d=Math.floor(c/Bt)*Bt,m=Math.floor(d/1e3);h+=m,f-=1e3*m}l=1===p&&o(n)===n?new t(e.parse(n)):p>=7?new t(n,r,i,a,s,h,f):p>=6?new t(n,r,i,a,s,h):p>=5?new t(n,r,i,a,s):p>=4?new t(n,r,i,a):p>=3?new t(n,r,i):p>=2?new t(n,r):p>=1?new t(n):new t}else l=t.apply(this,arguments);return R(l)||M(l,{constructor:e},!0),l},n=RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),r=[0,31,59,90,120,151,181,212,243,273,304,334,365],i=function(t,e){var n=e>1?1:0;return r[e]+Math.floor((t-1969+n)/4)-Math.floor((t-1901+n)/100)+Math.floor((t-1601+n)/400)+365*(t-1970)},a=function(e){var n=0,r=e;if(qt&&r>Bt){var i=Math.floor(r/Bt)*Bt,a=Math.floor(i/1e3);n+=a,r-=1e3*a}return u(new t(1970,0,1,0,0,n,r))};for(var s in t)U(t,s)&&(e[s]=t[s]);M(e,{now:t.now,UTC:t.UTC},!0),e.prototype=t.prototype,M(e.prototype,{constructor:e},!0);var c=function(e){var r=n.exec(e);if(r){var o,s=u(r[1]),c=u(r[2]||1)-1,l=u(r[3]||1)-1,p=u(r[4]||0),h=u(r[5]||0),f=u(r[6]||0),d=Math.floor(1e3*u(r[7]||0)),m=!(!r[4]||r[8]),v="-"===r[9]?1:-1,g=u(r[10]||0),b=u(r[11]||0),y=h>0||f>0||d>0;return(y?24:25)>p&&60>h&&60>f&&1e3>d&&c>-1&&12>c&&24>g&&60>b&&l>-1&&l=-864e13&&864e13>=o)?o:NaN}return t.parse.apply(this,arguments)};return M(e,{parse:c}),e}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var Ht=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),zt={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var n=-1,r=e;++n=0;)n+=zt.data[e],zt.data[e]=Math.floor(n/t),n=n%t*zt.base},numToString:function(){for(var t=zt.size,e="";--t>=0;)if(""!==e||0===t||0!==zt.data[t]){var n=o(zt.data[t]);""===e?e=n:e+=H("0000000",0,7-n.length)+n}return e},pow:function ue(t,e,n){return 0===e?n:e%2===1?ue(t,e-1,n*t):ue(t*t,e/2,n)},log:function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}},Wt=function(t){var e,n,r,i,a,s,c,l;if(e=u(t),e=L(e)?0:Math.floor(e),0>e||e>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=u(this),L(n))return"NaN";if(-1e21>=n||n>=1e21)return o(n);if(r="",0>n&&(r="-",n=-n),i="0",n>1e-21)if(a=zt.log(n*zt.pow(2,69,1))-69,s=0>a?n*zt.pow(2,-a,1):n/zt.pow(2,a,1),s*=4503599627370496,a=52-a,a>0){for(zt.multiply(0,s),c=e;c>=7;)zt.multiply(1e7,0),c-=7;for(zt.multiply(zt.pow(10,c,1),0),c=a-1;c>=23;)zt.divide(1<<23),c-=23;zt.divide(1<0?(l=i.length,i=e>=l?r+H("0.0000000000000000000",0,e-l+2)+i:r+H(i,0,l-e)+"."+H(i,l-e)):i=r+i,i};M(c,{toFixed:Wt},Ht);var $t=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),Gt=c.toPrecision;M(c,{toPrecision:function(t){return void 0===t?Gt.call(this):Gt.call(this,t)}},$t),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var t=void 0===/()??/.exec("")[1],e=Math.pow(2,32)-1;s.split=function(n,r){var i=this+"";if(void 0===n&&0===r)return[];if(!T(n))return z(this,n,r);var a,o,s,u,c=[],l=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),p=0,f=RegExp(n.source,l+"g");t||(a=RegExp("^"+f.source+"$(?!\\s)",l));var d=void 0===r?e:I.ToUint32(r);for(o=f.exec(i);o&&(s=o.index+o[0].length,!(s>p&&($(c,H(i,p,o.index)),!t&&o.length>1&&o[0].replace(a,function(){for(var t=1;t1&&o.index=d)));)f.lastIndex===o.index&&f.lastIndex++,o=f.exec(i);return p===i.length?(u||!f.test(""))&&$(c,""):$(c,H(i,p)),c.length>d?H(c,0,d):c}}():"0".split(void 0,0).length&&(s.split=function(t,e){return void 0===t&&0===e?[]:z(this,t,e)});var Kt=s.replace,Qt=function(){var t=[];return"x".replace(/x(.)?/g,function(e,n){$(t,n)}),1===t.length&&void 0===t[0]}();Qt||(s.replace=function(e,n){var r=t(n),i=T(e)&&/\)[*?]/.test(e.source);if(r&&i){var a=function(t){var r=arguments.length,i=e.lastIndex;e.lastIndex=0;var a=e.exec(t)||[];return e.lastIndex=i,$(a,arguments[r-2],arguments[r-1]),n.apply(this,a)};return Kt.call(this,e,a)}return Kt.call(this,e,n)});var Yt=s.substr,Jt="".substr&&"b"!=="0b".substr(-1);M(s,{substr:function(t,e){var n=t;return 0>t&&(n=g(this.length+t,0)),Yt.call(this,n,e)}},Jt);var Zt=" \n\x0B\f\r   ᠎ â€â€‚         âŸã€€\u2028\u2029\ufeff",Xt="​",te="["+Zt+"]",ee=RegExp("^"+te+te+"*"),ne=RegExp(te+te+"*$"),re=s.trim&&(Zt.trim()||!Xt.trim());M(s,{trim:function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");return o(this).replace(ee,"").replace(ne,"")}},re);var ie=s.lastIndexOf&&-1!=="abcã‚ã„".lastIndexOf("ã‚ã„",2);M(s,{lastIndexOf:function(t){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");for(var e=o(this),n=o(t),r=arguments.length>1?u(arguments[1]):NaN,i=L(r)?1/0:I.ToInteger(r),a=b(g(i,0),e.length),s=n.length,c=a+s;c>0;){c=g(0,c-s);var l=W(H(e,c,a+s),n);if(-1!==l)return c+l}return-1}},ie);var ae=s.lastIndexOf;if(M(s,{lastIndexOf:function(t){return ae.apply(this,arguments)}},1!==s.lastIndexOf.length),(8!==parseInt(Zt+"08")||22!==parseInt(Zt+"0x16"))&&(parseInt=function(t){var e=/^[\-+]?0[xX]/;return function(n,r){var i=o(n).trim(),a=u(r)||(e.test(i)?16:10);return t(i,a)}}(parseInt)),new RangeError("test")+""!="RangeError: test"){var oe=function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");var t=this.name;void 0===t?t="Error":"string"!=typeof t&&(t=o(t));var e=this.message;return void 0===e?e="":"string"!=typeof e&&(e=o(e)),t?e?t+": "+e:t:e};Error.prototype.toString=oe}if(F){var se=function(t,e){if(G(t,e)){var n=Object.getOwnPropertyDescriptor(t,e);n.enumerable=!1,Object.defineProperty(t,e,n)}};se(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),se(Error.prototype,"name")}})},{}],3:[function(t,e,n){!function(t,n){function r(t,e){var n=t.createElement("p"),r=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function i(){var t=w.elements;return"string"==typeof t?t.split(" "):t}function a(t,e){var n=w.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),w.elements=n+" "+t,l(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,r){if(e||(e=n),h)return e.createElement(t);r||(r=o(e));var i;return i=r.cache[t]?r.cache[t].cloneNode():v.test(t)?(r.cache[t]=r.createElem(t)).cloneNode():r.createElem(t),!i.canHaveChildren||m.test(t)||i.tagUrn?i:r.frag.appendChild(i)}function u(t,e){if(t||(t=n),h)return t.createDocumentFragment();e=e||o(t);for(var r=e.frag.cloneNode(),a=0,s=i(),u=s.length;u>a;a++)r.createElement(s[a]);return r}function c(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return w.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(w,e.frag)}function l(t){t||(t=n);var e=o(t);return!w.shivCSS||p||e.hasCSS||(e.hasCSS=!!r(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),h||c(t,e),t}var p,h,f="3.7.3-pre",d=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",p="hidden"in t,h=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){p=!0,h=!0}}();var w={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:f,shivCSS:d.shivCSS!==!1,supportsUnknownElements:h,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:l,createElement:s,createDocumentFragment:u,addElements:a};t.html5=w,l(n),"object"==typeof e&&e.exports&&(e.exports=w)}("undefined"!=typeof window?window:this,document)},{}],4:[function(t,e,n){(function(t){!function(t){function e(t,e,n,r){for(var a,o=n.slice(),s=i(e,t),u=0,c=o.length;c>u&&(handler=o[u],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return a=!s.stoppedPropagation,r&&a&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function r(t,e,r){var i=b(e||t,r);v(t,"textContent",n(function(){return i.get.call(this)},function(t){i.set.call(this,t)}))}function i(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function a(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!h&&k.test(document.readyState)&&(h=!h,document.detachEvent(f,u),t=document.createEvent("Event"),t.initEvent(d,!0,!0),document.dispatchEvent(t))}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function l(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var p=!0,h=!1,f="onreadystatechange",d="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var r in n)if(y.call(n,r))try{v(e,r,n[r])}catch(i){t.console&&console.log(r+" failed on object:",e,i.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,w=t.Element.prototype,x=t.Text.prototype,_=/^[a-z]+$/,k=/loaded|complete/,E={},T=document.createElement("div"),C=document.documentElement,S=C.removeAttribute,O=C.setAttribute;r(t.HTMLCommentElement.prototype,w,"nodeValue"),r(t.HTMLScriptElement.prototype,null,"text"),r(x,null,"nodeValue"),r(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(w,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,r){var i,o,u=this,c="on"+t,p=u[m]||v(u,m,{value:{}})[m],h=p[c]||(p[c]={}),f=h.h||(h.h=[]);if(!y.call(h,"w")){if(h.w=function(t){return t[m]||e(u,l(u,t),f,!1)},!y.call(E,c))if(_.test(t)){try{i=document.createEventObject(),i[m]=!0,9!=u.nodeType&&null==u.parentNode&&T.appendChild(u),(o=u.getAttribute(c))&&S.call(u,c),u.fireEvent(c,i),E[c]=!0}catch(i){for(E[c]=!1;T.hasChildNodes();)T.removeChild(T.firstChild)}null!=o&&O.call(u,c,o)}else E[c]=!1;(h.n=E[c])&&u.attachEvent(c,h.w)}a(f,n)<0&&f[r?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}},dispatchEvent:{value:function(t){var n,r=this,i="on"+t.type,a=r[m],o=a&&a[i],s=!!o;return t.target||(t.target=r),s?o.n?r.fireEvent(i,t):e(r,t,o.h,!0):(n=r.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){var r=this,i="on"+t,o=r[m],s=o&&o[i],u=s&&s.h,c=u?a(u,e):-1;c>-1&&u.splice(c,1)}}}),g(x,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var r=this,i="on"+t,o=r[m]||v(r,m,{value:{}})[m],s=o[i]||(o[i]={}),u=s.h||(s.h=[]);a(u,e)<0&&(r[i]||(r[i]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),r.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,r="on"+t.type,i=n[m],a=i&&i[r],o=!!a;return o&&(a.n?n.fireEvent(r,t):e(n,t,a.h,!0))}},removeEventListener:{value:w.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){ +return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:{value:function(e,n,r){var i=this;w.addEventListener.call(i,e,n,r),p&&e===d&&!k.test(i.readyState)&&(p=!1,i.attachEvent(f,u),t==top&&!function a(t){try{i.documentElement.doScroll("left"),u()}catch(e){setTimeout(a,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,r=/^(top|right|bottom|left)$/,i=/\-([a-z])/g,a=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,c=u.style,l=u.currentStyle,p=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(i,a),e=l?l[t]:c[t],n.test(e)&&!r.test(t)&&(o=c.left,s=p&&p.left,s&&(p.left=l.left),c.left="fontSize"===t?"1em":e,e=c.pixelLeft+"px",c.left=o,s&&(p.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,r){return r?new e(n):new t(n)}}()},addEventListener:{value:function(n,r,i){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,l(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),a(o,r)<0&&o[i?"unshift":"push"](r)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,r){var i="on"+e,o=(t[i]||Object)[m],s=o?a(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var i,a;a=n.shift();)for(i in a)Oo.call(a,i)&&(t[i]=a[i]);return t}function i(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function a(t){return"[object Array]"===Ao.call(t)}function o(t){return Po.test(Ao.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function c(t){return t&&"[object Object]"===Ao.call(t)}function l(t,e){return t.replace(/%s/g,function(){return e.shift()})}function p(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];throw t=l(t,n),Error(t)}function h(){Av.DEBUG&&To.apply(null,arguments)}function f(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=l(t,n),Co(t,n)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=l(t,n),No[t]||(No[t]=!0,Co(t,n))}function m(){Av.DEBUG&&f.apply(null,arguments)}function v(){Av.DEBUG&&d.apply(null,arguments)}function g(t,e,n){var r=b(t,e,n);return r?r[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function w(t){var e,n,r,i,a,o;for(e=t.split("."),(n=Bo[e.length])||(n=x(e.length)),a=[],r=function(t,n){return t?"*":e[n]},i=n.length;i--;)o=n[i].map(r).join("."),a.hasOwnProperty(o)||(a.push(o),a[o]=!0);return a}function x(t){var e,n,r,i,a,o,s,u,c="";if(!Bo[t]){for(r=[];c.length=a;a+=1){for(n=a.toString(2);n.lengtho;o++)u.push(i(n[o]));r[a]=u}Bo[t]=r}return Bo[t]}function _(t,e,n,r){var i=t[e];if(!i||!i.equalsOrStartsWith(r)&&i.equalsOrStartsWith(n))return t[e]=i?i.replace(n,r):r,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function E(t){return null==t?t:(zo.hasOwnProperty(t)||(zo[t]=new Wo(t)),zo[t])}function T(t,e){function n(e,n){var r,i,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(r=t.viewmodel.wrapped[n.str],i=r?r.get():t.viewmodel.get(n),o=i?Object.keys(i):null),o&&o.forEach(function(t){"_ractive"===t&&a(i)||e.push(n.join(t))}),e}var r,i,o;for(r=e.str.split("."),o=[Go];i=r.shift();)"*"===i?o=o.reduce(n,[]):o[0]===Go?o[0]=E(i):o=o.map(C(i));return o}function C(t){return function(e){return e.join(t)}}function S(t){return t?t.replace(qo,".$1"):""}function O(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var r=void 0,i=void 0;if(/\*/.test(e))return i={},T(t,E(S(e))).forEach(function(e){var r=t.viewmodel.get(e);if(!u(r))throw Error(Qo);i[e.str]=r+n}),t.set(i);if(r=t.get(e),!u(r))throw Error(Qo);return t.set(e,+r+n)}function A(t,e){return Ko(this,t,void 0===e?1:+e)}function P(t){this.event=t,this.method="on"+t,this.deprecate=ts[t]}function j(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function N(t,e){for(var n=0,r=t.length;r>n;n++)if(t[n]==e)return!0;return!1}function F(t,e){var n;if(!a(t)||!a(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function M(t){return"string"==typeof t?[t]:void 0===t?[]:t}function R(t){return t[t.length-1]}function L(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function I(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function D(t){setTimeout(t,0)}function U(t,e){return function(){for(var n;n=t.shift();)n(e)}}function V(t,e,n,r){var i;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof es)e.then(n,r);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{i=e.then}catch(a){return void r(a)}if("function"==typeof i){var o,s,u;s=function(e){o||(o=!0,V(t,e,n,r))},u=function(t){o||(o=!0,r(t))};try{i.call(e,s,u)}catch(a){if(!o)return r(a),void(o=!0)}}else n(e)}}function B(t,e,n){var r;return e=S(e),"~/"===e.substr(0,2)?(r=E(e.substring(2)),z(t,r.firstKey,n)):"."===e[0]?(r=q(ss(n),e),r&&z(t,r.firstKey,n)):r=H(t,E(e),n),r}function q(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return E(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),E(n.join("."))}return E(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function H(t,e,n,r){var i,a,o,s,u;if(e.isRoot)return e;for(a=e.firstKey;n;)if(i=n.context,n=n.parent,i&&(s=!0,o=t.viewmodel.get(i),o&&("object"==typeof o||"function"==typeof o)&&a in o))return i.join(e.str);return W(t.viewmodel,a)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,a=E(a),u=H(t.parent,a,n,!0))?(t.viewmodel.map(a,{origin:t.parent.viewmodel,keypath:u}),e):r||s?void 0:(t.viewmodel.set(e,void 0),e)}function z(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=E(e),(n=H(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function $(t){t.teardown()}function G(t){t.unbind()}function K(t){t.unrender()}function Q(t){t.cancel()}function Y(t){t.detach()}function J(t){t.detachNodes()}function Z(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function X(){for(var t,e,n;ls.ractives.length;)e=ls.ractives.pop(),n=e.viewmodel.applyChanges(),n&&ds.fire(e,n);for(tt(),t=0;t=0;a--)i=t._subs[e[a]],i&&(s=gt(t,i,n,r)&&s);if(Vs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=E(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,r)}}function gt(t,e,n,r){var i=null,a=!1;n&&!n._noArg&&(r=[n].concat(r)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,r)===!1&&(a=!0);return n&&!n._noArg&&a&&(i=n.original)&&(i.preventDefault&&i.preventDefault(),i.stopPropagation&&i.stopPropagation()),!a}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};Bs(this,t,e)}function yt(t){var e;return t=E(S(t)),e=this.viewmodel.get(t,zs),void 0===e&&this.parent&&!this.isolated&&us(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function wt(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){$s.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function _t(t,e,n){var r,i;return t=E(S(t)),r=this.viewmodel.get(t),a(r)&&a(e)?(i=ms.start(this,!0),this.viewmodel.merge(t,r,e,n),ms.end(),i):this.set(t,e,n&&n.complete)}function kt(t,e){var n,r;return n=T(t,e),r={},n.forEach(function(e){r[e.str]=t.get(e.str)}),r}function Et(t,e,n,r){var i,a,o;e=E(S(e)),r=r||su,e.isPattern?(i=new au(t,e,n,r),t.viewmodel.patternObservers.push(i),a=!0):i=new Ys(t,e,n,r),i.init(r.init),t.viewmodel.register(e,i,a?"patternObservers":"observers"),i.ready=!0;var s={cancel:function(){var n;o||(a?(n=t.viewmodel.patternObservers.indexOf(i),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,i,"patternObservers")):t.viewmodel.unregister(e,i,"observers"),o=!0)}};return t._observers.push(s),s}function Tt(t,e,n){var r,i,a,o;if(c(t)){n=e,i=t,r=[];for(t in i)i.hasOwnProperty(t)&&(e=i[t],r.push(this.observe(t,e,n)));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",ou(this,t,e,n);if(a=t.split(" "),1===a.length)return ou(this,t,e,n);for(r=[],o=a.length;o--;)t=a[o],t&&r.push(ou(this,t,e,n));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}function Ct(t,e,n){var r=this.observe(t,function(){e.apply(this,arguments),r.cancel()},{init:!1,defer:n&&n.defer});return r}function St(t,e){var n,r=this;if(t)n=t.split(" ").map(lu).filter(pu),n.forEach(function(t){var n,i;(n=r._subs[t])&&(e?(i=n.indexOf(e),-1!==i&&n.splice(i,1)):r._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function Ot(t,e){var n,r,i,a=this;if("object"==typeof t){n=[];for(r in t)t.hasOwnProperty(r)&&n.push(this.on(r,t[r]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return i=t.split(" ").map(lu).filter(pu),i.forEach(function(t){(a._subs[t]||(a._subs[t]=[])).push(e)}),{cancel:function(){return a.off(t,e)}}}function At(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Pt(t,e,n){var r,i,a,o,s,u,c=[];if(r=jt(t,e,n),!r)return null;for(i=t.length,s=r.length-2-r[1],a=Math.min(i,r[0]),o=a+r[1],u=0;a>u;u+=1)c.push(u);for(;o>u;u+=1)c.push(-1);for(;i>u;u+=1)c.push(u+s);return 0!==s?c.touchedFrom=r[0]:c.touchedFrom=t.length,c}function jt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Nt(e,n){var r,i,a,o=this;if(a=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),r=ms.start(this,!0),ms.scheduleTask(function(){return Ou.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Ft(s),e.innerHTML=""}return this.cssId&&Cu.apply(),e&&((i=e.__ractive_instances__)?i.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),ms.end(),this.transitionsEnabled=a,r.then(function(){return Au.fire(o)})}function Ft(t){t.splice(0,t.length).forEach($)}function Mt(t,e){for(var n=t.slice(),r=e.length;r--;)~n.indexOf(e[r])||n.push(e[r]);return n}function Rt(t,e){var n,r,i;return r='[data-ractive-css~="{'+e+'}"]',i=function(t){var e,n,i,a,o,s,u,c=[];for(e=[];n=Ru.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(a=e.map(It),u=e.length;u--;)s=a.slice(),i=e[u],s[u]=i.base+r+i.modifiers||"",o=a.slice(),o[u]=r+" "+o[u],c.push(s.join(" "),o.join(" "));return c.join(", ")},n=Iu.test(t)?t.replace(Iu,r):t.replace(Mu,"").replace(Fu,function(t,e){var n,r;return Lu.test(e)?t:(n=e.split(",").map(Lt),r=n.map(i).join(", ")+" ",t.replace(e,r))})}function Lt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function It(t){return t.str}function Dt(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?p("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Ut(t,e){Dt(e);var n="function"==typeof t,r="function"==typeof e;return e||n||(e={}),n||r?function(){var i=r?Vt(e,this):e,a=n?Vt(t,this):t;return Bt(i,a)}:Bt(e,t)}function Vt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&p("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Bt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function qt(t){var e=wo(Wu);return e.parse=function(e,n){return Ht(e,n||t)},e}function Ht(t,e){if(!Hu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hu(t,e||this.options)}function zt(t,e){var n;if(!Za){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a + +
+
+ {{yield}} +
diff --git a/tgui/scripts/components/button.ract b/tgui/scripts/components/button.ract new file mode 100644 index 00000000000..739cf15f743 --- /dev/null +++ b/tgui/scripts/components/button.ract @@ -0,0 +1,36 @@ + + + + {{#if icon}} + + {{/if}} + {{yield}} + diff --git a/tgui/scripts/components/display.ract b/tgui/scripts/components/display.ract new file mode 100644 index 00000000000..cdb1fb3c070 --- /dev/null +++ b/tgui/scripts/components/display.ract @@ -0,0 +1,11 @@ +
+ {{#if title}} +
+

{{title}}

+ {{#if button}}{{yield button}}{{/if}} +
+ {{/if}} +
+ {{yield}} +
+
diff --git a/tgui/scripts/components/notice.ract b/tgui/scripts/components/notice.ract new file mode 100644 index 00000000000..f6c063596d8 --- /dev/null +++ b/tgui/scripts/components/notice.ract @@ -0,0 +1,3 @@ +
+ {{yield}} +
diff --git a/tgui/scripts/components/resize.ract b/tgui/scripts/components/resize.ract new file mode 100644 index 00000000000..1968034699b --- /dev/null +++ b/tgui/scripts/components/resize.ract @@ -0,0 +1,12 @@ + + +{{#if config.fancy}} +
+{{/if}} diff --git a/tgui/scripts/components/section.ract b/tgui/scripts/components/section.ract new file mode 100644 index 00000000000..bcdd3e0e6e8 --- /dev/null +++ b/tgui/scripts/components/section.ract @@ -0,0 +1,14 @@ +
+ {{#if label}} + {{label}}: + {{#if nowrap}} + {{yield}} + {{else}} +
+ {{yield}} +
+ {{/if}} + {{else}} + {{yield}} + {{/if}} +
diff --git a/tgui/scripts/components/subdisplay.ract b/tgui/scripts/components/subdisplay.ract new file mode 100644 index 00000000000..108cdc933b3 --- /dev/null +++ b/tgui/scripts/components/subdisplay.ract @@ -0,0 +1,11 @@ +
+ {{#if title}} +
+

{{title}}

+ {{#if button}}{{yield button}}{{/if}} +
+ {{/if}} +
+ {{yield}} +
+
diff --git a/tgui/scripts/components/titlebar.ract b/tgui/scripts/components/titlebar.ract new file mode 100644 index 00000000000..b5ec50a5b1f --- /dev/null +++ b/tgui/scripts/components/titlebar.ract @@ -0,0 +1,31 @@ + + +
+ + {{yield}} + {{#if config.fancy}} + + + {{/if}} +
diff --git a/tgui/scripts/constants.coffee b/tgui/scripts/constants.coffee new file mode 100644 index 00000000000..1457071dabe --- /dev/null +++ b/tgui/scripts/constants.coffee @@ -0,0 +1,6 @@ +# Constants used in tgui; these are mirrored from the BYOND code. +module.exports = + UI_INTERACTIVE: 2 + UI_UPDATE: 1 + UI_DISABLED: 0 + UI_CLOSE: -1 diff --git a/tgui/scripts/dragresize.coffee b/tgui/scripts/dragresize.coffee new file mode 100644 index 00000000000..c4e6e6d0b07 --- /dev/null +++ b/tgui/scripts/dragresize.coffee @@ -0,0 +1,37 @@ +byond = require "./byond" + + +module.exports = + drag: (ractive, event) -> + lock = (x, y) -> + if x < 0 # Left + x = 0 + if y < 0 # Top + y = 0 + if x + window.innerWidth > screen.availWidth # Right + x = screen.availWidth - window.innerWidth + if y + window.innerHeight > screen.availHeight # Bottom + y = screen.availHeight - window.innerHeight + {x: x, y: y} + + if ractive.get "x" + x = (event.screenX - ractive.get "x") + window.screenLeft + y = (event.screenY - ractive.get "y") + window.screenTop + if ractive.get "config.locked" then {x, y} = lock x, y # Lock to primary monitor. + + byond.winset ractive.get("config.window"), "pos", "#{x},#{y}" + ractive.set x: event.screenX, y: event.screenY + + resize: (ractive, event) -> + sane = (x, y) -> + x = Math.clamp x, 100, screen.width + y = Math.clamp y, 100, screen.height + {x: x, y: y} + + if ractive.get "x" + x = (event.screenX - ractive.get "x") + window.innerWidth + y = (event.screenY - ractive.get "y") + window.innerHeight + {x, y} = sane x, y + + byond.winset ractive.get("config.window"), "size", "#{x},#{y}" + ractive.set x: event.screenX, y: event.screenY diff --git a/tgui/scripts/interfaces/air_alarm.ract b/tgui/scripts/interfaces/air_alarm.ract new file mode 100644 index 00000000000..c9928ea3ef4 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm.ract @@ -0,0 +1,30 @@ + + + + + + + + + {{#if data.siliconUser}} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + +{{#if !data.locked || data.siliconUser}} + {{#if data.screen == 1}} + + {{elseif data.screen == 2}} + + {{elseif data.screen == 3}} + + {{elseif data.screen == 4}} + + {{elseif data.screen == 5}} + + {{/if}} +{{/if}} diff --git a/tgui/scripts/interfaces/air_alarm/back.ract b/tgui/scripts/interfaces/air_alarm/back.ract new file mode 100644 index 00000000000..cb0db0f5c20 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/back.ract @@ -0,0 +1 @@ +Back diff --git a/tgui/scripts/interfaces/air_alarm/controls.ract b/tgui/scripts/interfaces/air_alarm/controls.ract new file mode 100644 index 00000000000..bd9ae86d908 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/controls.ract @@ -0,0 +1,23 @@ + + + Area Atmosphere Alarm + + + Panic Siphon + +
+ + Vent Controls + + + Scrubber Controls + + + Operating Mode + + + Alarm Thresholds + +
diff --git a/tgui/scripts/interfaces/air_alarm/modes.ract b/tgui/scripts/interfaces/air_alarm/modes.ract new file mode 100644 index 00000000000..cca50a7f730 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/modes.ract @@ -0,0 +1,14 @@ + + + + {{#partial button}} + + {{/partial}} + {{#each data.modes}} + + {{name}} + + {{/each}} + diff --git a/tgui/scripts/interfaces/air_alarm/scrubbers.ract b/tgui/scripts/interfaces/air_alarm/scrubbers.ract new file mode 100644 index 00000000000..efa4e63b97f --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/scrubbers.ract @@ -0,0 +1,33 @@ + + + + {{#partial button}} + + {{/partial}} + {{#each data.scrubbers}} + + + {{power ? "On" : "Off"}} + + + {{scrubbing ? "Scrubbing" : "Siphoning"}} + + + {{widenet ? "Expanded" : "Normal"}} + + + Oxygen + Nitrogen + Plasma + + + {{else}} + Error: No scrubbers connected. + {{/each}} + diff --git a/tgui/scripts/interfaces/air_alarm/status.ract b/tgui/scripts/interfaces/air_alarm/status.ract new file mode 100644 index 00000000000..ddb278d0d76 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/status.ract @@ -0,0 +1,31 @@ + + {{#if data.environment_data}} + {{#each data.environment_data}} + + + {{Math.fixed(value, 2)}}{{unit}} + + + {{/each}} + + + {{data.danger_level == 2 ? "Danger (Internals Required)" : data.danger_level == 1 ? "Caution" : "Optimal"}} + + + + + {{data.atmos_alarm ? "Atmosphere Alarm" : fire_alarm ? "Fire Alarm" : "Nominal"}} + + + {{else}} + + Warning: Cannot obtain air sample for analysis. + + {{/if}} + {{#if data.emagged}} +
+ + Warning: Safety measures offline. Device may exhibit abnormal behavior. + + {{/if}} +
diff --git a/tgui/scripts/interfaces/air_alarm/thresholds.ract b/tgui/scripts/interfaces/air_alarm/thresholds.ract new file mode 100644 index 00000000000..a524e84ae27 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/thresholds.ract @@ -0,0 +1,30 @@ + + + + {{#partial button}} + + {{/partial}} + + + + + + + + + + {{#each data.thresholds}} + + {{#each settings}}{{/each}} + {{/each}} + +
min2min1max1max2
{{{name}}} + {{Math.fixed(selected, 2)}} +
+ + + diff --git a/tgui/scripts/interfaces/air_alarm/vents.ract b/tgui/scripts/interfaces/air_alarm/vents.ract new file mode 100644 index 00000000000..b88a79f9dd3 --- /dev/null +++ b/tgui/scripts/interfaces/air_alarm/vents.ract @@ -0,0 +1,32 @@ + + + + {{#partial button}} + + {{/partial}} + {{#each data.vents}} + + + {{power ? "On" : "Off"}} + + + {{direction == "release" ? "Pressurizing" : "Siphoning"}} + + + Internal + External + + + {{Math.fixed(external)}} + Reset + + + {{else}} + Error: No vents connected. + {{/each}} + diff --git a/tgui/scripts/interfaces/airlock_electronics.ract b/tgui/scripts/interfaces/airlock_electronics.ract new file mode 100644 index 00000000000..8873d7de6be --- /dev/null +++ b/tgui/scripts/interfaces/airlock_electronics.ract @@ -0,0 +1,35 @@ + + + {{data.oneAccess ? "One" : "All"}} Required + Clear + +
+
+ + {{#each data.regions}} + + {{/each}} + + + {{#each data.regions}} + + {{/each}} + +
{{name}}
{{#each accesses}} + {{name}} +
+ {{/each}}
+
+ + diff --git a/tgui/scripts/interfaces/apc.ract b/tgui/scripts/interfaces/apc.ract new file mode 100644 index 00000000000..9afecdb8b7b --- /dev/null +++ b/tgui/scripts/interfaces/apc.ract @@ -0,0 +1,110 @@ + + + + {{#if data.siliconUser}} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + + + {{#if data.locked && !data.siliconUser}} + {{data.isOperating ? "On" : "Off"}} + {{else}} + {{data.isOperating ? "On" : "Off"}} + {{/if}} + + + {{data.externalPower == 2 ? "Good" : data.externalPower == 1 ? "Low" : "None"}} + + + {{#if data.powerCellStatus != null}} + {{Math.fixed(adata.powerCellStatus)}}% + {{else}} + Power cell removed. + {{/if}} + + {{#if data.powerCellStatus != null}} + + {{#if data.locked && !data.siliconUser}} + {{data.chargeMode ? "Auto" : "Off"}} + {{else}} + {{data.chargeMode ? "Auto" : "Off"}} + {{/if}} +   + [{{data.chargingStatus == 2 ? "Fully Charged" : data.chargingStatus == 1 ? "Charging" : "Not Charging"}}] + + {{/if}} + + + {{#each adata.powerChannels}} + +
{{Math.round(powerLoad)}} W
+
{{status >= 2 ? "On" : "Off"}}
+
[{{status == 1 || status == 3 ? "Auto" : "Manual"}}]
+
+ {{#if !data.locked || data.siliconUser}} + Auto + On + Off + {{/if}} +
+
+ {{/each}} + + {{Math.round(adata.totalLoad)}} W + +
+{{#if data.siliconUser}} + + Overload + {{#if data.malfStatus}} + {{malfButton}} + {{/if}} + +{{/if}} + + + {{#if data.locked && !data.siliconUser}} + {{data.coverLocked ? "Engaged" : "Disengaged"}} + {{else}} + {{data.coverLocked ? "Engaged" : "Disengaged"}} + {{/if}} + + diff --git a/tgui/scripts/interfaces/atmos_filter.ract b/tgui/scripts/interfaces/atmos_filter.ract new file mode 100644 index 00000000000..420e239a229 --- /dev/null +++ b/tgui/scripts/interfaces/atmos_filter.ract @@ -0,0 +1,25 @@ + + + {{data.on ? "On" : "Off"}} + + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + + Nothing + Plasma + O2 + N2 + CO2 + N2O + + diff --git a/tgui/scripts/interfaces/atmos_mixer.ract b/tgui/scripts/interfaces/atmos_mixer.ract new file mode 100644 index 00000000000..0212e7f4afb --- /dev/null +++ b/tgui/scripts/interfaces/atmos_mixer.ract @@ -0,0 +1,33 @@ + + + {{data.on ? "On" : "Off"}} + + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + + + + + + {{Math.round(adata.node1_concentration)}}% + + + + + + + {{Math.round(adata.node2_concentration)}}% + + diff --git a/tgui/scripts/interfaces/atmos_pump.ract b/tgui/scripts/interfaces/atmos_pump.ract new file mode 100644 index 00000000000..08d2b1824c2 --- /dev/null +++ b/tgui/scripts/interfaces/atmos_pump.ract @@ -0,0 +1,19 @@ + + + {{data.on ? "On" : "Off"}} + + {{#if data.max_rate}} + + Set + Max + {{Math.round(adata.transfer_rate)}} L/s + + {{else}} + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + {{/if}} + diff --git a/tgui/scripts/interfaces/canister.ract b/tgui/scripts/interfaces/canister.ract new file mode 100644 index 00000000000..91e49c0bf67 --- /dev/null +++ b/tgui/scripts/interfaces/canister.ract @@ -0,0 +1,53 @@ + + The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a tank. + + + {{#partial button}} + Relabel + {{/partial}} + + {{Math.round(adata.tankPressure)}} kPa + + + {{data.portConnected ? "Connected" : "Not Connected"}} + + + + + {{Math.round(adata.releasePressure)}} kPa + + + Reset + Min + Set + Max + + + {{data.valveOpen ? "Open" : "Closed"}} + + + + {{#partial button}} + {{#if data.hasHoldingTank}} + Eject + {{/if}} + {{/partial}} + {{#if data.hasHoldingTank}} + + {{data.holdingTank.name}} + + + {{Math.round(adata.holdingTank.tankPressure)}} kPa + + {{else}} + + No Holding Tank + + {{/if}} + diff --git a/tgui/scripts/interfaces/chem_dispenser.ract b/tgui/scripts/interfaces/chem_dispenser.ract new file mode 100644 index 00000000000..8ec9acf8b68 --- /dev/null +++ b/tgui/scripts/interfaces/chem_dispenser.ract @@ -0,0 +1,44 @@ + + + {{Math.fixed(adata.energy)}} Units + + {{#if data.beakerTransferAmounts}} + + {{#each data.beakerTransferAmounts}} + {{.}} + {{/each}} + + {{/if}} + + + + {{#each data.chemicals}} + {{title}} + {{/each}} + + + + {{#partial button}} + Eject + {{/partial}} + {{#if data.beakerTransferAmounts}} + + {{#each data.beakerTransferAmounts}} + {{.}} + {{/each}} + + {{/if}} + + {{#if data.isBeakerLoaded}} + {{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units +
+ {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
+ {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
+
diff --git a/tgui/scripts/interfaces/chem_heater.ract b/tgui/scripts/interfaces/chem_heater.ract new file mode 100644 index 00000000000..6cdd258d0d8 --- /dev/null +++ b/tgui/scripts/interfaces/chem_heater.ract @@ -0,0 +1,29 @@ + + + {{data.isActive ? "On" : "Off"}} + + + {{Math.round(adata.targetTemp)}} K + + + + {{#partial button}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + Temperature: {{Math.round(adata.currentTemp)}} K +
+ {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
+ {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
+
diff --git a/tgui/scripts/interfaces/cryo.ract b/tgui/scripts/interfaces/cryo.ract new file mode 100644 index 00000000000..5bc2f65227f --- /dev/null +++ b/tgui/scripts/interfaces/cryo.ract @@ -0,0 +1,68 @@ + + + + + {{data.occupant.name ? data.occupant.name : "No Occupant"}} + + {{#if data.hasOccupant}} + + {{data.occupant.stat == 0 ? "Conscious" : data.occupant.stat == 1 ? "Unconcious" : "Dead"}} + + + {{Math.round(adata.occupant.bodyTemperature)}} K + + + {{Math.round(adata.occupant.health)}} + + {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}} + + {{Math.round(adata.occupant[type])}} + + {{/each}} + {{/if}} + + + + {{data.isOperating ? "On" : "Off"}} + + + {{Math.round(adata.cellTemperature)}} K + + + {{data.isOpen ? "Open" : "Closed"}} + {{data.autoEject ? "Auto" : "Manual"}} + + + + {{#partial button}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
+ {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
+
diff --git a/tgui/scripts/interfaces/error.ract b/tgui/scripts/interfaces/error.ract new file mode 100644 index 00000000000..b3baa85c589 --- /dev/null +++ b/tgui/scripts/interfaces/error.ract @@ -0,0 +1,3 @@ + + The requested interface ({{config.interface}}) was not found. Does it exist? + diff --git a/tgui/scripts/interfaces/smes.ract b/tgui/scripts/interfaces/smes.ract new file mode 100644 index 00000000000..2296795fc1a --- /dev/null +++ b/tgui/scripts/interfaces/smes.ract @@ -0,0 +1,69 @@ + + + + + {{Math.fixed(adata.capacityPercent)}}% + + + + + {{data.inputAttempt ? "Auto" : "Off"}} +   + [{{data.capacityPercent >= 100 ? "Fully Charged" : data.inputting ? "Charging" : "Not Charging"}}] + + + {{Math.round(adata.inputLevel)}}W + + + + + Set + + + + + {{Math.round(adata.inputAvailable)}}W + + + + + {{data.outputAttempt ? "On" : "Off"}} +   + [{{data.outputting ? "Sending" : data.charge > 0 ? "Not Sending" : "No Charge"}}] + + + {{Math.round(adata.outputLevel)}}W + + + + + Set + + + + + {{Math.round(adata.outputUsed)}}W + + diff --git a/tgui/scripts/interfaces/solar_control.ract b/tgui/scripts/interfaces/solar_control.ract new file mode 100644 index 00000000000..3139bd95c1b --- /dev/null +++ b/tgui/scripts/interfaces/solar_control.ract @@ -0,0 +1,46 @@ + + + {{Math.round(adata.generated)}}W + + + {{Math.round(adata.angle)}}° ({{data.direction}}) + + + 15° + + + 15° + + + + + Off + Timed + Auto + + + {{Math.round(adata.tracking_rate)}}°/h ({{data.rotating_way}}) + + + 180° + 30° + + + 30° + 180° + + + + {{#partial button}} + Refresh + {{/partial}} + + {{data.connected_tracker ? "" : "Not "}}Found + + + {{Math.round(adata.connected_panels)}} Panels Connected + + diff --git a/tgui/scripts/interfaces/space_heater.ract b/tgui/scripts/interfaces/space_heater.ract new file mode 100644 index 00000000000..18a887ffcc3 --- /dev/null +++ b/tgui/scripts/interfaces/space_heater.ract @@ -0,0 +1,51 @@ + + + + {{#partial button}} + {{#if data.open}} + Eject + {{/if}} + {{/partial}} + + {{data.on ? "On" : "Off"}} + + + {{#if data.hasPowercell}} + {{Math.fixed(adata.powerLevel)}}% + {{else}} + No Cell + {{/if}} + + + + + {{Math.round(adata.currentTemp)}}°C + + + {{Math.round(adata.targetTemp)}}°C + + {{#if data.open}} + + + + Set + + + + {{/if}} + + {{#if data.open}} + Heat + Cool + Auto + {{else}} + {{text.titleCase(data.mode)}} + {{/if}} + + diff --git a/tgui/scripts/interfaces/tanks.ract b/tgui/scripts/interfaces/tanks.ract new file mode 100644 index 00000000000..0ec253087cd --- /dev/null +++ b/tgui/scripts/interfaces/tanks.ract @@ -0,0 +1,36 @@ + + + + The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a mask. + + + + {{Math.round(adata.tankPressure)}} kPa + + + {{Math.round(adata.releasePressure)}} kPa + + + Reset + Min + Set + Max + + + {{data.valveOpen ? "Open" : "Closed"}} + + diff --git a/tgui/scripts/main.coffee b/tgui/scripts/main.coffee new file mode 100644 index 00000000000..71be68abf76 --- /dev/null +++ b/tgui/scripts/main.coffee @@ -0,0 +1,29 @@ +require "ie8" +require "dom4" +require "es5-shim" +require "html5shiv" +require "./math" + + +Ractive = require "ractive" +# Set Ractive debug mode based on if we're minified or not. +Ractive.DEBUG = /minified/.test (minified) -> + +WebFont = require "webfontloader" +# Load FontAwesome asynchronously from CDNJS. +WebFont.load + custom: + families: ["FontAwesome"] + urls: ["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"] + testStrings: + FontAwesome: "\uf240" + +tgui = require "./tgui" +# Create the UI; this is just a Ractive component. +window.tgui = new tgui + el: "#container" + data: -> + data = JSON.parse document.getElementById("data").textContent # Load initial data from the server. + alert "Initial data did not load correctly." if not data? or not (data.data? and data.config?) + data.adata = data.data # Spoof animated data as this is the first load. + data diff --git a/tgui/scripts/math.coffee b/tgui/scripts/math.coffee new file mode 100644 index 00000000000..7bb7000110c --- /dev/null +++ b/tgui/scripts/math.coffee @@ -0,0 +1,9 @@ +# Extensions to the built-in 'Math' object. + +# Helper to limit a number to be inside 'min' and 'max'. +Math.clamp = (number, min, max) -> + Math.max min, Math.min number, max + +# Helper to round a number to 'decimals' decimals. +Math.fixed = (number, decimals = 1) -> + Number Math.round(number + "e" + decimals) + "e-" + decimals diff --git a/tgui/scripts/text.coffee b/tgui/scripts/text.coffee new file mode 100644 index 00000000000..cb41507316f --- /dev/null +++ b/tgui/scripts/text.coffee @@ -0,0 +1,5 @@ +module.exports = + upperCaseFirst: (str) -> + str[0].toUpperCase() + str[1..].toLowerCase() + titleCase: (str) -> + str.replace /\w\S*/g, @upperCaseFirst diff --git a/tgui/scripts/tgui.ract b/tgui/scripts/tgui.ract new file mode 100644 index 00000000000..9cc60f70c6f --- /dev/null +++ b/tgui/scripts/tgui.ract @@ -0,0 +1,51 @@ + + + + + +{{{config.title}}} +
+ +
+ diff --git a/tgui/styles/components/bar.styl b/tgui/styles/components/bar.styl new file mode 100644 index 00000000000..c55738dac5c --- /dev/null +++ b/tgui/styles/components/bar.styl @@ -0,0 +1,28 @@ +.bar + display: inline-block + position: relative + vertical-align: middle + width: 100% + height: 20px + line-height: 17px + padding: 1px + + border: 1px solid colors.normal + background: colors.dark + + .barText + @extend $fontReset + position: absolute + top: 0 + right: 3px + + .barFill + display: block + height: 100% + + transition: background-color 1s + background-color: colors.normal + &.good { background-color: colors.good } + &.average { background-color: colors.average } + &.bad { background-color: colors.bad } + &.highlight { background-color: colors.highlight } diff --git a/tgui/styles/components/button.styl b/tgui/styles/components/button.styl new file mode 100644 index 00000000000..b65bdbdd153 --- /dev/null +++ b/tgui/styles/components/button.styl @@ -0,0 +1,30 @@ +span.button + @extend $fontReset + display: inline-block + vertical-align: middle + height: 20px + line-height: 19px + padding: 0 5px + white-space: nowrap + + .fa + padding-right: 2px + + transition: background-color 0.25s, box-shadow 0.25s + &.normal + background-color: colors.normal + &:hover, &:focus + outline: 0 + box-shadow: inset 0 0 100px 100px alpha(#fff, colors.hover) + &.disabled + background-color: colors.disabled + &.selected + background-color: colors.selected + &.caution + background-color: colors.caution + &.danger + background-color: colors.danger + + &.gridable + width: 125px + margin: 2px 0 diff --git a/tgui/styles/components/display.styl b/tgui/styles/components/display.styl new file mode 100644 index 00000000000..1201c07e62c --- /dev/null +++ b/tgui/styles/components/display.styl @@ -0,0 +1,26 @@ +div.display + width: 100% + padding: 4px + margin: 6px 0 + + background-color: alpha(#000, 0.33) // Transparent background. + box-shadow: inset 0 0 5px alpha(#000, 0.5) + + header + display: block + position: relative + width: 100% + padding: 0 4px + margin-bottom: 6px + + border-bottom: 2px solid colors.rule + + .button + position: absolute + bottom: 6px + right: 4px + + article + display: table + width: 100% + border-spacing: 4px 6px diff --git a/tgui/styles/components/notice.styl b/tgui/styles/components/notice.styl new file mode 100644 index 00000000000..76c9b6b3580 --- /dev/null +++ b/tgui/styles/components/notice.styl @@ -0,0 +1,27 @@ +@require "display" + +$noticeStripes + background-color: colors.notice1 // Fallback for old browers. + background-image: repeating-linear-gradient( + -45deg, + colors.notice1, + colors.notice1 10px, + colors.notice2 10px, + colors.notice2 20px + ) + +div.notice + @extend div.display, $noticeStripes + margin: 8px 0 + + box-shadow: none + + color: colors.textinverse + font-weight: bold + font-style: italic + + .button + outline: 1px solid colors.border + + .label + color: colors.textinverse diff --git a/tgui/styles/components/resize.styl b/tgui/styles/components/resize.styl new file mode 100644 index 00000000000..74cc43c0a0a --- /dev/null +++ b/tgui/styles/components/resize.styl @@ -0,0 +1,12 @@ +div.resize + position: fixed + bottom: 0 + right: 0 + width: 0 + height: 0 + + border-style: solid; + border-width: 0 0 45px 45px; + border-color: transparent transparent colors.resize transparent + + transform: rotate(360deg) diff --git a/tgui/styles/components/section.styl b/tgui/styles/components/section.styl new file mode 100644 index 00000000000..0ba06f8cc56 --- /dev/null +++ b/tgui/styles/components/section.styl @@ -0,0 +1,33 @@ +$cell + display: table-cell + margin: 0 + text-align: left + vertical-align: middle + +section + display: table-row + width: 100% + padding: 3px 0 + + &:not(first-child) + padding-top: 4px + + .label + @extend $cell + width: 1% + padding-right: 32px + white-space: nowrap + + color: colors.label + + .content + @extend $cell + &:not(:last-child) + padding-right: 16px + + .line + @extend $cell + width: 100% + + .buttoninfo + margin-left: 5px diff --git a/tgui/styles/components/subdisplay.styl b/tgui/styles/components/subdisplay.styl new file mode 100644 index 00000000000..d4d20c96ee3 --- /dev/null +++ b/tgui/styles/components/subdisplay.styl @@ -0,0 +1,9 @@ +div.subdisplay + width: 100% + margin: 0 + + header + @extend div.display header + + article + @extend div.display article diff --git a/tgui/styles/components/titlebar.styl b/tgui/styles/components/titlebar.styl new file mode 100644 index 00000000000..7d9f36e1827 --- /dev/null +++ b/tgui/styles/components/titlebar.styl @@ -0,0 +1,52 @@ +$titleButton + display: inline-block + position: relative + padding: 7px // To make a bigger clickable area. + margin: -7px + + color: colors.title; + + &:hover + color: lighten(colors.title, colors.hover) + +header.titlebar + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 32px; + + background-color: colors.titlebar + box-shadow: 0 3px 3px alpha(#000, 0.1) + + .statusicon + position: absolute + top: 4px + left: 12px + transition: color 0.5s + + .title + position: absolute + top: 6px + left: 46px + + color: colors.title + font-size: 16px + white-space: nowrap + + .minimize + @extend $titleButton + position: absolute + top: 6px + right: 46px + .close + @extend $titleButton + position: absolute + top: 4px + right: 12px + +.wf-inactive + .minimize::after + content: "-" + .close::after + content: "X" diff --git a/tgui/styles/config.styl b/tgui/styles/config.styl new file mode 100644 index 00000000000..0eb68db8a9e --- /dev/null +++ b/tgui/styles/config.styl @@ -0,0 +1,8 @@ +@charset "utf-8" + +// Fonts +font = Verdana, Geneva, sans-serif +fontsize = 12px + +// Colors +colors = json("../colors.json", {hash: true}) diff --git a/tgui/styles/core/clearfix.styl b/tgui/styles/core/clearfix.styl new file mode 100644 index 00000000000..80f65910db0 --- /dev/null +++ b/tgui/styles/core/clearfix.styl @@ -0,0 +1,5 @@ +$clearfix + &:after + content: "" + display: table + clear: both diff --git a/tgui/styles/core/colors.styl b/tgui/styles/core/colors.styl new file mode 100644 index 00000000000..ae588547b89 --- /dev/null +++ b/tgui/styles/core/colors.styl @@ -0,0 +1,14 @@ +.normal + color: colors.normal +.good + color: colors.good +.average + color: colors.average +.bad + color: colors.bad +.highlight + color: colors.highlight +.label + color: colors.label +.dark + color: colors.dark diff --git a/tgui/styles/core/document.styl b/tgui/styles/core/document.styl new file mode 100644 index 00000000000..ba2822cad88 --- /dev/null +++ b/tgui/styles/core/document.styl @@ -0,0 +1,32 @@ +html + box-sizing: border-box + min-height: 100% + margin: 0 + + cursor: default // Reset the cursor. + +// This really should be the default. +*, *:before, *:after + box-sizing: inherit + +body + min-height: 100% + height: 100% + margin: 0 6px + + background-color: colors.background-end; // Fallback for old browsers. + + font-family: font + font-size: fontsize + color: colors.text + +main + display: block + margin-top: 32px + padding-top: 3px + + +hr + height: 2px + background-color: colors.rule + border: none diff --git a/tgui/styles/core/header.styl b/tgui/styles/core/header.styl new file mode 100644 index 00000000000..cd3f7c85368 --- /dev/null +++ b/tgui/styles/core/header.styl @@ -0,0 +1,16 @@ +$h + display: inline-block + margin: 0 + padding: 6px 0 +h1 + @extend $h + font-size: fontsize + 6px +h2 + @extend $h + font-size: fontsize + 4px +h3 + @extend $h + font-size: fontsize + 2px +h4 + @extend $h + font-size: fontsize diff --git a/tgui/styles/core/text.styl b/tgui/styles/core/text.styl new file mode 100644 index 00000000000..62541c38381 --- /dev/null +++ b/tgui/styles/core/text.styl @@ -0,0 +1,17 @@ +// Helper to reset font options to default. +$fontReset + color: colors.text + font-size: fontsize + font-weight: normal + font-style: normal + text-decoration: none + +// Utility classes to set font styles. +.bold + font-weight: bold +.italic + font-style: italic + +// Make 'unselectable' text unselectable on all browsers. +[unselectable] + user-select: none diff --git a/tgui/styles/main.styl b/tgui/styles/main.styl new file mode 100644 index 00000000000..400ea3a6432 --- /dev/null +++ b/tgui/styles/main.styl @@ -0,0 +1,5 @@ +@require "config" + +@require "core/*" +@require "components/*" +@require "styles/*" diff --git a/tgui/styles/styles/generic.styl b/tgui/styles/styles/generic.styl new file mode 100644 index 00000000000..ff2bf29a7e3 --- /dev/null +++ b/tgui/styles/styles/generic.styl @@ -0,0 +1,4 @@ +body.generic + background: linear-gradient(to bottom, + colors.background-start 0%, + colors.background-end 100%) diff --git a/tgui/styles/styles/nanotrasen.styl b/tgui/styles/styles/nanotrasen.styl new file mode 100644 index 00000000000..0625ef88dff --- /dev/null +++ b/tgui/styles/styles/nanotrasen.styl @@ -0,0 +1,5 @@ +body.nanotrasen + background: data-url('nanotrasen.svg') no-repeat fixed center/70% 70%, + linear-gradient(to bottom, + colors.background-start 0%, + colors.background-end 100%) diff --git a/tgui/tgui.html b/tgui/tgui.html new file mode 100644 index 00000000000..c4be20105b8 --- /dev/null +++ b/tgui/tgui.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +
+
+ Loading... +
+
+ + +